Tarifs dégressifs (algorithme France ioi) [Résolu]

Signaler
-
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
-
Bonjour,

Voici l'énoncé:
L'auberge dans laquelle vous avez prévu de passer la nuit ce soir propose des tarifs très intéressants, pour peu que l'on n'arrive pas trop tard. En effet, plus on arrive tôt moins on devra payer. Vous essayez de construire un programme vous donnant directement le prix à payer en fonction de votre heure d'arrivée.
Ce que doit faire votre programme :

Votre programme lira un entier, l'heure d'arrivée, qui sera compris entre 0 et 12 inclus. 0 correspond à midi, 1 à 1h de l'après-midi, etc. et 12 à minuit.

Le prix de la chambre est de 10 pièces à midi, et augmente de 5 pièces chaque heure après midi. Il est donc de 15 pièces à 13h, etc. Il ne peut cependant pas dépasser 53 pièces.

Votre programme devra afficher le prix à payer correspondant à l'heure d'arrivée donnée.

Exemple 1
entrée :
7
sortie :
45

Exemple 2
entrée :
10
sortie :
53

MON CODE:

heureArrivee = int(input())
prixChambre = 10
for loop in range(heureArrivee):
      heureArrivee += 1
      prixChambre += 5
print(prixChambre)



Je suis bloquée car je ne sais pas comment introduire l'intervalle de 0 à 12. Faut-il que j'utilise le
if 0 <= heureArrivee <= 12 ? Je ne sais jamais s'il faut que j'utilise "For loop in range" ou le "if"
Qu'est-ce qui cloche dans mon code selon vous ?

Merci :-)
A voir également:

8 réponses

Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Bonsoir
Il y a plusieurs algorithmes possibles.

Comment le ferais tu en mode « recette »?
Demander heure d'arrivée
Affecter 10 au prix de la chambre
Si l'heure d'arrivée est compris entre 1 et 10
le prix de la chambre augmente de 5 euros à chaque heure
Afficher le prix de la chambre
heure = int(input())
prix = heure * 5 +10
if prix >53:
print("53")
if prix <=53:
print(prix)
Voici la réponse et de rien.
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
La bonne réponse avait déjà été donnée en 2018.
En plus en l'état, sans indentation ton code ne marche pas
Messages postés
29452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 septembre 2020
336
Bonjour
Nul besoin de boucle
Pour cette exercice il suffit d'un bloc conditionnel if else et d'une simple operation mathématique
Dis toi que
Prix = 10 + h*5

H etant l'heure d'arrivée entre 0 et 12
Et que le max est de 53.

.si tu entres 7 le resultat sera
10 + 7*5 = 45

Si tu entres 10 ca fera
10 + 10*5 = 60... donc max => 53

C'est franchement simple comme logique... désolé..mais j'ai du mal a comprendre que tu puisse rencontrer des difficultés...

Dis que je suis débile ça ira plus vite....
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Je ne te demande pas de réécrire l’énoncé, mais de décrire en français comment y répondre.
Je veux savoir le prix de la chambre en fonction de l'heure à laquelle j'arrive à l'auberge
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Je veux savoir le prix de la chambre en fonction de l'heure à laquelle j'arrive à l'auberge

Ça Jordane te l’as déjà expliqué, il te reste à faire en sorte que -1 ou 13 soit reconnus comme une saisie incorrecte.
ok, j'utilise le if pour rendre le -1 ou 13 incorrecte
heureArrivee = int(input())
prixChambre = 10
if 0 < heureArrivee < 12: 
  

C'est bien ça ?
le programme est:
prixChambre=10
heureArrivee = int(input())
if 0 < heureArrivee <= 12 :
prixChambre =10+ heureArrivee *5
if prixChambre >= 53:
print(53)
else:
print(prixChambre)
ta solution n'est pas correcte et ne passe pas le test sur France ioi
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Ta recette ne tient pas compte du max, ni du 0 à 12.
Et tu n’as pas choisi l’option la plus simple.

La méthode de Jordane, même si elle n’interdit de saisir 13, est plus simple.
Tu verras que dans la vie, la soultion la plus simple est souvent la meilleur.
Mais ça n’est pas pour ça qu’elle saute aux yeux.
Surtout, si dans ton cours tu en es aux boucles for, alors c’est à ça que tu penses en premier.

Tu n’as pas encore le niveau pour qu’un algorithme te vienne de A à Z en python. C’est pourquoi, je t’ai demandé de le formuler en français.

Donc toujours en français comment faire pour n’autoriser la saisie de que 0 à 12?

