[Débutant] Mon premier programme Python, mes premiers soucis

Le
Patrice
Bonjour
Je viens de me remettre à la programmation avec
pour premier objectif de créer une calculatrice
d'heures de vol.
Le langage Python m'ayant semblé être
"relativement" simple, je me suis lancé.
Elle fonctionne (mal pour l'instant) en ligne de
commande et j'espère pouvoir la faire fonctionner
avec une interface graphique (mais je n'en suis
pas encore là ! :-) )
Voilà ce que ça donne (je m'excuse par avance pour
la longueur) :

#!/usr/bin/env python

# Calculatrice d'heures de vol

# Variables

heures = 0
minutes = 0
resultat_heure = 0
resultat_minute = 0
compteur = 0
aide = "- h : cette aide - q : pour quitter
- 0 et 0 : met les compteurs à 0"

# Programme principal

while 1:
compteur = compteur + 1 # Compteur du nombre
d'opérations

heures = raw_input("Heures : ") # Demande les
heures
if heures == "q": # Pour quitter
break
if heures == "h": # Pour avoir l'aide
print aide

if heures == "":
heures = 0
heures = int(heures)

minutes = raw_input("Minutes : ") # Demande les
minutes
if minutes == "q": # Pour quitter
break
if minutes == "h": # Pour avoir l'aide
print aide

if minutes == "":
minutes = 0
minutes = int(minutes)

if heures == "" and minutes == "": # Quitte
faute d'arguments corrects
print "Entrez des valeurs correctes"
break


if str(heures[0]) == "-": # Regarde le signe
positif ou négatif
minutes = - int(minutes) # Si le signe est
négatif, fais passer les minutes en négatif aussi


if int(heures) == 0 and int(minutes) == 0: #
Remet les compteurs à 0 si 0 est entré à heure et
minutes
resultat_heure = 0
resultat_minute = 0
compteur = 0


resultat_heure = int(resultat_heure) +
int(heures) # Additionne les heures précédentes
avec les nouvelles
resultat_minute = int(resultat_minute) +
int(minutes) # Additionne les minutes précédentes
avec les nouvelles


if int(minutes) >= 60: # Vérifie qu'il n'y a
pas plus de 60 minutes
heures = int(heures) + 1
minutes = int(minutes) - 60
else:
heures = int(heures)
minutes = int(minutes)


if int(resultat_minute) >= 60: # Vérifie
qu'il n'y a pas plus de 60 minutes
resultat_minute = int(resultat_minute) - 60
resultat_heure = int(resultat_heure) + 1
else:
resultat_heure = int(resultat_heure)
resultat_minute = int(resultat_minute)


if int(resultat_minute) < 0: # Si le signe
des minutes est négatif
resultat_heure = int(resultat_heure) - 1 #
transforme l'opération pour un affichage
resultat_minute = 60 + int(resultat_minute) #
correct des heures
else:
resultat_heure = int(resultat_heure)
resultat_minute = int(resultat_minute)


print resultat_heure, "h", resultat_minute,
"m" # Affiche le résultat de l'addition


resultat_heure = int(resultat_heure) # Met en
mémoire la nouvelle valeur de l'addition
resultat_minute = int(resultat_minute)

Voici mes problèmes :
- je n'arrive pas à faire en sorte qu'un appui
sur Entrée équivaut à entrer 0
- quand je demande l'aide, je ne sais pas faire
reprendre le programme au départ et donc, erreur !
- je sais que des erreurs apparaissent quand on
commence à avoir des heures négatives
Je pense qu'il faut utiliser def qqchose() pour
que ça soit plus clair et pour que ça fonctionne
mais je ne sais pas trop comment.
Bref, si quelqu'un peut éclairer ma lanterne,
merci par avance.
Patrice
PS : pour utiliser la calculatrice, il suffit
d'entrer les heures, les minutes et le résultat de
l'addition s'affiche.Pour soustraire, il faut
mettre - devant l'heure seulement.
La remise du compteur à 0 se fait en tapant 0 pour
les heures et pour les minutes.q sert à quitter.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Roger That
Le #47325
Voici mes problèmes :
- je n'arrive pas à faire en sorte qu'un appui sur Entrée équivaut à
entrer 0
- quand je demande l'aide, je ne sais pas faire reprendre le programme
au départ et donc, erreur !
- je sais que des erreurs apparaissent quand on commence à avoir des
heures négatives


Plusieurs conseils:
- fais une fonction pour lire une minute ou une heure (qui prendra en
paramètre le texte à afficher et qui retournera un booleen selon si il
faut quitter le programme ou non). Eviter un maximum de copier coller le
code
- ne fais pas des effectations qui servent à rien
minutes = 0
minutes = int(minute)
La deuxième ligne est inutile
- le fait que "minutes" et "heures" puisse être des chaines et des
nombres à différents moments du programme est pour moi dangereux
- Au lieu de
if str(heures[0]) == "-"
tu peux faire
if heures<0

Benoit HURON
Le #47322
J'ai quelques remarques que j'insère dans votre code (précédées de *).

Patrice wrote:

#!/usr/bin/env python

# Calculatrice d'heures de vol

