Si oui, il est évident que cela ne fonctionne que sous Linux
Évident ? pas si sûr. Heureusement qu'on peut faire du Python ailleurs que sous Linux (je dirai que c'est le cas de 80% de mes étudiants chez eux même si on les fait travailler sous Linux en TP).
clear deux fois dans ton code, est-ce nécessaire ?
Ah ok, non ce n'est pas nécessaire surtout que ce n'est pas ce que demande le PO si tu as suivi les posts précédents.
------------------------------------------
Pour le reste je dis évident car je pense que le PO a quand même fait un minimum de recherche et qu'il ne sort pas clear comme ça par hasard. Il peut se tromper, mais dans le cas où cela ne fonctionne toujours pas, je pense que je lui aurais demandé sur quel système il code.
Pour le reste je dis évident car je pense que le PO a quand même fait un minimum de recherche
Pour faire un minimum de recherche (efficace s'entend), souvent il faut déjà être un minimum au parfum. Vu le peu que le "PO" (qui d'ailleurs n'est plus le PO depuis bien longtemps) a écrit, difficile de se prononcer sur l'intensité des recherches qu'il a pu/voulu mener.
Citation : fred1599
qu'il ne sort pas clear comme ça par hasard. Il peut se tromper, mais dans le cas où cela ne fonctionne toujours pas, je pense que je lui aurais demandé sur quel système il code.
clear est juste une traduction immédiate d'"effacer" et le mot existe tel quel sur plusieurs OS donc je vois pas ce qui permet de dire que le "PO" serait sous Linux ou sous autre chose. D'autre part, le post s'adresse à un public bien plus large que le simple "PO" et la question posée par celui-ci ("effacer le contenu de la console pour faire plus propre") est tout à fait naturelle quel que soit l'IDE et l'OS (je me suis moi-même posée la question dans mon apprentissage). Et pour rester sous Linux, je viens de tester ton code sous IDLE et ça ne marche pas (et c'est de ce doute que venait mon interrogation sur l'universalité de ton code).
Voila mon nouveau code.
J'ai trouvé pour l'effacement de l'écran.
Et j'ai rajouté le fait que le programme affiche un message d'erreur quand l'utilisateur ne rentre pas un nombre entre 1 et 100.
import os
from random import randint
nombre_a_trouver = randint(1 , 100)
#Début Jeu
while True :
print ("Donner un nombre entre 1 et 100 :")
nombre_joueur = int(input())
if nombre_joueur < 1 or nombre_joueur >100:
print ("Il faut donner un nombre entre 1 et 100 :")
nombre_joueur = int(input())
if nombre_joueur == nombre_a_trouver:
print ("Vous avez gagner !")
break
else:
if nombre_a_trouver > nombre_joueur :
print ("Plus")
else :
print ("Moins")
#Rejouer
print ("Veux tu rejouer")
print ("1 : Oui")
print ("2 : Non")
decision = int(input())
if decision == 1 :
os.system('cls')
nombre_a_trouver = randint(1 , 100)
while True :
print ("Donner un nombre entre 1 et 100 :")
nombre_joueur = int(input())
if nombre_joueur < 1 or nombre_joueur >100:
print ("Il faut donner un nombre entre 1 et 100 :")
nombre_joueur = int(input())
if nombre_joueur == nombre_a_trouver:
print ("Vous avez gagner !")
break
else:
if nombre_a_trouver > nombre_joueur :
print ("Plus")
else :
print ("Moins")
if decision == 2 :
quit
EDIT : J'ai changé mon print qui était mal indenté (je sais pas si ça se dit mais bon) .
Un petit essais vite fait avec l'enregistrement des scores
#-coding:Latin-1-*
# Jeu du plus ou moins
from random import randrange
from pickle import Pickler, Unpickler
import os
print(""" ************************
* Jeu du PLUS ou MOINS *
************************\n""") # Titre du jeu
continuer=True
while continuer==True:
nb_aleatoire=randrange(1,101) # L'ordinateur choisit un nombre aléatoire entre 1 et 100
resultat_joueur=0
essais=0
if os.path.isfile("C:/Users/Florentin/Documents/Python/Plus ou moins/score")\
is True:
with open("score", "rb") as sauvegarde:
depickler=Unpickler(sauvegarde)
m_score=depickler.load()
print("Votre meilleur score est de {0} essais !".format(m_score))
def test_nb():
"""Vérifie si le résultat entré par l'utilisateur
est bien un nombre et convertit le résultat
en entier (int)"""
global resultat_joueur
try:
resultat_joueur=int(resultat_joueur)
except ValueError:
print("Il faut écrire un nombre !")
resultat_joueur=input("Quel est le nombre ?\n")
resultat_joueur=input("Quel est le nombre ?\n")
essais+=1
test_nb()
while resultat_joueur<nb_aleatoire:
essais+=1
print("C'est trop petit !")
resultat_joueur=input("Quel est le nombre ?\n")
test_nb()
while resultat_joueur>nb_aleatoire:
essais+=1
print("C'est trop grand !")
resultat_joueur=input("Quel est le nombre ?\n")
test_nb()
else:
with open("score", "wb") as sauvegarde:
pickler=Pickler(sauvegarde)
pickler.dump(essais)
print("""Félicitations, vous avez gagné !!!
Vous avez trouvé le nombre en {0} essais !""".format(essais))
continuer=False
restart=input("Voulez vous continuez ? (O/N) : ")
if restart.lower()=="o":
continuer=True
else:
input("Appuyer sur une touche pour quitter")
Désolé pour le up mais je viens de me mettre à Python, et j'ai fait il y a peu la première partie du tuto. J'ai fait le TP du ZCasino et mon code marchait presque, seul petit problème que je n'ai pas réussi à régler : à un certain moment le programme se faire tout seul avant la fin.
Bref, j'ai donc décidé de faire des exercices avant de passer à la suite et j'ai fait celui du plus ou moins : même problème, sauf qu'ici le programme se ferme tout de suite.
S'il vous plait, où est mon erreur ?
# -*-coding:Latin-1 -*
import os
from random import randrange
print("Bienvenu sur le jeu du plus ou moins.")
continuer_partie=True
while(continuer_partie):
nb=randrange(1,100)
print("Choisissez un nombre entre 0 et 100.")
nb_choisi=-1
while(nb!=nb_choisi):
nb_choisi=input()
nb_choisi=int(nb_choisi)
if nb>nb_choisi:
print("Plus grand !")
elif nb<nb_choisi:
print("Plus petit !")
elif nb==nb_choisi:
print("Bravo ! Voulez-vous continuer ? (o/n)")
continuer=input()
if continuer=="n" or continuer=="N":
continuer_partie=False
os.system("pause")
J'imagine que c'est une erreur classique de débutant mais je ne trouve pas.
OK, j'ai corrigé les erreurs (edit du précédent message). Je crois que je comprends mal les boucles : pour moi, la boucle n'était pas infinie puisque
while(nb!=nb_choisi):
signifiait que lorsque nb n'était plus différent de nb_choisi, on sortait de la boucle (si quelqu'un veut bien m'éclaircir sur ce point clairement...). J'avais aussi oublié de donner une valeur à nb_choisi pour entrer dans la boucle.
et je ne peux pas t'expliquer plus étant donné que tu as supprimé le précédent code.
Outre cela ton code ne respecte pas la PEP8
import os
from random import randrange
print("Bienvenu sur le jeu du plus ou moins.")
continuer_partie = True
while continuer_partie :
nb = randrange(1,100)
print("Choisissez un nombre entre 0 et 100.")
nb_choisi = -1
while nb != nb_choisi :
nb_choisi = int(input()) # je factorise
if nb > nb_choisi :
print("Plus grand !")
elif nb < nb_choisi :
print("Plus petit !")
else : # le dernier choix, il y en a pas d'autres possibles
print("Bravo ! Voulez-vous continuer ? (o/n)")
continuer = input()
if continuer == "n" or continuer == "N" :
continuer_partie = False
Je crois que mon problème est que j'ai du mal à mettre les choses dans le bon ordre. Avez-vous d'autres exercices pour mon niveau ? Les autres exos du topic sont déjà trop durs pour moi.
Pour la PEP8, le problème c'est seulement que j'indente avec la tabulation ?
Voilà mon code pour le plus ou moins! Simpliste, je vous l'accorde.
#!/usr/bin/python3
import time
import sys
from random import randrange
nombreentre=0
nombremyst = randrange(100)
while nombremyst != nombreentre:
nombreentre = input("Tapez un nombre entre 1 et 100: ")
try:
nombreentre = int(nombreentre)
if nombreentre<0 or nombreentre>100:
continue
except ValueError:
continue
if nombreentre < nombremyst:
print("C'est plus grand!")
elif nombreentre > nombremyst:
print("C'est plus petit!")
else:
print("Gagné.")
time.sleep(1)
sys.exit(0)
C'était pour s'assurer qu'il finisse bien avec un code d'erreur 0.
Ah oui Démontre moi que c'est le cas
python, c'est pas du C, sys.exit(arg) est utilisé lorsque tu veux quitter en plein milieu de ton code par exemple.
L'utiliser lorsque tu sais que ton programme est automatiquement terminé en fin de boucle, c'est inutile non?
Et d'ailleurs que fais-tu si tu crées une boucle infinie?
Voilà deux exemples parlant, permettant de comprendre l'intérêt de sys.exit()
import sys, time
while True:
try:
pass
time.sleep(0.01)
except KeyboardInterrupt:
sys.exit(0) # là on sort directement du programme lors d'un Ctrl+C
print("programme termine") # cette partie n'est pas prise en compte
import sys, time
while True:
try:
pass
time.sleep(0.01)
except KeyboardInterrupt:
break # là on quitte la boucle et on passe à l'étape suivante
print("programme termine") # cette partie sera prise en compte lors du breaking
Dans ton cas, tu comprends maintenant qu'il n'y a pas d'intérêt car après ta boucle il ne reste plus de code à exécuter.
def generer_nombre(diff = 0):
for i, j in enumerate([100, 1000, 10000]):
if i == diff:
return randint(0, j)
else:
print 'Erreur: difficulté inconnue'
return 100
def jouer(x):
def compar(n, x):
if n < x:
print 'C\'est plus !'
elif n > x:
print 'C\'est moins!'
else:
print 'Vous avez trouvé !'
return 1
return 0
for i in xrange(10):
n = lire_int('Quel est le nombre :')
if compar(n, x):
print 'Nb de coups : ', i
break
else:
print 'Perdu !'
print 'Le nombre était : ', x
Tu n'as pas une erreur d'indentation ligne 17?
Edit : J'ai rien testé, si il y a des erreurs désolé
Merci.
Pour lire_int, je voulais le faire mais je ne savais pas comment faire. Je vais me renseigner sur try: exept.
Je ne connaissais pas les triples quote, ça sert uniquement à mettre du texte sur plusieurs lignes ? niv=[100,1000,10000][diff+1] ah ! merci, c'est ce que je cherchais à faire ! Par contre je pense que c'est 'diff' et pas 'diff+1'.
Et, non ce n'est pas une erreur d'intendation. En fait, je fais un for pour 10 coups, dès que les 10 coups sont passés c'est qu'on a perdu. Le else va sur le for en fait et pas sur le if intérieur.
Merci pour tes remarques.
niv =[100, 1000, 10000][diff+1] ah ! merci, c'est ce que je cherchais à faire ! Par contre je pense que c'est 'diff' et pas 'diff+1'
En fait non c'est diff-1, car tes 3 soluces sont 1, 2 et 3.
L'index commençant à 0, il faut soustraire 1 pour être cohérent.
Citation
Et, non ce n'est pas une erreur d'intendation. En fait, je fais un for pour 10 coups, dès que les 10 coups sont passés c'est qu'on a perdu. Le else va sur le for en fait et pas sur le if intérieur
Non, c'est bon normalement, dans ma fonction 'difficulte' je soustrais 1 déjà pour avoir un indice entre 0 et 2.
Hmm, t'es sûr ? parce que j'emploie un 'break' dans le for, donc si je mets pas le else, même si l'utilisateur à gagné, ça lui mettra qu'il a perdu. :s
Le mien, je n'ai fait que la base pour le moment le reste ne doit pas être bien compliqué à ajouter :
# Jeu du plus ou moins
from random import randrange
print("Bienvenue sur le jeu du plus ou moins")
print("Le but du jeu est simple : ")
print("Vous devez deviner le nombre tiré par l'ordinateur compris entre 1 et 100.\n")
print("Attention vous n'avez que 10 chances !")
continuerPartie = "o"
nbEntrer = 0
coupsMax = 10
while continuerPartie == "o":
nbTirer = randrange(1,101)
compteurDeCoups = 0
print(nbTirer)
while nbTirer != nbEntrer and coupsMax != compteurDeCoups:
print("Entrer un nombre compris entre 1 et 100 : ")
try:
nbEntrer = int(input())
except:
print("Vous n'avez pas entrer un nombre désolé.")
print("Entrer un nombre compris entre 1 et 100 : ")
nbEntrer = int(input())
if nbTirer > nbEntrer:
print("C'est plus !")
else:
print("C'est moins ! ")
compteurDeCoups += 1
if nbTirer == nbEntrer:
print("Bravo vous avez trouvé le nombre mystère en ",compteurDeCoups, "fois ! ")
else:
print("L'ordinateur a été plus fort que vous, désolé ! ")
print("Le nombre à trouver était : ",nbTirer)
print("Voulez vous continuer de jouer ? (o/n)")
continuerPartie = input()
continuerPartie = str(continuerPartie)
Python c'est bon, mangez-en.
signifiait que lorsque nb n'était plus différent de nb_choisi, on sortait de la boucle (si quelqu'un veut bien m'éclaircir sur ce point clairement...). J'avais aussi oublié de donner une valeur à nb_choisi pour entrer dans la boucle.
Sandro CAZZANIGA
Sandro CAZZANIGA
Sandro CAZZANIGA