Pour un compteur allant de 0 à nombre 12 ?
Messages postés
29452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 septembre 2020
336 > Kams31
Je sais qu'en disant ceci je vais te paraître très désagréable et je m'en excuse...
Car je ne dis pas que tu es débile.... mais dans mon message précédent je t'ai indiqué que les boucles n'étaient pas nécessaires.... et qu'il fallait utiliser un bloc conditionnel....
Avoue que de reparler encore une fois d'un compteur fait un peu tâche....
Avant de vouloir écrire du code il faut comprendre la "logique". c'est ce que Whism essaye de te faire faire....
Donc n'essaye pas d'aller trop vite. prends un peu de temps pour essayer d'analyser/comprendre le fonctionnement....
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Non, si je rentre 15 ça doit le refuser, et me redemander.
il faut que le prixChambre soit inférieur à 12 ?
>
Messages postés
29452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 septembre 2020

heureArrivee = int(input())
prixChambre = 10
if 0 < heureArrivee < 12 : 
   prixChambre += heureArrivee * 5
if prixChambre >= 53:

print(prixChambre)
Messages postés
29452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 septembre 2020
336 > Kams31
.... on va faire autrement
Peux tu, pour chaque étape que je vais te lister, mettre le code correspondant ? (je fais le début je te laisse finir )
Je demande à l'utilisateur d'entrer son heure d'arrivée
heureArrivee = int(input())


Je vérifie si l'heure d'arrivée est bien entre 0 et 12
if 0 < heureArrivee <= 12 : 

Si oui ...
Je fais le calcul ( prix = ..... )
     prixChambre = 10 + heureArrivee * 5

Je vérifie SI le prix est supérieux ou égal à XX
Si Le prix est supérieur à XX alors je force le prix à XX
    if prixChambre >= 53:
        //ici je te laisse compléter


Si non ( pas la bonne heure) (l'heure d'arrivée est inférieur à 0 ou supérieur à 12 )
else:
    //ici je te laisse compléter



Le code est fait à 90% ... il ne te reste que deux lignes de code à compléter....
Tu devrais y parvenir cette fois....

Si ce n'est pas le cas, arrête de coder et va lire des TUTOS / COURS sur la programmation Python
par exemple : http://apprendre-python.com/page-apprendre-conditions-structures-conditionnelles-if-else-python-cours-debutant

Et surtout..... avant de continuer dans tes exercices, va prendre des leçons sur l'algorithmie....
Sans cette connaissance il est (presque) normal que tu galères autant....
Si tu n'as aucune logique, et que tu n'es pas capable de reformuler (ou de formuler tout simplement) le "fonctionnement" attendu du code en français (avec des phrases et pas seulement copier/coller l’énoncé qui t'a été donné.... ) ça ne sert à rien d'aller plus loin.
Si tu es capable de reformuler la demande correctement en expliquant étape par étape comme va fonctionner ton code... tu as déjà réalisé 80% du boulot. Le reste n'étant que la recherche (si nécessaire) des bonnes instructions et de leur syntaxe dans les manuels ou sur le net.

Je rappel qu'ici nous sommes là pour AIDER. pas pour réaliser le travail à ta place.
Copier/coller bêtement des lignes de code ( prises ici ou ailleurs sur le net) sans en comprendre la moindre instruction ne sert strictement à rien.

Courage.... l'apprentissage n'est pas toujours très facile. Ça dépend des capacités et de la volonté de chacun.... mais si on s'en donne la peine on fini toujours par y arriver.
Messages postés
29452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 septembre 2020
336 >
Messages postés
29452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 septembre 2020

Bien entendu, d'autres solutions existent.
Par exemple
- Tant que l'utilisateur ne saisi pas une heure d'arrivée valide ( c'est à dire, comprise entre 0 et 12 inclus ), le programme demande d'entrer l'heure d'arrivée.
pour ça, tu peux utiliser une boucle WHILE
Ci-dessous un exemple d'utilisation

name = "pasbon"

while name!= "kams":
    name = raw_input("Quel est ton pseudo ? ")

    if name == "kams":
        print "bravo"
    else:
       print "re-essaye"


Puis, dans le IF, placer le code qui effectue le calcul comme dans ce que je t'ai donné dans mon précédent message
Votre programme lira un entier, l'heure d'arrivée, qui sera compris entre 0 et 12 inclus:
- Demander heure d'arrivée

Le prix de la chambre est de 10 pièces à midi
- Affecter 10 au prix de la chambre

Il augmente de 5 pièces chaque heure
- Prix de la chambre + 5

Afficher le prix à payer correspondant à l'heure d'arrivée donnée
-Afficher le prix de la chambre
Il ne peut cependant pas dépasser 53 pièces
- Prix de la chambre < 53
la réponce est
heure = int(input())
prix = 10 + 5 * heure
if prix > 53:
prix = 53
print(prix)
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Et non, tu ne tiens pas compte de tout l’énoncé
C’est bien beau d’exhumer un sujet résolu depuis un an, mais c’est mieux de bien lire avant de réécrire une bêtise qui a déjà été faite.