Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide exercice France IOI - L espion démasqué !

    25 juillet 2019 à 17:02:47

    Bonjour à tous,

    je bute sur un exercice de France IOI dont voici la consigne :

    Grâce à un certain nombre d'informateurs plus ou moins fiables, le chef de la police a recueilli des indications qui devraient lui permettre enfin de démasquer cet espion qui lui échappe depuis des semaines. La population de la ville étant relativement importante, il vous demande votre aide afin d'automatiser un peu les choses. Vous devez estimer la probabilité qu'une personne soit un espion.

    Ce que doit faire votre programme :

    Votre programme doit lire entier : un nombre de personnes à considérer. Ensuite, pour chaque personne, il doit lire son signalement sous la forme de cinq entiers : sa taille en centimètres, son âge en années, son poids en kilogrammes, un entier valant 1 si la personne possède un cheval et 0 sinon, et un entier valant 1 si la personne à les cheveux bruns et 0 sinon.

    On veut déterminer pour chaque personne à quel point elle correspond aux 5 critères suivants :

    • il aurait une taille supérieure ou égale à 178 cm et inférieure ou égale à 182 cm ;
    • il aurait au moins 34 ans ;
    • il pèserait strictement moins de 70 kg ;
    • il n'a pas de cheval ;
    • il a les cheveux bruns.

    Lorsque cela n'est pas précisé explicitement, les inégalités sont au sens large.

    Pour chaque personne, vous devez tester tous les critères. S'ils sont vérifiés tous les 5, vous devez afficher « Très probable ». Si seulement 3 ou 4 sont vérifiés, vous devez afficher « Probable ». Si aucun n'est vérifié, vous devez afficher « Impossible », et dans les autres cas, vous devez afficher « Peu probable ».

    Ci-dessous mon code (le code ayant échoué au test 1 et 2 mais réussi au 3ème) :

    personne = int(input())
    
    
    for loop in range (personne):
       taille = int(input())
       age = int(input())
       poids = int(input())
       cheval = int(input())
       cheveux = int(input())
       criteres = 0 
       
       if taille >= 178 and taille <= 182 :
          criteres = criteres + 1 
       elif age >=34:
          criteres = criteres + 1
       elif poids <70:
          criteres = criteres + 1
       elif cheval == 0:
          criteres = criteres + 1
       elif cheveux == 1:
          criteres = criteres + 1
       
       if criteres == 5 :
          print ("Très probable")
       elif criteres >= 3 :
          print ("Probable")
       elif criteres == 0 :
          print ("Impossible")
       else :
          print ("Peu probable")
    
    • Partager sur Facebook
    • Partager sur Twitter
      25 juillet 2019 à 17:14:55

      Quand tu arrives sur tes conditions tu veux que ton code vérifie critère par critère, la ce que tu as écrit équivaut à : Si le suspect à une taille comprise entre 178cm et 182cm alors ne pas tester les autres critères.

      Il faut que tu tests tes critères avec des simples "if"

         if taille >= 178 and taille <= 182 :
            criteres = criteres + 1
         if age >=34:
            criteres = criteres + 1
         if poids <70:
            criteres = criteres + 1
         if cheval == 0:
            criteres = criteres + 1
         if cheveux == 1:
            criteres = criteres + 1



      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2019 à 17:16:18

        Edit : Jojuss toujours une longueur d'avance x)

        -
        Edité par WorstDevEver 25 juillet 2019 à 17:22:55

        • Partager sur Facebook
        • Partager sur Twitter

        Try->Fail->Learn->Converge to success :{\displaystyle Q[s,a]:=(1-\alpha )Q[s,a]+\alpha (r+\gamma ~max_{a'}Q[s',a'])}

          25 juillet 2019 à 17:46:18

          Je me sens un peu bête ahah.

          J'ai voulu trop en faire avec cette fonction "sinon si"; mais c'est vrai que l'on cherche à savoir si les conditions sont respectés à chaque fois, j'ai bien compris la logique.

          Merci pour la rapidité de votre réponse !

          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2019 à 21:47:20

            En Python, on évite d'écrire 

            taille >= 178 and taille <= 182

            cela étant la solution commencée devrait finir par passer, les if/elif de la fin étant eux parfaitement justifiés.

            Sinon, pour ceux qui connaissent déjà un peu Python, l'exercice passe avec une seule instruction (et donc une seule ligne de code). Pour cela introduire la liste 

            ["Impossible", "Peu probable", "Peu probable", "Probable", "Probable", "Très probable"]

            et se rappeler qu'un booléen est un int.

            • Partager sur Facebook
            • Partager sur Twitter
              3 septembre 2019 à 14:13:03

              Bonjour à tous,

              Je rencontre également un petit souci quant à cet exercice; mon code est le suivant :

              nbPersonnes = int(input())
              
              for loop in range (nbPersonnes):
                 taille = int(input())
                 age = int(input())
                 poids = int(input())
                 cheval = int(input())
                 cheveux = int(input())
                 critere = 0
                 
                 if taille >= 178 and taille <= 182:
                    critere = critere + 1
                 if age >= 34:
                    critere = critere + 1
                 if poids < 70:
                    critere = critere + 1
                 if cheval == 0:
                    critere = critere + 1
                 if cheveux == 1: 
                    critere = critere + 1     
                    if critere == 5 :
                       print ("Très probable")
                    if critere >= 3 :
                       print ("Probable")
                    if critere == 0 :
                       print ("Impossible")
                    else :
                       print ("Peu probable")


              Le programme me donne ces premiers éléments de réponse : Probable Peu probable Peu probable au lieu de : Peu probable Probable Peu probable quelqu'un saurait il m'expliquer où se situe mon erreur s'il vous plait ? Je ne suis pas certaine des derniers if et du else :/

              Bonne journée ! :)

              • Partager sur Facebook
              • Partager sur Twitter
                3 septembre 2019 à 14:33:05

                Quand tu as un problème créé un nouveau sujet, c'est plus simple que de se retaper la discussion précédente, pour ton cas la solution est au dessus..

                Déjà ton bloc avec les comparaisons de "critere" ne devrait pas être indenté et ensuite il faut utiliser des "si ... sinon..." 

                if criteres == 5 :
                   print ("Très probable")
                elif criteres >= 3 :
                   print ("Probable")
                elif criteres == 0 :
                   print ("Impossible")
                else :
                   print ("Peu probable")



                -
                Edité par Jojuss 3 septembre 2019 à 14:34:00

                • Partager sur Facebook
                • Partager sur Twitter
                  3 septembre 2019 à 14:33:29

                  Déjà, je pense que le bloc lignes 21-28 est mal indenté (si cheveux!=1 tout ce bloc sera ignoré).

                  EDIT. Et comme signalé par Jojuss, ton dernier else pose problème.

                  -
                  Edité par PascalOrtiz 3 septembre 2019 à 14:35:24

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 septembre 2019 à 18:53:56

                    Autant pour moi je voulais comprendre plutôt que copier mais au final j'aurais mieux fait de copier pour comprendre :)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 mars 2020 à 19:27:43

                       Bonjour, je suis désolée de deterrer ce sujet mais je ne vois pas outrement :'(  SOS svp! Est-ce qqn pourrais me dire où est l'erreur ? J'ai déjà lis et relis la discussion en haut mais je ne comprends pas ce que pourrais être. Merci d'avance :)

                      suspects = int(input())
                      
                      for x in range(suspects):
                         age = int(input())
                         taille = int(input())
                         kg = int(input())
                         cheval = int(input())
                         brun = int(input())
                         probabilite = 0
                         
                         if 178 <= taille <= 182:
                            probabilite += 1
                         if age >= 34:
                            probabilite += 1
                         if kg < 70:
                            probabilite += 1
                         if cheval == 0:
                            probabilite += 1
                         if brun == 1:
                            probabilite += 1
                            
                         elif probabilite == 5 :
                            print("Très probable")   
                         elif 3 <= probabilite <= 4:
                            print("Probable")   
                         elif 1 <= probabilite <= 2:
                            print("Peu probable")   
                         elif probabilite == 0:
                            print("Impossible")



                      -
                      Edité par M...B 30 mars 2020 à 19:39:19

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 mars 2020 à 19:50:06

                        Il y a deux erreurs (au moins) :

                        • l'ordre des entrées.
                        • la ligne 20
                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 mars 2020 à 12:36:01

                          PascalOrtiz a écrit:

                          Il y a deux erreurs (au moins) :

                          • l'ordre des entrées.
                          • la ligne 20

                          Ahh ce n'est pas venue à l'esprit que l'ordre des inputs c'était important  o_O Merci Pascal. Par contre, je rien change sur la ligne 20, et ça a passé. Merci et bon confinement :magicien:

                          -
                          Edité par M...B 31 mars 2020 à 12:40:13

                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 mars 2020 à 14:38:57

                            M...B a écrit:

                            Par contre, je rien change sur la ligne 20, et ça a passé.

                            Tu as modifié le code et maintenant c'est à la ligne 22 l'erreur et le code ne passe pas ls tests de fioi :

                            suspects = int(input())
                            
                            for x in range(suspects):
                               taille = int(input())
                               age = int(input())   
                               kg = int(input())
                               cheval = int(input())
                               brun = int(input())
                               probabilite = 0
                                
                               if 178 <= taille <= 182:
                                  probabilite += 1
                               if age >= 34:
                                  probabilite += 1
                               if kg < 70:
                                  probabilite += 1
                               if cheval == 0:
                                  probabilite += 1
                               if brun == 1:
                                  probabilite += 1
                                   
                               elif probabilite == 5 :   # <-- FAUX
                                  print("Très probable")  
                               elif 3 <= probabilite <= 4:
                                  print("Probable")  
                               elif 1 <= probabilite <= 2:
                                  print("Peu probable")  
                               elif probabilite == 0:
                                  print("Impossible")



                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 mars 2020 à 14:49:42

                              PascalOrtiz a écrit:

                              M...B a écrit:

                              Par contre, je rien change sur la ligne 20, et ça a passé.

                              Tu as modifié le code et maintenant c'est à la ligne 22 l'erreur et le code ne passe pas ls tests de fioi :

                              suspects = int(input())
                              
                              for x in range(suspects):
                                 taille = int(input())
                                 age = int(input())   
                                 kg = int(input())
                                 cheval = int(input())
                                 brun = int(input())
                                 probabilite = 0
                                  
                                 if 178 <= taille <= 182:
                                    probabilite += 1
                                 if age >= 34:
                                    probabilite += 1
                                 if kg < 70:
                                    probabilite += 1
                                 if cheval == 0:
                                    probabilite += 1
                                 if brun == 1:
                                    probabilite += 1
                                     
                                 elif probabilite == 5 :   # <-- FAUX
                                    print("Très probable")  
                                 elif 3 <= probabilite <= 4:
                                    print("Probable")  
                                 elif 1 <= probabilite <= 2:
                                    print("Peu probable")  
                                 elif probabilite == 0:
                                    print("Impossible")



                              Ahh siiiii  :) Effectivement, j'avais essayé tellement de trucs qui j'ai fini par collé ici le mauvais code avec 'elif' au début, alors que pour moi javais déjà corrigé, qu'on dois commencer par 'if' et non pas elif, ça je savais :D ce juste que, à un moment donné, j'étais obligé de faire des modifications de genre pour voir si s'allait fonctionné :D

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Aide exercice France IOI - L espion démasqué !

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown