Bonsoir,
Voici un petit programme que je viens de coder:
from random import randrange
retry = 1
print("Le super jeu du nombre mystere")
while retry == 1 :
nombre_myst = randrange(100)
print("Combien?")
choix = input()
choix = int(choix)
while choix != nombre_myst :
if choix > nombre_myst:
print("c'est moins ! Reessayez")
choix = input()
choix = int(choix)
else :
print("C'est plus ! Reessayez")
choix = input ()
choix = int(choix)
print("Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?")
print("On rejoue ? 1/0")
retry = input()
retry = int(retry)
Je voudrai savoir comment vous l'auriez optimiser.
Enfin, comment auriez vous tester si la valeur entrée est bien un entier ? Je n'ai pas bien saisi les exceptions et je cherche des exemples.
from random import randrange
while raw_input('"Y" pour (re)jouer: ').lower() == 'y':
nombre_myst = randrange(100)
r = 1
while r:
try:
r = cmp(int(raw_input('entrez un nombre 1-100: ')),nombre_myst)
print ("Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?",
"c'est moins ! Reessayez",
"C'est plus ! Reessayez")[r]
except: print "entrez un nombre entier!"
print "ciao"
edit: ai remplacé
while raw_input('"Y" pour (re)jouer: ') in 'yY':
par
while raw_input('"Y" pour (re)jouer: ').lower() == 'y':
voila ton code un peu optimiser avec les controles d'érreurs (exception):
from random import randrange
retry = True
print("Le super jeu du nombre mystere")
while retry:
nombre_myst = randrange(100)
choix=int()
while choix != nombre_myst :
print("Combien?")
choix = input()
try:
choix = int(choix)
except:
print("veuiller entrer un nombre entier!")
continue
if choix > nombre_myst:
print("c'est moins ! Reessayez")
continue
else :
print("C'est plus ! Reessayez")
continue
print("Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?")
print("On rejoue ? O/N")
retry = input()
if retry.lower()=="n" or retry.lower()=="non":
retry=False
Je plussois la remarque de Maxibolt, et je parle en connaissance de cause (j'ai payé ce genre de négligence extrêmement cher en terme de debuggage). Dans un cas aussi simple, cela peut paraitre superflu, mais c'est vraiment une bonne habitude à prendre.
C'est possible c'est vrai, je vais essayer. Mais "casser" une boucle pour terminer un programme je ne trouve pas ca elegant.
C'est tout le contraire
Pour ton code non testé, c'est normal qu'il faille sortir de la boucle pour proposer de continuer la partie? Parce-que je ne vois rien pour quitter cette boucle justement, ça me semble être une boucle infinie.
Il faudra donc revoir le placement de ce morceau de code
Surtout pas, il y en a 2 qui n'ont rien à faire là, (j'avais oublié de te le signaler) étant donné que tu es dans une boucle infinie, si ton nombre n'est pas correcte, tu reviens au départ de la boucle, donc on réfléchi
Citation
Maintenant, je veux vérifier que "choix" est bien:
-un entier
- dans l'intervalle [0;100]
whilenotvalueinrange(1,100):# tant que value n'est pas dans l'intervalle [0:100]
C'est mieux que de jouer avec les exceptions ici...
Euh, ouais, non en fait. Déjà, on prend une chaîne de caractères en entrée, donc en l'état ça marche pas. Si on commence par la convertir en entier avant de tester l'appartenance, on retombe sur le même problème : qui dit que l'utilisateur a rentré un format correct ? Si on convertir la liste en liste de chaînes de caractères pour tester cette appartenance, il faudra tout de même convertir le nombre en question en entier après dans la boucle. On n'y gagne pas grand chose.
Et surtout, ça oblige à construire explicitement la liste entière en mémoire. Pour des grandes valeurs, ça va poser des problèmes.
Donc dans tous les cas il faudra effectivement surveiller l'exception ValueError lors des conversions de l'entrée en entier et par la même occasion, s'assurer que le nombre est bien compris entre 0 et 100.
On pourrait alors faire un truc de ce genre :
# ...
nb = 0
while nb != nb_x:
try:
nb = int(input("Quel est le nombre mystère ? : "))
if nb < 1 or nb > 99:
raise ValueError
except ValueError:
print("entrez un nombre entier compris entre 0 et 100 !".upper())
continue
# ...
Arkon, si tu ne sais pas ce que signifi raise disont simplement qu'il sert à déclancher une exception. Ici il déclanche une ValueError tout comme le ferai int(x) si x était une chaine de caractères ne contenant pas (uniquement) un nombre entier.
j'ai ajouté une ligne à mon 1er code pour vérifier l'interval [1-100]
mais j'ai l'impression qu'on est pas tous daccord sur l'interval ...
est-ce que c'est [0-99] ou [1-100] ?
from random import randrange
while raw_input('"Y" pour (re)jouer: ').lower() == 'y':
r = nombre_myst = randrange(1,101)
while r:
try:
c = int(raw_input('entrez un nombre [1-100]: '))-1
r = cmp(c/(not c/100),nombre_myst)
print (
"Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?",
"c'est moins ! Reessayez",
"C'est plus ! Reessayez"
)[r]
except: print "attention! il faut entrer un nombre entier dans l'interval [1-100]"
print "ciao"
cmp() n'existe plus avec Python 3. Pour ce qui est de l'interval, vue que le nombre mystère est généré avec randrange(100), il s'agira donc d'un nombre de 0 à 99 inclus. Personnellement, j'ai exclus 0 dans mon exemple mais c'est pas dur de modifier ça.
Pour ce qui est des conditions de fonctionnement du code, je ferais ceci
while True :
try :
choix = int(input("Entre un nombre entre 1 et 100 :"))
if choix not in range(1, 101) :
print("attention! il faut entrer un nombre entier dans l'interval [1-100]")
continue
break
except ValueError :
continue
from random import randrange
retry = True
print("Le super jeu du nombre mystere")
while retry:
nombre_myst = randrange(100)
choix=int()
while choix != nombre_myst :
print("Combien?")
try:
choix = int(input())
except:
print("veuiller entrer un nombre entier!")
continue
if choix<0 or choix>100:
print("entrez un nombre dans l'interval de 0-100")
continue
if choix > nombre_myst:
print("c'est moins ! Reessayez")
continue
elif choix<nombre_myst :
print("C'est plus ! Reessayez")
continue
print("Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?")
print("On rejoue ? O/N")
retry = input()
if retry.lower()=="n" or retry.lower()=="non":
retry=False
print("fin de la partie.")
Citation : Maxibolt
except sans préciser quelle exception on veut rattraper, c'est mal.
Ce n'est de toutes façons pas une bonne pratique d'utiliser except sans préciser l'exception que l'on veut attraper, même si visiblement ici il ne peut y avoir qu'une ValueError il faut prendre les bonnes habitudes dès le début !
En plus, par la suite tu pourrais avoir envie d'amméliorer ton script et donc devoir gérer d'autres exceptions...
from random import randrange
while raw_input('"Y" pour (re)jouer: ').lower() == 'y':
nombre_myst = randrange(1,101)
c = 0
while c!=nombre_myst:
try:
c = int(raw_input('entrez un nombre [1-100]: '))
print "c'est moins ! Reessayez" if nombre_myst<c<101 else\
"c'est plus ! Reessayez" if 0<c<nombre_myst else\
"Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?"
except: print "ce n'est pas une valeur valide!"
print "ciao"
from random import randrange # J'ai une préférence perso pour randint mais bon
retry = True
print("Le super jeu du nombre mystere")
while retry:
nombre_myst = randrange(100)
choix = int()
while choix != nombre_myst :
print("Combien ?")
try:
choix = int(input())
except:
print("veuiller entrer un nombre entier!")
continue
if choix < 0 or choix > 100:
print("entrez un nombre dans l'interval de 0-100")
continue
if choix > nombre_myst:
print("c'est moins ! Reessayez")
continue
elif choix<nombre_myst :
print("C'est plus ! Reessayez")
continue
print("Bravo vous avez trouver le nombre mysterieux, vous devez vous sentir baleze non?")
print("On rejoue ? O/N")
retry = input()
if retry.lower() in ("n", "non"): #Plus rapide.
retry=False
print("fin de la partie.")
Citation : Maxibolt
except sans préciser quelle exception on veut rattraper, c'est mal.
Si, c'est toujours nécessaire de préciser l'exception. Pas forcément parce qu'on peut en rajouter après (on pourra alors rajouter le nom de l'exception à ce moment là), mais surtout parce qu'en ne mettant rien, on rattrape toutes les erreurs pouvant se produire. On croit souvent qu'il n'y en a qu'une, mais en réalité on peut ainsi continuer l'exécution du code en traitant des erreurs non prévues et en les masquant, et ça devient très difficile à débugger ensuite.
Par exemple, KeyboardInterrupt, c'est une exception.
Plus ou moins
× 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.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.