Bonjour, j'ai un petit probleme avec mon code que je viens de faire et je ne vois pas où est mon erreur ? Pouvez-vous m'aider ?
import os
from math import ceil
from random import randrange
continuer = True
difficulty = input("Choisissez une difficulté entre 1 (facile) et 5 (très difficile) :")
if difficulty = 1:
count = 15
alea = randrange(50)
print ("votre nombre maximum est de 50")
if difficulty = 2:
count = 10
alea = randrange(75)
print ("Votre nombre maximum est de 75")
if difficulty = 3:
count = 7
alea = randrange(85)
print ("Votre nombre maximum est de 85")
if difficulty = 4:
count = 5
alea = randrange(90)
print ("votre nombre maximum est de 90")
if difficulty = 5:
count = 3
alea = randrange(105)
print ("Votre nombre maximum est de 105")
while continuer:
nb = input("Choisissez un nombre entre 0 et le maximum: ")
nb = int(nb)
if count == 0:
print("Vous avez perdu :(")
break
if nb == alea:
print("Vous avez trouvé le bon nombre, Félicitation !")
continuer = False
if nb > alea:
print("Votre nombre est trop grand !")
count = count - 1
print ("il vous reste ", count, "nombre de cout")
continue
if nb < alea:
print("Votre nombre est trop petit !")
count = count - 1
print ("il vous reste ", count, "nombre de cout")
continue
os.system("Pause")
Ligne 7, 11, 15, 19, 23: == et non =. Et input renvoie une chaîne de caractères, donc la comparaison (aux lignes précédemment citées) ne sera jamais validée. Il faut convertir l'entrée utilisateur en entier (comme tu l'as fait en ligne 29)
ArthurDelagroux1 a écrit:
j'ai un petit probleme
Soit plus explicite la prochaine fois. Donne l'erreur que te renvoie python et la ligne où ça se produit.
Sinon ton bloc de conditions (lignes 7 à 26) peut avantageusement être remplacé par un conteneur:
from random import randrange
#Soit en utilisant une liste
niveaux = [(15, 50), (10, 75), (7, 85), (5, 90), (3, 105)]
choix_niveau = int(input("Choix du niveau (1 à 5): "))
#Génère une erreur si l'utilisateur n'entre pas un nombre compris entre 1 et 5
counter, max_nb = niveaux[choix_niveau - 1]
nb_random = randrange(max_nb)
print("Votre nombre maximum est de {}".format(max_nb))
#Soit en utilisant un dictionnaire
niveaux = {"1": (15, 50), "2": (10, 75), "3": (7, 85), "4": (5, 90), "5": (3, 105)}
choix_niveau = input("Choix du niveau (1 à 5): ") #Conversion plus nécessaire
#Si l'utilisateur n'entre pas un nombre compris entre 1 et 5, une valeur par
#défaut est donnée (et donc évite de faire planter le programme)
counter, max_nb = niveaux.get(choix_niveau, (15, 50))
nb_random = randrange(max_nb)
print("Votre nombre maximum est de {}".format(max_nb))
print(counter, nb_random)
Merci Olygrim, j'essaye maintenant de faire en sorte que lorsque je rentre rien au niveau de l'étape du choix du nombre, ça me renvoie au choix du nombre, car la actuellement quand je fait juste entrer sans rien écrire ça ferme le programme. J'ai déja essayer :
if nb == "\n":
continue
et :
if nb == "":
continue
mais cela ne marche pas, ça ferme quand meme le programme et je ne vois pas pourquoi, je n'ai pas d'erreur qui s'affiche
Si, tu as forcément une erreur mais pour la voir il ne faut pas double-cliquer sur le fichier mais l'exécuter à partir de ton invite de commande (cmd sur windows, Terminal sur mac). Il est fondamental d'avoir accès aux erreurs sinon tu ne pourra pas progresser.
Ici, ton erreur se situe en ligne 29. Si l'utilisateur n'entre rien (ou autre chose qu'un nombre entier) et bien la conversion va planter (car python ne peux pas convertir n'importe quoi en nombre):
#Renvoie une ValueError
int("")
int("hello")
int("3.4")
#Fonctionne
int("4")
int("-2")
Donc il faut soit utiliser un bloc try/except:
while continuer:
nb = input("Choisissez un nombre entre 0 et le maximum: ")
try:
nb = int(nb)
except ValueError:
print("Vous devez entrer un nombre entier")
continue
Soit utiliser les méthodes des chaînes de caractères:
while continuer:
nb = input("Choisissez un nombre entre 0 et le maximum: ")
if nb.isdigit():
nb = int(nb)
else:
print("Vous devez entrer un nombre entier")
continue
Pour avoir la liste des méthodes d'un objet, c'est la fonction dir. Et pour avoir un descriptif détaillé, c'est la fonction help:
dir(str) #Liste les attributs des chaînes
help(str.upper) #Explique ce que fait la méthode 'upper'
help(str.isdigit) #Explique ce que fait la méthode 'isdigit'
from random import randrange
from datetime import datetime
import os
import time
now = datetime.now()
clear = lambda: os.system('cls')
clear()
print(" ")
print ('%s/%s/%s %s:%s:%s' % (now.month, now.day,now.year,now.hour, now.minute, now.second))
print(" ")
print(""">>> RULES :
A Number depending on the difficultie you choose is generated
your objective is to guess it in the minimum
number of attempts.
**note: you can use "cls" to clear the screen**
========> hope you enjoy :)\n\n""")
############################### Defenitions ##########################################
def scl():
if str(userI) == "cls":
clear()
print(">>>>> Screen Cleared <<<<<")
def first_guess():
global userI
userI=input("\nMake your First Guess ======> ")
try: int(userI)
except :
print("!!!!!!!! Input a Valid Number !!!!!!!!!!!!")
scl()
first_guess()
return userI
def less(userI):
if int(userI)<rand:
print("\n>>>>>>>>>>>{ Go MORE }>>>>>>>>>>>>>>")
if int(userI)>rand:
print("\n<<<<<<<<<<<{ Go LESS }<<<<<<<<<<<<<")
def guess():
global userI
userI=input("\nTry to Guess ======> ")
try: int(userI)
except :
print("!!!!!!!! Input a Valid Number !!!!!!!!!!!!")
scl()
guess()
def win():
if int(userI)==rand:
print("\n>>>> You Won <<<<\n"+ "\n You needed <<<<<<{ "+ str(i)+" }>>>>>> tries to make it ." )
#####################################################################################
input("==========={ Press any Key To Start }=============")
clear()
####################################
diff = 0
while str(diff) not in ("1","2","3"):
diff = input(
""" >>>> Choose Difficultie: 1) 1 ==> 100
2) 1 ==> 500
3) 1 ==> 1000\n""")
if diff not in ("1","2","3"):
print("choose difficultie from 1 ==> 3\n")
else:
diff = int(diff)
print("\n you chose: " +" difficulie "+str(diff))
if int(diff) == 1:
num_range = 100
elif int(diff) == 2:
num_range = 500
elif int(diff) ==3:
num_range = 1000
##################################
rand = int(randrange(0,num_range))
i=0
userI=0
print("\n ====={ a number from 0 ==> "+ str(num_range)+" is generated }=====")
print (str(rand))
first_guess()
CompI= userI
less(CompI)
win()
def game():
global userI
global rand
global i
while int(userI) != rand:
print ("\n================={ Try N° "+str(int(i)+1)+" }=================")
guess()
CompI= userI
less(CompI)
i+=1
win()
reponse = input("Do you want to restart ? ")
if str(reponse) in ("yes","y","oui","o"):
clear()
###########################################
diff = 0
while str(diff) not in ("1","2","3"):
diff = input(
""" >>>> Choose Difficultie: 1) 1 ==> 100
2) 1 ==> 500
3) 1 ==> 1000\n""")
if diff not in ("1","2","3"):
print("choose difficultie from 1 ==> 3\n")
else:
diff = int(diff)
print("\n you chose: " +" difficulie "+str(diff))
if int(diff) == 1:
num_range = 100
elif int(diff) == 2:
num_range = 500
elif int(diff) ==3:
num_range = 1000
##############################################
rand = int(randrange(0,num_range))
print("\n ====={ a number from 0 ==> "+ str(num_range)+" is generated }=====")
print (str(rand))
i=1
userI=0
first_guess()
CompI= userI
less(CompI)
win()
game()
game()
input("""Press any Key To Exit.
>>>>> By {{ Med16}} <<<<<""")
exit()
i m still a beginner so please tell me if there are any errors or ways to improve this script
- Edité par MedAzizLahdheri 13 novembre 2017 à 13:46:23
Bonjour tout le monde. Je dois faire dans le cadre d'un cours un programme en Python qui ressemble beaucoup à cet exemple. Soit de trouver un nombre généré aléatoirement entre une certaine étendue. Ce qui me pose problème, c'est que au départ je dois préciser dans le constructeur de ma classe qu'elle sera l'étendue entre les deux nombres et par la suite généré un nombre aléatoire dans ce même étendu.
Voici où j'en suis présentement. Pour les besoins de la cause je fait un print en précisant entre quel et quel nombre le joueur doit essayer de deviner.
Ah ah ah. Créer plutôt un sujet au lieu d'en déterrer un comme ça. Un vrai sujet à toi, avec une question, un problème, et du code inséré via la fonctionnalité </>.
typage structurel ftw