Bonjour,
J'ai un problème mon i n'affiche pas le bon nombre d'essais. De plus j'aimerai que si je rentre q alors le programme s'arrête et m'affiche le nombre mystère.
from random import *
i = 1
a = randint(1,100)
x = int(input("Essayer de trouver le nombre mystère (entre 1 et 100) :"))
while x != a:
i += 1
while x > a:
print("Le nombre mystère est plus petit.")
x = int(input("Essayer de trouver le nombre mystère (entre 1 et 100) :"))
while x < a:
print("Le nombre mystère est plus grand.")
x = int(input("Essayer de trouver le nombre mystère (entre 1 et 100) :"))
if x == a:
print("Vous avez trouver le nombre mystère qui est de",a,"au bout de",i,"essais.")
Je pense qu'au début i doit etre égal à 1 et vu que tu a mi int(input()) alors tu ne peux rentrer que des nombres.
Tu dois faire tes prints dans un if/else, et l'input tu le laisses dans le wile x != a
Je vois plusieurs erreurs dans ton code :
Déjà les 2 boucles while à l'intérieur de ta boucle principale non aucun sens, et c'est sûrement la raison pour laquelle ton compteur n'affiche pas le bon nombre d'essais
Il faut que tu remplaces tes boucles while par un couple de conditions if x > a:[...]; elif x < a: [...]
Il faut plutôt initialiser ton compteur i à 0, sinon il est probable que tu renvoies ton nombre réel d'essais + 1
Pour ce qui est de l'entrée de q pour quitter, je propose à insérer dans ta boucle principale :x = input("Essayer de trouver le nombre mystère (entre 1 et 100) :")
if x == 'q':
| break
else:
| if int(x) > a:
| [ton code]
| elif int(x) < a:
| [Ton code]
x n'est pas un int ?
Non, la fonction input renvoie une chaîne de caractères
Certes avec le code :x = int(input("Essayer de trouver le nombre mystère (entre 1 et 100) :"))
Tu transformes directement cette chaîne de caractères en entier grâce à la fonction int(), mais si tu essayes alors de taper q puis d'envoyer, ton programme à de fortes chances de renvoyer une erreur (du style NaN si je me souviens bien). Fais le test tu verras
Avec mon code, tu récupères d'abord x sous sa forme de chaîne de caractères, puis tu testes si c'est le caractère de sortie.
Si ce n'est pas le cas, alors on admets que c'est un entier entre 1 et 100 et on peut utiliser sans risques la fonction int()
Ok je vais tester ça. ![]()
Pourquoi mettre un else suivit de 2 if ?
Pourquoi 'q' et pas "q" ?
Mon programme marchait mais quand j'ai réessayé ca marchait plus pourtant je pense pas avoir touché.
Il m'affiche le message de victoire que si je réussit du premier coup.
Et l'option debugage reste en fonctionnement.
from random import *
i = 1
a = randint(1,100)
x = int(input("Essayer de trouver le nombre mystère (entre 1 et 100) :"))
while x != a:
i += 1
if x == "q":
print("Merci d'avoir joué, le nombre mystère était de",a)
break
elif int(x) > a:
print("Le nombre mystère est plus petit.")
x = input("Essayer de trouver le nombre mystère (entre 1 et 100) :")
elif int(x) < a:
print("Le nombre mystère est plus grand.")
x = input("Essayer de trouver le nombre mystère (entre 1 et 100) :")
if int(x) == a:
print("Vous avez trouver le nombre mystère qui est de",a,"au bout de",i,"essais.")
Déjà ce n'est pas le code que je t'ai proposé que tu as fait là ![]()
Car tu as laissé la fonction int() au niveau du nombre mystère, donc ton x == "q" ne risque pas de marcher ![]()
J'y est réfléchi un peu et j'ai créé un script qui marche, le voici :
http://pastebin.com/PwVXmfKJ
J'suis désolé mais j'arrive pas à me servir des balises de code autrement qu'en monoligne
Normalement c'est pas trop mal commenté, et ça fait ce que tu veux.
J'ai juste inversé les valeurs des variables a et x, parce que pour moi x c'est plutôt l'inconnue
Après c'est un programme qui est loin d'être parfait, parce que par exemple il ne vérifie pas que c'est bien un entier qu'on passe à la fonction int(). On ne teste que l'éventualité où c'est le caractère de sortie.
Si tu as des questions sur le code, n'hésite pas surtout ![]()
i = 1 car si i = 0 si on trouve du premier coup ca dira qu'on a réussit au bout de 0 essais.
Merci mais tu n'as pas répondu a mes questions ![]()
Le 22 novembre 2015 à 13:41:17 Lolopy a écrit :
i = 1 car si i = 0 si on trouve du premier coup ca dira qu'on a réussit au bout de 0 essais.
Ah, sinon tu peux aussi essayer de remonter l'itération du i avant de demander une valeur à l'utilisateur ![]()
Mais j'avoue que j'ai jamais su être précis sur ces histoire de compteurs ![]()
Pourquoi mettre un else suivit de 2 if ?
Tu parles de quelle section de code ? ![]()
Pourquoi 'q' et pas "q" ?
En Python cela importe peu, les 2 font référence à une chaîne de caractères.
Mais d'autres langages font la distinction entre les 2 écritures.
if a == 'q': #On vérifie si c'est le caractère de sortie
abandon = True
else: #Sinon c'est un entier, on peut appliquer int()
if int(a) < x:
print("C'est plus grand !")
elif int(a) > x:
print("C'est plus petit !")
else:
victoire = Truej'ai jamais vu qu'on pouvait écrire dans un else.
Ton compteur i a l'air de marcher et ton programme aussi.
![]()
On est pas limités à une seule opération derrière un bloc de condition, et heureusement d'ailleurs ![]()
La seule condition à respecter c'est l'indentation progressive de ton code, mais c'est parfaitement possible de faire des suites de conditions imbriquées et des boucles dans des boucles par exemple
Après je trouve personnellement que trop de blocs de conditions imbriqués peuvent rendre le code très moche, mais bon c'est un avis personnel. (Et souvent il y a moyen de condenser ça dans un seul bloc condition)
EDIT : Mon code marche si l'utilisateur joue le jeu ![]()
Pour produire un code réellement fonctionnel, il faudrait tester si le chaîne fournie par l'utilisateur est soit le caractère de sortie, soit un entier (et le cas contraire, redemander une valeur jusqu'à qu'elle soit correcte) et à la rigueur vérifier que l'entier est bien compris entre 1 et 100 (mais ça c'est moins grave car pas de risque de faire planter le programme)
Le 22 novembre 2015 à 14:01:18 Athuro83 a écrit :
On est pas limités à une seule opération derrière un bloc de condition, et heureusement d'ailleurs
La seule condition à respecter c'est l'indentation progressive de ton code, mais c'est parfaitement possible de faire des suites de conditions imbriquées et des boucles dans des boucles par exempleAprès je trouve personnellement que trop de blocs de conditions imbriqués peuvent rendre le code très moche, mais bon c'est un avis personnel. (Et souvent il y a moyen de condenser ça dans un seul bloc condition)
Ok cimer chef.
from turtle import *
n = int(input("Longueur du côté (en pixel) :"))
print("Choisissez votre couleur sous forme R,V,B (1 ou 0).")
r = int(input("R = (1 ou 0) :"))
v = int(input("V = (1 ou 0) :"))
b = int(input("B = (1 ou 0) :"))
up()
goto(50,50)
down()
begin_fill()
color(r,v,b)
for i in range(4) :
forward(n)
left(90)
for i in range(2) :
forward(n)
right(-45)
forward(n)
left(135)
forward(n)
right(45)
forward(n)
right(135)
for i in range(2) :
forward(n)
right(45)
end_fill()
ht()
mainloop()Est ce que c'est bien expliquer l'entrée de la couleur ?
Ben tu donnes les 2 valeurs possibles à entrer par l'utilisateur, donc à moins qu'il soit un peu léger mentalement je vois pas de problème ![]()
Le 22 novembre 2015 à 14:16:21 Athuro83 a écrit :
Ben tu donnes les 2 valeurs possibles à entrer par l'utilisateur, donc à moins qu'il soit un peu léger mentalement je vois pas de problème
import turtle
from random import choice, randint
from operator import add, sub, mul
a = randint(1,10)
b = randint(1,10)
c = (add, sub, mul)
d = choice(c)
z = d(a, b)
if d == add:
print("a =",a,"b =",b)
x = int(input("Quel est le résultat de l'addition entre a et b ?"))
elif d == sub:
print("a =",a,"b =",b)
x = int(input("Quel est le résultat de la soustration entre a et b ?"))
elif d == mul:
print("a =",a,"b =",b)
x = int(input("Quel est le résultat de la multiplication entre a et b ?"))
if x == z :
print("C'est trouvé.")
smiles = turtle.Turtle()
smiles.penup()
smiles.goto(-75,150)
smiles.pendown()
smiles.circle(10)
smiles.penup()
smiles.goto(75,150)
smiles.pendown()
smiles.circle(10)
smiles.penup()
smiles.goto(0,0)
smiles.pendown()
smiles.circle(100,90)
smiles.penup()
smiles.setheading(180)
smiles.goto(0,0)
smiles.pendown()
smiles.circle(-100,90)
if x != z :
print("C'est raté.")
smiles = turtle.Turtle()
smiles.penup()
smiles.goto(-75,150)
smiles.pendown()
smiles.circle(10)
smiles.penup()
smiles.goto(75,150)
smiles.pendown()
smiles.circle(10)
smiles.penup()
smiles.goto(0,0)
smiles.pendown()
smiles.circle(-100,90)
smiles.penup()
smiles.setheading(180)
smiles.goto(0,0)
smiles.pendown()
smiles.circle(100,90)
turtle.mainloop()Est ce que c'est bien expliquer ?
C'est le dernier!
Désolé le module turtle je connais pas ![]()
Il te faut quelqu'un d'autre sur ce coup là ![]()
Le 22 novembre 2015 à 15:22:46 Athuro83 a écrit :
Désolé le module turtle je connais pas
Il te faut quelqu'un d'autre sur ce coup là
Juste cette partie :
if d == add:
print("a =",a,"b =",b)
x = int(input("Quel est le résultat de l'addition entre a et b ?"))
elif d == sub:
print("a =",a,"b =",b)
x = int(input("Quel est le résultat de la soustration entre a et b ?"))
elif d == mul:
print("a =",a,"b =",b)
x = int(input("Quel est le résultat de la multiplication entre a et b ?"))