Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide pour une "simple" commande

    26 septembre 2021 à 12:24:56

    Salut ! 

    Je vient de créer mon tout premier programme, c'est dans le cadre de l'école.

    L'écriture est très probablement maladroite, je suis donc ouvert à toute modifications !

    Mais j'ai crée ce topic pour avoir de l'aide sur les dernières lignes. Je cherche à faire quelques lignes qui demandent la statistique cherchée, donne la moyenne de celle-ci. j'ai pour l'instant utilisé la commande input() pour demander la statistique, mais je suis encore ouvert à toutes modifications. Je pense que vous comprendrez la ligne suivante. Pour le print(), j'aimerais afficher la stat demandée, puis sa moyenne mais je ne trouve pas le moyen de l'afficher car le input() est une variable et ne s'identifie pas à la l'élément de la liste demandé. 

    J'espère ne pas avoir été trop maladroit dans mes explications, et que c'est compréhensible.

    Excusez aussi mon approche très scolaire.

    Merci :)

    Je joint le programme 

    #On joue avec des statistiques de basket-ball, et on prend pour exemple le joueur Donovan Mitchell
    #Samuel MICHEL-CHAGNOT
    
    #on crée une liste pour chaque match qui comprend dans un ordre determiné les données du joueur
    import statistics #Pour plus tard
    match1 = [39, 9, 9, 0, 12, 27, 6, 9, 2]
    match2 = [21, 5, 5, 0, 6, 19, 5, 6, 2]
    match3 =[37, 5, 5, 0, 9, 56, 13, 15, 5]
    match4 = [30, 5, 4, 0, 11, 24, 3, 5, 2]
    match5 = [37, 3, 4, 0, 15, 29, 1, 2, 3]
    def stat(liste) :
        """on crée une fonction qui a pour but de suivre la formule de statistique trouvée sur wikipédia """
        return liste[0] + liste[1] + liste[2] + liste[3] + (liste[4] - liste[5]) + (liste[6] - liste[7]) - liste[8]
    match1.append(stat(match1)) #on ajoute à la liste match1 l'image de la fonction stat de match1
    match2.append(stat(match2)) #on recommence ...
    match3.append(stat(match3))
    match4.append(stat(match4))
    match5.append(stat(match5))
    #On veut ensuite créer une liste des moyennes de chaques données
    #on a besoin de créer une liste par donnée
    PTS = [39, 21, 37, 30, 37]
    REB = [9, 5, 5, 5, 3]
    PAD = [9, 5, 5, 4, 4]
    CTR = [0, 0, 0, 0, 0]
    TR = [12, 6, 9, 11, 15]
    TT = [27, 19, 56, 24, 29]
    LFR = [6, 5, 13, 3, 1]
    LFT = [9, 6, 15, 5, 2]
    BP = [2, 2, 5, 2, 3]
    STC = [37, 15, -7, 22, 26] #STC pour statistique classique
    midlist = [statistics.mean(PTS), statistics.mean(REB), statistics.mean(PAD), statistics.mean(CTR), statistics.mean(TR), statistics.mean(TT), statistics.mean(LFR), statistics.mean(LFT), statistics.mean(BP), statistics.mean(STC)]
    #On crée les moyennes de points par matchs de l'équipe etc
    equipe = [116.4, 48.3, 23.7] #dans l'ordre distinct : points par matchs, rebonds par matchs, passes D par matchs
    Donovan_mitchell = midlist + equipe
    #print(Donovan_mitchell)
    #On essaye ici de trouver une manière d'afficher rapidemment une statistique, et sa moyenne
    word = input("statistique demandée") #On demande la statistique
    if word in locals(): #On cherche si la statistique demandée est une variable connue dans le programme (commande locals())
        print("La statistique",word,"à pour moyenne",midlist[],)
            



    -
    Edité par SamChagnot 26 septembre 2021 à 13:33:40

    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2021 à 16:04:25

      Bonjour. C'est très maladroit en effet, mais c'est normal ! Il te manque un élément clé : le dictionnaire.

      print("Sur la table il y a deux boîtes : ")
      print("La boîte 'rouge'")
      print("La boîte 'bleu'")
      
      boites = {
          "rouge": "rien",
          "bleu": "un livre",
      }
      
      choix = input("Quelle boîte ouvrir ? : ")
      
      try:
          resultat = boites[choix]
      
      except KeyError: # 'choix' n'existe pas dans boites
          print(f"Il n'y a pas de boîte {choix} sur la table"); sys.exit()
      
      print(f"A l'intérieur de cette boîte il y a : {resultat}")

      Ta façon de faire avec 'locals()' c'est très bancal. 'locals()' c'est une fonction à oublier.

      -
      Edité par digammaF 26 septembre 2021 à 16:05:27

      • Partager sur Facebook
      • Partager sur Twitter
        26 septembre 2021 à 18:05:03

        digammaF a écrit:

        'locals()' c'est une fonction à oublier.

        Ah ! Pourquoi ?

        • Partager sur Facebook
        • Partager sur Twitter

        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          26 septembre 2021 à 20:38:08

          SamChagnot a écrit:

          Je cherche à faire quelques lignes qui demandent la statistique cherchée, donne la moyenne de celle-ci. j'ai pour l'instant utilisé la commande input() pour demander la statistique

          Si les différentes statistiques à afficher correspondent aux différents index de midlist, vous pourriez afficher un menu qui suggère de taper 0 pour PTS, 1 pour REB, ... et 99 pour sortir.

          • Partager sur Facebook
          • Partager sur Twitter
            26 septembre 2021 à 22:47:06

            fred1599 a écrit:

            digammaF a écrit:

            'locals()' c'est une fonction à oublier.

            Ah ! Pourquoi ?


            Comme illustré ici, quand on débute et qu'on utilise 'locals()' c'est qu'on a loupé quelque chose ou mal compris un truc. De manière générale même, quand est-ce que 'locals()' est préférable ? Dans les très rares cas où c'est utile, il n'y a aucun doute quant à cette utilité, et dans le reste des cas c'est une sorte de piège.
            • Partager sur Facebook
            • Partager sur Twitter
              27 septembre 2021 à 7:48:05

              digammaF a écrit:

              De manière générale même, quand est-ce que 'locals()' est préférable ? Dans les très rares cas où c'est utile, il n'y a aucun doute quant à cette utilité, et dans le reste des cas c'est une sorte de piège.


              Il m'est très utile en complément de pdb pour connaître le contenu des variables à certains moment, je fais pp locals() et j'ai un pprint des variables dans ma fonction.

              C'est surtout utilisé pour le debug.

              • Partager sur Facebook
              • Partager sur Twitter

              Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
              La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                27 septembre 2021 à 13:12:15

                une autre façon ici, pourrait être de refaire le calcul dans le print =>

                print("la statistique ",word," a pour moyenne:",statistics.mean(locals()[word]))


                Mais la méthode avec dictionnaire me parait la plus logique

                NB: dans ton code, les listes des lignes de 21 à 30 devraient être construites à partir des données des matchs

                • Partager sur Facebook
                • Partager sur Twitter
                  27 septembre 2021 à 16:10:55

                  fred1599 a écrit:

                  digammaF a écrit:

                  De manière générale même, quand est-ce que 'locals()' est préférable ? Dans les très rares cas où c'est utile, il n'y a aucun doute quant à cette utilité, et dans le reste des cas c'est une sorte de piège.


                  Il m'est très utile en complément de pdb pour connaître le contenu des variables à certains moment, je fais pp locals() et j'ai un pprint des variables dans ma fonction.

                  C'est surtout utilisé pour le debug.

                  Oui en effet. Par contre, faire reposer un algo sur 'locals()' c'est toujours évitable et à éviter.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 septembre 2021 à 20:46:32

                    digammaF a écrit:

                    Bonjour. C'est très maladroit en effet, mais c'est normal ! Il te manque un élément clé : le dictionnaire.

                    -
                    Merci Beaucoup ! Je vais faire en sorte de travailer de cette sorte ! Je peux renvoyer le programme pour que tu me dises ce que tu en penses ? 

                    Umfred à écrit : 

                    NB: dans ton code, les listes des lignes de 21 à 30 devraient être construites à partir des données des matchs

                    C'est à dire ? Je ne comprend pas ! 

                    Merci pour toutes vos réponses !! 

                    Edit : 

                    J'ai donc refait cette partie avec un dictionnaire. Je n'ai simplement pas compris le "sys.exit()" après l'erreur.

                    Je joint le nouveau bout de programme.

                    #On essaye ici de trouver une manière d'afficher rapidemment une statistique, et sa moyenne
                    
                    stats = { #on crée un dictionnaire
                        "Points" : "32.8 et pour l'équipe, 116.4",
                        "Rebonds" : "5.4 et pour l'équipe, 48.3",
                        "PassesD" : "5.4 etpour l'équipe, 23.7",
                        "Contres" : "0",
                        "Tirsréussis" : "10.6",
                        "Tirstentés" : "31",
                        "Lancésfrancsréussis" : "5.6",
                        "Lancéfrancstentés" : "7.4",
                        "Ballesperdues" : "2.8",
                        "StatistiquesC" : "18.6",
                        }
                    
                    choix = input("Quelle statistique dcherchez-vous ?") #On demande la statistique
                    
                    try:
                        resultat = stats[choix]
                    except KeyError:
                        print("mauvaise entrée"); sys.exit()
                    
                    print(f"La statistique de {choix} est de {resultat} .") #phrase de résultat





                    -
                    Edité par SamChagnot 27 septembre 2021 à 22:49:38

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 septembre 2021 à 13:27:05

                      sys.exit() c'est pour quitter le script https://docs.python.org/3/library/sys.html#sys.exit 

                      sinon tes dictionnaires sont mal fichus,

                      Je me répète, ces données ne doivent pas entrées manuellement mais extraites des données des matchs, sinon ça sert à rien d'avoir les données des matchs, si on rentre directement les valeurs dans les stats (si on ajoute un nouveau match, on ne va pas refaire les calculs, pour les écrire manuellement dans le script ? )

                      L'idée c'est plutôt de faire (c'est une piste)

                      stats['PTS']=[match1[0], match2[0], ...]
                      stats['REB']=[match1[1], match2[1], ...]
                      
                      choix=input("quelles stats?")
                      if choix in stats:
                         print(f"la stats {choix} a pour moyenne {statistics.mean(stats[choix])}")
                      

                      Il faut que choix soit PTS, ou REB ou une autre clé du dictionnaire stats.

                      En fait, il faudrait reprendre presque depuis le début pour factoriser un peu tout ça, par exemple un dictionnaire les_stats['nom_de_la_stat']=position_de_la_stat_dans_tableau_match, comme ça, on peut l'utiliser pour récupérer la statistique dans le tableau de match, générer le tableau de stats, avec des boucles

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Aide pour une "simple" commande

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      • Editeur
                      • Markdown