Bonjour, je m'entraîne sur les conditions et les fonctions et j'ai fais le petit jeu classique du plus ou moins:
def plus_ou_moins():
print("Entrez un nombre")
import random
resultat = random.randint(1,100)
nombre = input()
nombre = int(nombre)
while nombre != resultat:
if nombre < resultat:
print("non, c'est plus")
elif nombre > resultat :
print("non, c'est moins")
nombre = input()
nombre = int(nombre)
if nombre == resultat:
print("Félicitaion, tu as trouvé le nombre magique!")
plus_ou_moins()
Sauf que quand je n'entre pas de nombre, ça m'afficher bien sûr une erreur. Comment vérifier l'existence d'une variable et faire "si la variable est vide, alors faire ceci".
J'ai déjà fait des recherches mais rien trouvé de concret
Merci
Plutôt que de répondre directement, un petit indice.
Ouvre un shell python, tape "nombre = input()", ne rentre pas de nombre, et regarde la valeur de <nombre>.
Voilà, tu sais maintenant ce que vaut une variable "non initialisée", tu n'as plus qu'à rajouter le bon test dans un if.
En principe, tu devrais voir un autre problème survenir (là, on ne gère que le cas où l'on ne rentre rien du tout), mais chaque chose en son temps : il sera plus formateur de t'aiguiller pas à pas.
Tu peux regarder si ta variable est dans les variables locales, en mettant dans ta fonction if'variable'inlocals():#fais ce que tu veux, comme créer la variable
1 - A utiliser avec modération
2 - locals() te renvoie les variables locales, dans une fonction. Il existe aussi la fonction globals, qui te renvoie les variables globales.
Dans le cas présent, il ne s'agit pas vraiment de vérifier si une variable existe ou non, mais plutôt de vérifier le contenu de la variable.
De ce fait, NoHaR à la meilleur solution.
Même si c'est hors sujet, il est aussi bon de savoir que l'on peut vérifier la présence d'une variable (un identifiant) avec les fonctions globals() ou locals(), ou encore, en gérant une exception NameError. Toutes fois, l'une de ces deux méthodes est plus "pythonic" que l'autre...
Oui, ne confonds pas une variable qui contient None et une variable qui n'est pas définie. Vérifier qu'une variable existe, c'est dangereux et assez moche.
from random import randint
def plus_ou_moins(numberToFound=randint(1, 100)):
number = str(input('Entrez un nombre : '))
while not number.isdigit():
number = input('Entrez une valeur correcte (digitale) :')
number = int(number)
while number != numberToFound:
if number < numberToFound:
print('Non, c\'est plus!')
elif number > numberToFound:
print('Non, c\'est moins!')
number = input('Essayez encore : ')
print('Félicitations, tu as trouvé que le nombre mystère était le %i !' % numberToFound)
from random import randint
def test(n, nb_alea):
dico={-1:"trop petit", 0:"gagne", 1:"trop grand"}
return dico[cmp(n, nb_alea)]
nb_alea=randint(1, 100)
while 1:
try: res=test(int(raw_input("Entre ton nombre :")), nb_alea)
except: continue
print res
if res=="gagne": break
Le premier, c'est principalement à cause du input en fait.
Pour le tien, évite le style inline et cette manie d'utiliser des dictionnaires pour jouer le rôle d'une liste, et ce sera très bien. Et hum, while 1 devrait plutôt s'écrire while True.
from random import randint
def test(n, nb_alea):
dico={-1:"trop petit", 0:"gagne", 1:"trop grand"}
return dico[cmp(n, nb_alea)]
nb_alea=randint(1, 100)
win = false
while not win:
try: res=test(int(raw_input("Entre ton nombre :")), nb_alea)
except: continue
print res
if res=="gagne": win = true
Je trouve ça moins beurk que d'utiliser une boucle infinie déjà
non mais c'est quoi tout ces IF ? Vous ne connaissez pas cmp()
from random import randint
soluce = str(randint(1,100))
propose = ''
while propose != soluce:
propose = ''
while not propose.isdigit(): propose = raw_input('entrez un nombre entre 1 et 100:')
print ("bravo, tu as trouve","non, c'est plus petit","non, c'est plus grand")[cmp(int(propose),int(soluce))]
Je propose, pour ma part, sans boucle pour faire quelque chose d'original et d'amusant :
from random import randrange as rand
def plusmoins(nbr,msg=None):
if 1 == 2:
print('You lose the Game')
if msg:
print(msg)
try:
nbi = int(input("Entrez un nombre : "))
if nbi == nbr :
return "Gagné !"
except Exception:
return plusmoins(nbr,"Ce n'est pas un nombre.")
return plusmoins(nbr,"Plus grand.") if nbi < nbr else plusmoins(nbr,"Plus petit.")
print(plusmoins(rand(100)))
josmiley : oui, mais l'intérêt est de montrer ce que ça pourrait donner dans une implémentation dans un langage n'employant pas de boucle, tel que Haskell. Je sais que la récursion n'et pas le fort de python, mais c'est pour l'algo ici.
from random import randint
nb_alea=randint(1, 100)
while True:
try:
res=["trop petit", "gagne", "trop grand"][(cmp(int(raw_input("Entre un nombre :")), nb_alea))+1]
print res
except: continue
if res=="gagne": break
from random import randint
reponse = soluce = randint(1,100)
while reponse:
try:
reponse = cmp(int(raw_input('entrez un nombre entre 1 et 100:')),soluce)
print ("bravo, tu as trouve","non, c'est plus petit","non, c'est plus grand")[reponse]
except: continue
× 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.