Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tarifs de l'auberge

FranceIOI

    3 décembre 2018 à 14:07:41

    Bonjour, sur ce sujet sur lequel je tourne en rond depuis qq jours ne fonctionne pas totalement car toute mes condition ne sont pas toujours  prise en compte ou alors dans un ordre de priorité que je ne gère pas j'ai a peu près essyer toute les alternative ca ne marche qu'a moitié...

    help please :waw:

    sujet du probleme : 

    Ce que doit faire votre programme :

    Une chambre ne coûte rien si on a 60 ans (l'âge de l'aubergiste !) et 5 écus si on a strictement moins de 10 ans. Pour les autres personnes c'est 30 écus plus un supplément de 10 écus si on a au moins 20 kilos de bagages.

    Votre programme doit lire deux entiers, l'âge et le poids des bagages de la personne et doit afficher le prix, sous la forme d'un entier.

    Age = int(input())
    poidBagages = int(input())
    
    prixBagages = 0
    prixChambre = 0
    
    if Age == 60:
       prixChambre = 0
       prixBagages = 0
    if Age < 10:
       prixChambre = 5
       prixBagages = 0
       
    if poidBagages >= 20
       prixBagages = 10
    
    else :
       prixChambre = 30
       prixBagaes = 0
       
       
    prixChambre = prixChambre + prixBagages
    print(prixChambre)

    Merci !!

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2018 à 16:17:57

      Le bloc if ligne 14, on peut y entrer même si on a 60 ans ou moins de 10 ans, c'est ça le problème.

      Pour débugguer, il suffit de suivre à la main le déroulement du programme :

      Si j'entre 60 pour l'âge et 5 pour les bagages par exemple :

      La condition ligne 7 est vraie donc prixChambre = 0 et prixBagages = 0

      La condition ligne 10 est fausse, rien ne change

      La condition ligne 14 est fausse donc je rentre dans le else, prixChambre = 30 et prixBagages = 0

      Le programme affiche 30 alors qu'on attendais 0.

      Tu peux aussi mettre des print dans le code pour voir dans quelles conditions tu rentre, mais c'est surtout utile dans les plus gros programmes, là tu peux le faire à la main.

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        3 décembre 2018 à 18:55:13

        Enréécrivant mon code de la sorte j'arrive a 19 test réussi sur 22, j'y suis presque mais ce petit détail me rend  :p

        Age = int(input())
        poidBagages = int(input())
        
        prixBagages = 0
        prixChambre = 0
        
        if Age == 60:
           prixChambre = 0
           prixBagages = 0
        if Age < 10:
           prixChambre = 5
           prixBagages = 0
          
        
        else :
           prixChambre = 30
           prixBagaes = 0
        
           if poidBagages >= 20:
              prixBagages = 10  
           
           prixChambre = prixChambre + prixBagages
        print(prixChambre)



        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2018 à 20:43:25

          Il faut utiliser elif ligne 10.

          Sinon la condition ligne 7 est considérée comme un bloc séparé, à part de la condition ligne 10.

          Ta manière de présenter le code rend la compréhension difficile, le fait que qu'il n'y ait pas de ligne vide entre la ligne 9 et le deuxième if laisse penser que c'est le même bloc, alors que non, les deux sont indépendants. Par contre le fait d'avoir deux lignes vides lignes 13 et 14, ça laisse penser que le else est un autre traitement, alors que non, c'est la continuité du if ligne 10.

          Bref, encore une fois c'est le même problème que juste avant, si on entre 60 en âge, on entre dans le else ligne 15, et donc la chambre passe à 30 ligne 16.

          Pourquoi ? Parce que si on écris plusieurs if à la suite, chaque condition est évaluée quel que soit le résultat de la précédente, alors que si on utilise if, elif, else, dès qu'une condition est vraie, le bloc d'instruction associé est évalué, et on saute directement à la fin de la condition sans évaluer les suivantes.

          -
          Edité par LoupSolitaire 3 décembre 2018 à 20:44:55

          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

            4 décembre 2018 à 12:13:53

            Merci!!! Mon code était bon à deux lettre pres...... mais je n,avais pas encore vu le elif mais quand je vois la soluce de France IOI je trouve ca presqueabusé lol

            age = int(input())
            poids = int(input())
            if age < 10:
               print(5)
            else:
               if age == 60:
                  print(0)
               else:
                  if poids >= 20:
                     print(40)
                  else:
                     print(30)



            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2018 à 13:01:59

              Ah oui, sans le elif, ça donne une solution assez moche, je suis d'accord !
              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                18 septembre 2019 à 18:00:25

                bonjour,

                mon code fonctionne sur python tutor mais pas sur france ioi, Pourquoi ???

                age = int(input())
                poids = int(input())
                px = 0
                
                if age >= 60:
                    px = 0
                elif age <= 10:
                    px = 5
                elif poids > 20:
                   px = 40
                else:
                   px = 30
                print(px)



                -
                Edité par TanguyJ1 18 septembre 2019 à 18:07:57

                • Partager sur Facebook
                • Partager sur Twitter
                  18 septembre 2019 à 18:23:43

                  Tu ne prends sans doute pas en compte des tests que pourrait faire le serveur FranceIOI.

                  • 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)

                  Tarifs de l'auberge

                  × 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