Python

Résolu
Bonjour j'essaye de réppondre à ces question et j'éprouve un peu de difficulté est-ce que on pourrait m'aider svp:

On doit pouvoir saisir le nombre de compétitions du tournoi (valeur à vérifier). Il y a trois lanceurs de javelot (Julie, Claude, Arnold) qui concourent pour un tournoi de plusieurs compétitions.

Pour chacune des compétitions qui ont été disputées dans un tournoi, on doit pouvoir saisir le meilleur lancer (en mètres) de javelot de chacun des concurrents.

Pour chaque compétition, nous voulons faire afficher le numéro de la compétition, le nom et la distance du lancer du vainqueur, et afficher la moyenne des distances de lancers.

reprint("====================================competition numero 1====================================")

print("Bienvenu au tournoi de javelot : ",nom_Participant1)
saisirNbCompetition  = int(input("Saisissez votre nombre de competition  :"))

option = input("preferer vous effectuer une simulation et gerer aleatoirement les distances de lancers    (o/n) ?")

if option == "o":
    valeur_option = random.randint(0,120)
    print("Felicitation, vous avez atteint un lancers de  :  ",valeur_option,metres)

else :
    distanceRecord =(input("entrez la distance du lancers que vous avez obtenu   :"))

    print("Felicitation, vous avez atteint un lancers de  : ",distanceRecord,metres )
print("Bienvenu au tournoi de javelot : ",nom_Participant2)

22 réponses

Résumé de la discussion

Ce fil porte sur la gestion d'un tournoi de javelot avec compétitions, où l'on saisit le nombre d'épreuves et le meilleur lancer de chaque participant afin d'identifier le vainqueur. Des échanges techniques expliquent comment structurer le code, notamment la saisie du nombre d'épreuves, une boucle, l'enregistrement des meilleurs lancers et l'affichage des résultats pour chaque compétition. Plusieurs pistes alternent entre simulation aléatoire des distances et saisie manuelle, avec des conseils sur l'organisation des données et la détermination du vainqueur puis le calcul de la moyenne. En pratique, l'approche recommandée consiste à saisir le nombre d'épreuves, enregistrer les meilleurs lancers des trois participants, puis comparer et afficher le vainqueur et la moyenne par épreuve.

Bobot (l’IA à votre service)
  1. """
    Description : programme qui verifie la Plage de valeur d'"un concurant
    Parametre :
    Retour:
    """"
    def verifiePlageDeValeur (p_nom:str,p_plage:int):
    distance =random.randint(0,120)
    nom= julie # str
    plage = [0,120 ] # int
    while distance > 0 < 120 :
    p_nom = input("entrez votre nom")
    p_plage = int(input("entrez une valeur"))
    return distance

    le code que j'ai écris ne vérifie rien
    1. on ne voit pas l'indentation mais il y en a
    2. @code24Quand ça ne fonctionne pas, fais des
      print
      de tes variables, partout s'il le faut ! Le but c'est que tu comprennes.

      Tu écris
      distance > 0 < 120
      . ça veut dire que tu vérifies si
      distance > 0
      ET
      0 < 120
      .
      Au début tu prends une valeur entière au hasard dans [0,120]. Il est très probable que la distance obtenue soit ainsi > 0. Et vu que tu ne modifies pas ta variable
      distance
      dans la boucle, eh bien ta condition
      distance  > 0
      est vraie tout le temps.
      De plus
      0 < 120
      c'est toujours vrai. Ta condition dans le
      while
      est donc Vrai ET Vrai... c'est tout le temps Vrai, donc ça n'en finit jamais.
      Tu as fait une jolie boucle infinie.

      La solution c'est donc de :
      • revoir la condition dans le
        while
        , et
      • modifier ta variable
        distance
        à l'intérieur de la boucle.
    3. @code24Bonsoir,

      as-tu d'autres questions sur le sujet ?
      Si tu n'en as pas et que tu considères le sujet comme clos, je te propose de le marquer comme "Résolu". :-)
  2. Description : programme qui verifie la Plage de valeur d'"un concurant
    Parametre :
    Retour:
    """"

    def verifiePlageDeValeur (p_nom:str,p_plage:int):
    nom= julie # str
    plage = [0,120] # int
    plage = int(input("Saisissez la distance dun concurant")
    while plage < 0 > 120 :
    p_nom
    return valide

    j'essaye de construire quelque chose je sais pas si ça fait du sens
    1. bonjour

      Une petite idée comment je pourrais faire ce code?

      On veut rajouter une fonction verifiePlageDeValeur pour valider la saisie de distance des lancers ).

      • La fonction demande à l’utilisateur de saisir la distance de lancer d’un concurrent tant qu’elle n’est pas comprise entre les valeurs d’une distance minimale et maximale inclues.

      • La fonction prend le nom du concurrent en paramètre ainsi que les bornes de la plage autorisée et retourne la valeur valide.

      • On appelera la fonction avec les bornes de la plage de valeur [0,120]
        • La fonction demande à l’utilisateur de saisir la distance de lancer d’un concurrent tant qu’elle n’est pas comprise entre les valeurs d’une distance minimale et maximale inclues.

        Tout est écrit : dans ta nouvelle fonction
        verifiePlageDeValeur
        tu fais une boucle
        while
        qui vérifie que la distance de lancer que tu viens de saisir n’est pas comprise entre les valeurs d’une distance minimale et maximale inclues. Sous cette condition, tu redemandes la saisie.
        Quand tu sors de la boucle, cela voudra dire que la valeur saisie est (enfin) bonne. Il te reste donc à l'envoyer en sortie de ta fonction
        verifiePlageDeValeur
        .
    2. sinon le programme marche, j'arrive à 10,83
      1. ""une fonction qui remplace random.randint(0,120) ? Dans ce cas, un return random.randint(0,120) suffit.""

        oui pour le retour de fonction c'est cela que je veux,
    3. 0 + 11 + 12 + 14 + 15 + 13 / 6 = 10.83 ?
      1. Pour chacune des compétitions qui ont été disputées dans un tournoi, on doit pouvoir saisir le meilleur lancer (en mètres) de javelot de chacun des concurrents.

        Pour chaque compétition, nous voulons faire afficher le numéro de la compétition, le nom et la distance du lancer du vainqueur, et afficher la moyenne des distances de lancers.
      2. Je reconnais que l'énoncé de la partie A n'est pas clair.
        Il demande de saisir le meilleur lancer de chaque participant pour chaque compétition.
        Quand il demande la moyenne des lancers sur une compétition, je le comprends comme tu l'as fait, sur tous les lancers d'une compétition.
        Mais sachant qu'il demande seulement de saisir les meilleurs lancers, j'imaginais qu'on n'avait que ces données à moyenner (sans avoir à saisir les autres lancers).
        Dans le doute, tu peux poser la question à la personne qui t'a fourni l'énoncé.
    4. peut-être que je me suis trompé? je dois pas additionner tous les lancers diviser par 6? étant donné qu'ils ont 2 lancers chacun et qu'on veux la moyenne des lancers par compétition?
      1. La fonction
        resultat
        que tu as définie fait un simple
        print
        sans afficher de variable. Donc si tu veux l'utiliser, tu indiques simplement
        resultat()
        et à la ligne suivante tu fais un
        print
        de la variable qui correspond.
        A moins que tu parlais de créer une fonction qui remplace
        random.randint(0,120)
        ? Dans ce cas, un
        return random.randint(0,120)
        suffit.

        Je crois que là je perds un peu le fil de ce que tu veux faire.
        Repartons déjà de la partie A de ton exercice (donc on met de côté la simulation)
        Et avec un exemple, pour être sûr de vouloir le même résultat :

        compétition 1
        lancers de Julie : 0 - 11 => on demande au programme de saisir le meilleur lancer (on tape 11)
        lancers de Claude : 12 - 14 => on demande au programme de saisir le meilleur lancer (on tape 14)
        lancers de Arnold : 15 - 13 => on demande au programme de saisir le meilleur lancer (on tape 15)
        => le programme affiche : le numéro de la compétition (1), le nom (Arnold) et la distance du lancer du vainqueur (15), et afficher la moyenne des distances de lancers(=> ici, j'imagine qu'on parle de moyenne des meilleurs lancers, ce qui donnerait (11+14+15)/3=13.33.

        compétition 2
        lancers de Julie : 5 - 10 => on demande au programme de saisir le meilleur lancer (on tape 10)
        lancers de Claude : 12 - 11 => on demande au programme de saisir le meilleur lancer (on tape 12)
        lancers de Arnold : 11 - 9 => on demande au programme de saisir le meilleur lancer (on tape 11)
        => le programme affiche : le numéro de la compétition (2), le nom (Claude) et la distance du lancer du vainqueur (12), et afficher la moyenne des distances de lancers( (10+11+12)/3=11 ).

        Est-ce que ton programme te donne les mêmes résultats avec ces exemples ?
        1. c'est pour cela que j'ai crée ces trois variables

          # premierLancer_Participant = 0
          # deuxiemeLancer_participant1 = 0
          # meilleurLancer_Participant1 = 0

          et que j'ai répété 3 fois ce code pour chaque participant :
          et je me suis également demander si je pouvais utiliser l'appel de fonction pour mes affichages qui se répètent ce que j'ai réussi à faire, mais j'ai de la difficulté à utiliser l'appel de fonction ""def " pour par exemple "" premierLancer_Participant1 = random.randint(0,120)"""

          print ("Bienvenu au tournoi de javelot : ",nom_Participant1)
          option = input("Vous avez deux lancers, preferer vous effectuer une simulation \n et gerer aleatoirement les distances de lancers (o/n) ? :")

          if option == "o":
          premierLancer_Participant1 = random.randint(0,120)
          print("Felicitation, vous avez atteint un premier lancers de :
          ",premierLancer_Participant1,metres)

          print("Veuillez faire votre deuxieme lancer")
          deuxiemeLancer_Participant1 = random.randint(0,120)
          somme_Lancer += meilleurLancer_Participant1
          print("Felicitation, vous avez atteint un deuxieme lancers de :
          ",deuxiemeLancer_Participant1,metres)
          cpt = cpt + 1
          else :
          premierLancer_Participant1 =(input("entrez la distance du premier lancer :"))
          print("Felicitation, vous avez atteint un premeir lancers de :
          ",premierLancer_Participant1,metres)
          print("Veuillez faire votre deuxieme lancer")
          somme_Lancer += deuxiemeLancer_Participant1
          1. Ce n'est que la somme des lancers qu'on remet à 0, mais c'est vrai qu'il faut stocker les meilleurs lancers de chaque participant pour pouvoir les comparer à la fin de chaque compétition.
            1. merci !

              je vais pouvoir également faire ressortir le vainqueur ? étant donné qu'on réinitialise toujours à zéro les valeurs et qu'on à qu'une variable de stockage pour les lancers des 3 participants pour leur deux lancers?
              1. en faisant ça mes données sont tous sauvegarder dans une seule variable? alors quand je vais devoir calculer la moyenne ça ne fonctionnera pas ?
                1. le code fonctionne, ma boucle fonctionne, mais si je veux désigner un vainqueur, mes données sont tous stocker dans une seule variable? est-ce que c'est toujours possible de le faire ?
                2. @code24Pour avoir la moyenne des lancers pour une compétition, tu initialises ta variable somme_Lancers au début de la boucle :
                  for i in range(saisirNbCompetition):
                      somme_Lancers = 0 #on l'initialise ici comme ça à chaque début de nouvelle compétition, on remet les scores à 0
                      
                      # code à ajouter
                      
                      #à chaque nouveau lancer :
                      somme_Lancers += la_valeur_du_lancer_obtenue
                      
                      # code à ajouter
                      
                      # à la fin de la boucle, tu calcules la moyenne en utilisant somme_Lancers et la bonne formule
              2. Bonjour,
                si tu veux éviter de répéter ce code pour chaque participant, tu peux faire une boucle
                for nom_participant in ["Julie", "Claude", "Arnold"]:

                et dans la boucle tu remplaces
                nom_Participant1
                par
                nom_participant
                .

                Je te donne des indications mais c'est à toi de tester si ça fonctionne. Utilise autant de
                print
                que nécessaire pour déboguer et comprendre le fonctionnement du code que tu écris.
                1. je n'arrive pas à faire une boucle, vous voyez ce code est pour 1 participant, ça marche quand même?
                  et je dois reproduire ça 2 autres fois

                  # Participant 1

                  print("Bienvenu au tournoi de javelot : ",nom_Participant1)
                  saisirNbCompetition = int(input("Saisissez votre nombre de competition :"))
                  for i in range(saisirNbCompetition):
                  print (i+1)
                  option = input("preferer vous effectuer une simulation et gerer aleatoirement les distances de lancers (o/n) ?")
                  if option == "o":
                  premierLancer_Participant1 = random.randint(0,120)
                  deuxiemeLancer_Participant1 = random.randint(0,120)
                  cpt = cpt + 1
                  else :
                  premierLancer_Participant1 =(input("entrez la distance du lancers que vous avez obtenu :"))
                  deuxiemeLancer_Participant1 =(input("entrez la distance du lancers que vous avez obtenu :"))
                  cpt = cpt + 1
                  1. Oui tu peux utiliser une boucle. Et ensuite tu peux parcourir ce tableau, par exemple de cette façon, pour une compétition du participant1 :
                    #somme_Lancers à initialiser à 0
                    for num_lancer in range(1,nombre_de_lancers+1):
                    	if option == "o":
                    		lancer_Participant1 = random.randint(0,120)
                    		print("Felicitation, votre lancer n°",num_lancer ,"est de : ",lancer_Participant1,"metres")
                    		somme_Lancers += lancer_Participant1
                    
                    1. Tu copies ton code à partir de ton éditeur (avec les indentations). Tu le colles ici, ensuite tu le sélectionnes en entier et puis tu sélectionnes les balises de code python.
                      Mais tout est précisé dans le lien que j'ai indiqué.
                      1. est-ce qu'il à un moyen de faire une boucle pour que je puisse refaire les mêmes étapes pour un deuxième lancers
                        ou je dois récrire le même code pour un deuxième lancers?

                        if option == "o":
                        premierLancer_Participant1 = random.randint(0,120)
                        print("Felicitation, votre premier lancer est de : ",premierLancer_Participant1,metres)
                        somme_Lancers += premierLancer_Participant1
                        cpt = cpt + 1
                    2. bonjour,

                      Qu'est-ce que la mise en forme? un model ou un programme ou je copie mon code ?
                      1. Bonjour,

                        J'ai 2 remarques :

                        1. Le code tel que tu l'as affiché est difficile à lire (d'autant plus qu'on ne voit pas les indentations). Donc peux-tu le mettre en forme, comme indiqué ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code.
                        Ce sera plus facile à lire pour toi et pour les personnes qui t'aident.

                        2. N'aie pas peur de tester de ton côté. C'est en faisant des erreurs que l'on apprend.
                        Déjà quand tu exécutes ton programme, arrives-tu à voir tes
                        print
                        à la console ? Si non, pourquoi ?
                        As-tu des erreurs ? Si oui, comment peux-tu les corriger ?
                        1. ça donne ça pour le moment je sais pas si je suis toujours sur la bonne direction
                          1. ---- Déclaration et Initialisations variables (var) et constantes (CTE) ------------------------------------------------
                            
                            saisirNbCompetition = 2 
                            numero_Competition= 0  
                            nom_Participant1 = "Julie"
                            meilleurLancer_Participant1 = 0 
                            nom_Participant2 = "arnold"
                            meilleurLancer_Participant2 = 0 
                            nom_Participant3 = "claude"
                            meilleurLancerParticipant3 = 0 
                            moyenne_Distance = 0.0                                        
                            moyenne_Records = 0.0                                    
                            distance_Record = 0.0                                    
                            lanceEnmetre = 0.0                                                
                            metres = "metres"
                            option = ""
                            decimal_Result = 0
                            #Fonction------------------------------------------------------------------------------------------------------------------------------
                            
                            import random
                            def  resultat():
                                      print ("Le meilleur lancer  est celui de   :  ")
                            #---------------------------------- Code ----------------------------------------------------------------------------
                            print("====================================competition numero 1====================================")
                            # -------------
                            # Participant 1
                            # -------------
                            print("Bienvenu au tournoi de javelot : ",nom_Participant1)
                            
                            saisirNbCompetition  = int(input("Saisissez votre nombre de competition  :"))
                            for i in range(saisirNbCompetition):
                                print (i+1)
                            
                            option = input("preferer vous effectuer une simulation et gerer aleatoirement les distances de lancers    (o/n) ?")
                            if option == "o":
                                meilleurLancer_Participant1 = random.randint(0,120)
                                
                                print("Felicitation, vous avez atteint un lancers de  :  ",meilleurLancer_Participant1,metres)
                            
                            else :
                                meilleurLancer_Participant1 =(input("entrez la distance du lancers que vous avez obtenu   :"))
                                print("Felicitation, vous avez atteint un lancers de  : ",meilleurLancer_Participant1,metres )
                            
                            # -------------
                            # Participant 2
                            # ------------- 
                            print("Bienvenu au tournoi de javelot : ",nom_Participant2)
                            saisirNbCompetition  = int(input("Saisissez votre nombre de competition  :"))
                            print(i+2)
                            meilleurLancer_Participant2 = random.randint(0,120)
                            print("Felicitation, vous avez atteint un lancers de  :  ",meilleurLancer_Participant2,metres)
                            # -------------
                            # Participant 3
                            # -------------
                            print("Bienvenu au tournoi de javelot : ",nom_Participant3)
                            saisirNbCompetition  = int(input("Saisissez votre nombre de competition  :"))
                            meilleurLancer_Participant3 = random.randint(0,120)
                            print("Felicitation, vous avez atteint un lancers de  :  ",meilleurLancer_Participant3,metres)
                            # ---------------------------------------------------
                            # Recherche du meilleur lancer sur les 3 participants
                            # ---------------------------------------------------
                            if meilleurLancer_Participant1 > meilleurLancer_Participant2:
                                resultat(nom_Participant1)
                            elif  (meilleurLancer_Participant1 < meilleurLancer_Participant3) :
                                    resultat( nom_Participant3)
                            else :(meilleurLancer_Participant2 < meilleurLancer_Participant3)
                            resultat(nom_Participant3)

                            • 1
                            • 2