# Variables

heures = 0
minutes = 0
resultat_heure = 0
resultat_minute = 0
compteur = 0
aide = "- h : cette aide n - q : pour quitter n
- 0 et 0 : met les compteurs à 0n"

# Programme principal

while 1:
compteur = compteur + 1 # Compteur du nombre
d'opérations

heures = raw_input("Heures : ") # Demande les
heures
if heures == "q": # Pour quitter
break
if heures == "h": # Pour avoir l'aide
print aide


* C'est ici qu'il faut insérer un continue statement (continue) pour
recommencer la boucle (et éviter ainsi les erreurs)


if heures == "":
heures = 0


* Remplacez ceci par :
* if not heures : heures = 0
* D'autre part, si l'input n'est ni 'h' ni 'q' c'est forcément un nombre. Il
est donc possible de le transformer en entier pour la suite de votre code
(en dehors de l'if statement). heures = int(heures) (toutes ces remarques
s'appliquent aussi aux minutes)


if heures == "" and minutes == "": # Quitte
faute d'arguments corrects
print "Entrez des valeurs correctes"
break


* Ce bout de code ne s'effectuera jamais (nous avons changé les valeurs en
0).


if str(heures[0]) == "-": # Regarde le signe
positif ou négatif
* Mettre if heures < 0 (pareil pour les minutes)


minutes = - int(minutes) # Si le signe est
négatif, fais passer les minutes en négatif aussi


* en fait ce code ne fait passer minutes en négatif mais inverse son signe.
Si vous voulez minutes en négatif utilisez -abs(minutes)

if int(heures) == 0 and int(minutes) == 0: #
Remet les compteurs à 0 si 0 est entré à heure et
minutes
resultat_heure = 0
resultat_minute = 0
compteur = 0


resultat_heure = int(resultat_heure) +
int(heures) # Additionne les heures précédentes
avec les nouvelles


* Utilisez resultat_heure += heures (pareil pour les minutes)

resultat_minute = int(resultat_minute) +
int(minutes) # Additionne les minutes précédentes
avec les nouvelles


if int(minutes) >= 60: # Vérifie qu'il n'y a
pas plus de 60 minutes
heures = int(heures) + 1
minutes = int(minutes) - 60
else:
heures = int(heures)
minutes = int(minutes)


* Tout ce bout de code est mal placé. Vous n'utilisez plus les variables
heures et minutes.


if int(resultat_minute) >= 60: # Vérifie
qu'il n'y a pas plus de 60 minutes
resultat_minute = int(resultat_minute) - 60
resultat_heure = int(resultat_heure) + 1
else:
resultat_heure = int(resultat_heure)
resultat_minute = int(resultat_minute)


* Je ne comprends pas à quoi sert int(resultats_minutes). resultats-minutes
est déjà un entier depuis le début du programme.


if int(resultat_minute) < 0: # Si le signe
des minutes est négatif
resultat_heure = int(resultat_heure) - 1 #
transforme l'opération pour un affichage
resultat_minute = 60 + int(resultat_minute) #
correct des heures
else:
resultat_heure = int(resultat_heure)
resultat_minute = int(resultat_minute)


print resultat_heure, "h", resultat_minute,
"m" # Affiche le résultat de l'addition


* Utilisez print '%02d h %02d m' % (resultat_heures, resultat_minutes)
* Adaptez ce format en fonction de vos besoin (par exemple si vos heures
peuvent dépasser 99.


resultat_heure = int(resultat_heure) # Met en
mémoire la nouvelle valeur de l'addition
resultat_minute = int(resultat_minute)

Voici mes problèmes :
- je n'arrive pas à faire en sorte qu'un appui
sur Entrée équivaut à entrer 0
- quand je demande l'aide, je ne sais pas faire
reprendre le programme au départ et donc, erreur !
- je sais que des erreurs apparaissent quand on
commence à avoir des heures négatives
Je pense qu'il faut utiliser def qqchose() pour
que ça soit plus clair et pour que ça fonctionne
mais je ne sais pas trop comment.
Bref, si quelqu'un peut éclairer ma lanterne,
merci par avance.
Patrice
PS : pour utiliser la calculatrice, il suffit
d'entrer les heures, les minutes et le résultat de
l'addition s'affiche.Pour soustraire, il faut
mettre - devant l'heure seulement.
La remise du compteur à 0 se fait en tapant 0 pour
les heures et pour les minutes.q sert à quitter.


* J'espère que ça ira.

Patrice
Le #46895
Benoit HURON a écrit:
J'ai quelques remarques que j'insère dans votre code (précédées de *).

[GROSSE AIDE]


* J'espère que ça ira.



Salut !
Merci pour votre aide (à Roger That aussi).
Je m'en vais tenter d'améliorer ça ! :-)
Juste une remarque : quand je rentre -0,
si je lui demande de vérifier heures < 0,
ça ne fonctionne pas car il ne connait que
0 et pas un zéro positif ou négatif...
Bref, mes noeuds au cerveau ne sont pas
complètement démèlés, mais ça va "viendre" !
A + ...
Patrice

Publicité
Poster une réponse
Anonyme