import random
import time
def entree_verif(text,m):
while True:
try:
i = int(input("\n{}".format(text)))
if i not in range(1,m+1):
raise ValueError
return i
except:
print("\nEntrée invalide!")
def choix_niveau():
for niv,mini,maxi in ((1,1,10),(2,1,100),(3,1,1000)):
print("Niveau {}: Nombre entre {} et {}".format(niv,mini,maxi))
return entree_verif("Votre choix:",3)
def nb_joueurs():
return entree_verif("Nombre de joueurs entre 1 ou 2:",2)
def nb_mystere(nbj,m):
if nbj == 1:
return random.randint(1,m)
else:
return entree_verif("Nombre à trouver entre 1 et {}:".format(m),m)
def nb_recherche(nbm,m):
c = 0
while True:
i = entree_verif("Nombre entre 1 et {}:".format(m),m)
c += 1
if i < nbm:
print("\nC'est Plus!")
elif i > nbm:
print("\nC'est Moins!")
else:
print("\nBravo! Vous avez trouvé en {} coup(s).".format(c))
time.sleep(2)
break
run = "y"
while run == "y":
print("\nJeu du Plus ou Moins\n")
c = choix_niveau() # Niveaux
lmax = 10**c # Limite max selon le niveau
nbj = nb_joueurs() # Nb de joueurs
nbm = nb_mystere(nbj,lmax) # Nb mystère selon le nb de joueurs
nb_recherche(nbm,lmax) # Trouver le nb mystère
run = input("\nSouhaitez vous rejouer (y ou n):")
Bonjour, je vous présente mon travaille pour cette exercice on peut bien sur faire ceci en beaucoup moins de ligne qu'ici mais n'étant pas un pro de python, je fais comme je peut . J'attend avec hâte vos commentaires/conseils pour améliorer ce code. Ah et aussi je sais que le dernier message de ce post date un peux mais bon c'est un exercices donc je ne pense pas qu'il devrait avoir de problèmes :
#!/usr/bin/python3
# -*- coding: Latin-1 -*
#-- Jeu du Plus ou Moin codé pour l'exercice du
#-- site du zéro proposé par Gryfalo par RayonGama
from random import randrange
def rejouer(rejoue):
if rejoue == "oui":
main()
elif rejoue == "non":
print "Au revoir!"
def jeu(max):
nombreMystere = randrange(max)
gagner = 0
nombreCoup = 0
rejoue = ""
try:
print "Vous devez trouvez un nombre compris entre 0 et " + str(max) + " !"
while gagner == 0:
nombreJoueur = int(input("Votre nombre -> "))
if nombreJoueur == nombreMystere:
print "Vous avez gagné en "+ str(nombreCoup) + " coups ! Bien joué"
gagner = 1
while rejoue != "oui" or rejoue != "non":
rejoue = raw_input("Voulez-vous rejouez ? (Oui/Non)")
if rejoue == "oui" or rejoue == "non":
rejouer(rejoue)
else:
print "Vous n'avez pas rentré oui ou non "
elif nombreJoueur > nombreMystere:
print "Le nombre mystere est plus petit"
nombreCoup = nombreCoup + 1
elif nombreJoueur < nombreMystere:
print "Le nombre mystere est plus grand"
nombreCoup = nombreCoup + 1
elif nombreJoueur > max:
print "Vous devez trouvez un nombre compris entre 0 et " + max + " !"
except ValueError:
print "Vous n'avez pas rentré un chiffre"
def main():
print"""Bienvenue dans le jeu Plus Ou Moins :
Veuillez choisir un niveau de difficulté :
1 : Facile (Chiffre jusqu'a 50)
2 : Moyen (Chiffre jusqu'a 100)
3 : Difficile (Chiffre jusqu'a 500)
4 : Expert (Chiffre jusqu'a 2500)
5 : Diabolique (Chiffre jusqu'a 10000)"""
try :
choix = int(input("Votre choix --> "))
if choix == 1 :
max = 50
jeu(max)
elif choix == 2 :
max = 100
jeu(max)
elif choix == 3 :
max = 500
jeu(max)
elif choix == 4 :
max = 2500
jeu(max)
elif choix == 5 :
max = 10000
jeu(max)
else:
print "Veuille choisi un chiffre s.v.p !"
except:
print "Veuillez rentrer un chiffre !"
main()
P.S : Si vous trouvez que j'ai un façon "chelou" voir bizarre de coder c'est parce que ... j'ai un façon bizarre de coder
Effectivement fred1599 quand j'ai codé cette partie du code j'ai voulu, faire un switch, honte à moi je me suis rappeler qu'il n'y avait pas de swtich en python (Quoi ça faisait longtemps que j'avais pas fais de python bref donc j'ai modifié ce bout de code comme ceci :
try :
choix = int(input("Votre choix --> "))
if choix == 1 or choix == 2 or choix == 3 or choix == 4 or choix == 5:
if choix == 1 :
max = 50
elif choix == 2 :
max = 100
elif choix == 3 :
max = 500
elif choix == 4 :
max = 2500
elif choix == 5 :
max = 10000
jeu(max)
else:
print "Veuille choisi un chiffre s.v.p !"
except:
print "Veuillez rentrer un chiffre !"
Je pense que c'est comme ceci que tu vois une amélioration si non, pourrais tu être plus précis ?
Ne t'inquiète pas je connais a peux près tout les aspects de python (sauf les classes ou j'ai encore du mal) c'est juste que j'ai du mal à optimisée mais c'est vraie que ta correction est beaucoup mieux, je verrais ce que je peut améliorer demain
Utilisez un tuple (1,2) si vous ne comptez pas modifier cette « liste » plus tard. N'utilisez une list [1,2] que si elle devra à un moment être altérée (ajout, suppression, modification).
if i not in range(1,m+1):
raise ValueError
C'est tout à fait horrible. En faisant cela, tu créés une liste de <math>\(m+1\)</math> éléments en mémoire puis tu regardes si un élément est dedans ; tout cela est très coûteux alors qu'un simple ifnot1<=i<=m+1: suffit largement et ne coûte presque rien (en plus d'être mille fois plus compréhensible).
Bonjour, après l'aide de fred1559 j'obtient ceci :
#!/usr/bin/python3
# -*- coding: Latin-1 -*
#-- Jeu du Plus ou Moin codé pour l'exercice du
#-- site du zéro proposé par Gryfalo par RayonGama
from random import randrange
def rejouer(rejoue):
if rejoue == "oui":
main()
elif rejoue == "non":
print "Au revoir!"
def jeu(max):
nombreMystere = randrange(max)
gagner = 0
nombreCoup = 0
rejoue = ""
try:
print "Vous devez trouvez un nombre compris entre 0 et " + str(max) + " !"
while gagner == 0:
nombreJoueur = int(input("Votre nombre -> "))
if nombreJoueur == nombreMystere:
print "Vous avez gagné en "+ str(nombreCoup) + " coups ! Bien joué"
gagner = 1
while rejoue != "oui" or rejoue != "non":
rejoue = raw_input("Voulez-vous rejouez ? (Oui/Non)")
if rejoue == "oui" or rejoue == "non":
rejouer(rejoue)
else:
print "Vous n'avez pas rentré oui ou non "
elif nombreJoueur > nombreMystere:
print "Le nombre mystere est plus petit"
nombreCoup = nombreCoup + 1
elif nombreJoueur < nombreMystere:
print "Le nombre mystere est plus grand"
nombreCoup = nombreCoup + 1
elif nombreJoueur > max:
print "Vous devez trouvez un nombre compris entre 0 et " + max + " !"
except:
print "Vous n'avez pas rentré un chiffre"
def main():
print"""Bienvenue dans le jeu Plus Ou Moins :
Veuillez choisir un niveau de difficulté :
1 : Facile (Chiffre jusqu'a 50)
2 : Moyen (Chiffre jusqu'a 100)
3 : Difficile (Chiffre jusqu'a 500)
4 : Expert (Chiffre jusqu'a 2500)
5 : Diabolique (Chiffre jusqu'a 10000)"""
niveauListe = [50, 100, 500, 2500, 10000]
try:
max = niveauListe[int(input("Votre choix --> "))+1]
jeu(max)
except:
print "Vous n'avez pas rentré un chiffre"
main()
J'ai essayé de l'améliorer mais je ne vois pas trop comment, donc si vous trouvez des endroits précis ou le code pourrais être optimisé merci de me le dire
En réflechissant un peu tu peux nettement améliorer cela
def jeu(max):
nombreMystere = randrange(max)
gagner = 0
nombreCoup = 0
rejoue = ""
try:
print "Vous devez trouvez un nombre compris entre 0 et " + str(max) + " !"
while gagner == 0:
nombreJoueur = int(input("Votre nombre -> "))
if nombreJoueur == nombreMystere:
print "Vous avez gagné en "+ str(nombreCoup) + " coups ! Bien joué"
gagner = 1
while rejoue != "oui" or rejoue != "non":
rejoue = raw_input("Voulez-vous rejouez ? (Oui/Non)")
if rejoue == "oui" or rejoue == "non":
rejouer(rejoue)
else:
print "Vous n'avez pas rentré oui ou non "
elif nombreJoueur > nombreMystere:
print "Le nombre mystere est plus petit"
nombreCoup = nombreCoup + 1
elif nombreJoueur < nombreMystere:
print "Le nombre mystere est plus grand"
nombreCoup = nombreCoup + 1
elif nombreJoueur > max:
print "Vous devez trouvez un nombre compris entre 0 et " + max + " !"
except:
print "Vous n'avez pas rentré un chiffre"
Je vais profiter de ce topic pour faire passer un conseil aux débutants et autres codeurs amateurs de tout poil : en python, respectez la PEP8 !
Que stipule la PEP8 pour que ce soit si important ?
Déjà, important : « Use 4 spaces per indentation level. », c'est-à-dire « Utilisez quatre espaces par niveau d'indentation. »
Pourquoi donc ? Pour la lisibilité !
Et le « For really old code that you don't want to mess up, you can continue to use 8-space tabs. » ne me le sortez pâs pour dire « je peux mettre des tabs », parce que ce ne sont pas des codes véritablement vieux que vous postez sur ce topic.
Ensuite : « Never mix tabs and spaces. », donc « Ne mélangez jamais les espaces et les tabulations ». Point barre.
De plus : « Limit all lines to a maximum of 79 characters. », donc « Limitez la longueur de vos lignes à 79 caractères ». C'est mieux, franchement.
Ce sont les points que j'estime pes plus importants sur les codes que je vois sur ces topics, même ceux de programmeurs qui ne sont pas des débutants, tel fred1599, qui donne un très mauvais exemple aux débutants avec ça. Quand je jette un premier coup d'œil, ce que je vois, c'est :
« Il utilise des tabs ! ».
Si vous ne l'avez pas fait, vous devriez lire la PEP8, parce que les informations dedans ne se réfèrent pas qu'à ça, mais également à d'autres bonnes habitudes à prendre quand on programme en python.
Je pense qu'il faut pas se focaliser sur ça, franchement les débutants ont d'autres chats à fouetter que de s'occuper de la PEP. J'ai vraiment rien vu sur le forum d'outrageusement scandaleux ni de vraiment récurrent en la matière. Même si je ne dis pas qu'occasionnellement il n'y ait pas de problème .
Au passage, Python manque d'un vrai beautifier comme C en a.
Concernant l'indentation, il me semble que Python lui même ne donne pas l'exemple. Par exemple dans IDLE ou dans une console Linux, les indentations ne sont pas régulières, cf :
>>> if True:
... if True: # La console idente seule de 4
... print "Faux" # la console indente maintenant en 8
...
Faux
>>>
Citation : ordiclic
Ensuite : « Never mix tabs and spaces. », donc « Ne mélangez jamais les espaces et les tabulations ». Point barre.
OK mais il faut d'abord expliquer aux débutants la différence entre tabulation et espace et comment on règle son éditeur et comment agir devant un fichier tiers pour ne pas mélanger le style du fichier et son propre style.
Citation : ordiclic
De plus : « Limit all lines to a maximum of 79 characters. », donc « Limitez la longueur de vos lignes à 79 caractères ». C'est mieux, franchement.
Sans doute mais il faut expliquer au débutant les techniques de découpe les lignes : usage de parenthèses ou crochet, usage de chaînes adjacentes, usage de l'échappement \SPACE.
Citation : ordiclic
tel fred1599, qui donne un très mauvais exemple aux débutants avec ça.
Ah bon fred fait ça lui qui brandit souvent les PEP ?
Effectivement, j'aurais pu apporter un peu de précisions. Mais ma signature devrait être suffisamment explicite pour expliquer pourquoi je ne décris pas ansolument tout, chaque détail de chaque truc. Expliquer, guider, c'est bien, prendre par la main, je m'y refuse.
fred1599 a, juste au-dessus de mon texte, un code indenté purement avec des tabultaions, je ne l'invente pas.
Je n'ai cité que les propos de la PEP8 à propos des tabulations et des espaces par ça m'a choqué, encore une fois. J'aurais pu tout citer, mais c'était inutile.
La PEP8 devrait être respectée dès la première ligne de code. C'est contraignant pour un débutant ? Il sera trop tard plus tard pour qu'il se corrige automatiquement.
De plus, le fait de respecter les conventions de suite évitera que d'autres débutants ne prennent en exemple des codes moches/mal indentés/mal nommés/mal formés/whatever de pas bon.
Je traîne plus rarement sur le forum python, en effet, mais j'avais déjà vu les messages de fred1599 et ça me surprenait.
Toutes mes plus plates excuses pour ce malentendu.
# -*-coding:Latin-1 -*
from random import*
print("jeu du plus ou du moins")
rejouer = True
while rejouer:
continuer = True
hasard = randint(0,100)
i=0
print("entrez un nombre entre 0 et 100")
while continuer:
essai = -1
print("entrez un nombre")
try:
nb=int(input())
i+=1
except ValueError:
print("vous n'avez pas entré un nombre valide ")
essai =-1
i+=1
continue
if nb<0 or nb>100:
print ("ERREUR vous devez entrer un nombre entre 0 et 10")
if nb == hasard:
print ("gagné")
print("le nombre secret était ", hasard, " vous l'avez trouvé en ",i," coups")
continuer = False
elif nb < hasard:
print("c'est plus")
else:
print("c'est moins")
print("rejouer o/n")
reponse = input()
if reponse == "o" or reponse == "O":
rejouer = True
else:
print("merci d'avoir jouer avec nous !!!!")
rejouer = False
Euh... pas besoin d'écrire en rouge et en gros, suffit de demander poliment.
Voilà un code exemple, qui prend les erreurs de frappe, la possibilité de rejouer, et le compteur de coups.
# -*- coding:utf8 -*-
from random import randint
print("jeu du plus ou du moins\n")
compteur = 0
HASARD = randint(0,100)
REPONSE = ("o", "n")
while True:
print("Coup n°{}".format(compteur+1))
try:
n = int(input("Entrer un nombre entre 0 et 100 : "))
except (ValueError, TypeError):
continue
if n > HASARD: print("Plus petit"); compteur += 1
elif n < HASARD: print("Plus grand"); compteur += 1
else:
print("Gagné")
print("Trouvé en {} coups".format(compteur))
choix = input("Voulez-vous rejouer : ").lower()
if choix not in REPONSE: raise ValueError("Mauvaise réponse")
elif choix == "o":
compteur = 0
HASARD = randint(0,100)
else: break
je ne voulais pas froisser ta susceptibilité en écrivant en rouge, j'ai juste voulu mettre un peu de
fun dans mon post. Je vois qu'il faut rester assez conformiste dans tout ce que l'on dit ou fait...
tant pis et désolé de t'avoir importuner par ma typographie !!!
(fait une recherche sur mon profil, je ne pense pas avoir été mal poli un jour ... regarde mes posts et fais toi une idée ...!!!)
de plus, merci pour ta réponse
au plaisir d'avoir des réponses de ta part qui a chaque fois m'ont beaucoup aider a comprendre mes
erreurs de débutant(que je suis toujours !!!)
je ne voulais pas froisser ta susceptibilité en écrivant en rouge, j'ai juste voulu mettre un peu de
fun dans mon post. Je vois qu'il faut rester assez conformiste dans tout ce que l'on dit ou fait...
tant pis et désolé de t'avoir importuner par ma typographie !!!
(fait une recherche sur mon profil, je ne pense pas avoir été mal poli un jour ... regarde mes posts et fais toi une idée ...!!!)
de plus, merci pour ta réponse
au plaisir d'avoir des réponses de ta part qui a chaque fois m'ont beaucoup aider a comprendre mes
erreurs de débutant(que je suis toujours !!!)
Il m'en faut beaucoup plus pour me froisser
Simplement tu dois savoir que lorsqu'on écrit sur un forum, on essaie de donner un sens à chaque style d'impression.
Ecrire en grand, pour moi (et d'autres) c'est crier, et le rouge pour rendre ça important ou tenir une attention particulière.
J'ai aussi eus l'occasion de créer mon programme du jeu plus ou moins, je débute en python mais en tout cas, je trouve mon code pas trop mal :
import os
from random import randrange
nb_secret = randrange(1,100)
nb_prop = 0
conteur = 0
print("Bienvenue dans le jeu du plus ou du moins !")
while nb_secret != nb_prop:
nb_prop = input("Trouvez le nombre secret :")
nb_prop = nb_prop.strip()
try:
nb_prop = int(nb_prop)
except :
print("Une erreur a été détecté !")
continue
if nb_prop == nb_secret :
print("Vous avez gagnez !!!!")
break
elif nb_prop > nb_secret :
print("Ce nombre est trop grand")
conteur +=1
elif nb_prop < nb_secret :
print("Ce nombre est trop petit")
conteur += 1
conteur_2 = 10 - conteur
print("Il vous reste {} essaie(s).".format(conteur_2))
if conteur == 0:
print("Vous avez perdu !!!")
os.system("pause")
Je débute en python mais j'ai voulu me risquer à faire ce jeu.
# -*- coding: cp1252 -*-
from random import randrange
nombrepropose=0
DEBUT
nombremystere = randrange(1, 100)
print("\t\t\t\t=== Plus ou moins === \n\n")
print("niveau 1:Facil 1-100")
while nombrepropose != nombremystere:
print("Quel est le nombre ?")
nombrepropose = input()
nombrepropose = int(nombrepropose)
if nombrepropose < nombremystere:
print("Plus grand !")
elif nombrepropose > nombremystere:
print("Plus petit !")
else:
print("Bien joué")
print("Veux tu passer au niveau 2 ? Press 1 for YES")
suite1 = input()
if suite1==1:
nombremystere = randrange(1, 1000)
print("niveau 2:Moyen 1-1000")
while nombrepropose != nombremystere:
print("Quel est le nombre ?")
nombrepropose = input()
nombrepropose = int(nombrepropose)
if nombrepropose < nombremystere:
print("Plus grand !")
elif nombrepropose > nombremystere:
print("Plus petit !")
else:
print("Bien joué")
print("Veux tu passer au niveau 3 ? Press 1 for YES")
suite2 = input()
if suite2==1:
nombremystere = randrange(1, 10000)
print("niveau 3:Difficile 1-10000")
while nombrepropose != nombremystere:
print("Quel est le nombre ?")
nombrepropose = input()
nombrepropose = int(nombrepropose)
if nombrepropose < nombremystere:
print("Plus grand !")
elif nombrepropose > nombremystere:
print("Plus petit !")
else:
print ("Bien joué")
print("Veux tu passer au niveau 4 ? Press 1 for YES")
suite3 = input()
if suite3==1:
nombremystere = randrange(1, 100000)
print("niveau 4:Hardcore 1-100000")
while nombrepropose != nombremystere:
print("Quel est le nombre ?")
nombrepropose = input()
nombrepropose = int(nombrepropose)
if nombrepropose < nombremystere:
print("Plus grand !")
elif nombrepropose > nombremystere:
print("Plus petit !")
else:
print ("Bien joué")
print("Veux tu passer au niveau 5 ? Press 1 for YES")
suite4 = input()
if suite4==1:
nombremystere = randrange(1, 1000000)
print("niveau 5:WHAT THE HELL ? 1-1000000")
while nombrepropose != nombremystere:
print("Quel est le nombre ?")
nombrepropose = input()
nombrepropose = int(nombrepropose)
if nombrepropose < nombremystere:
print("Plus grand !")
elif nombrepropose > nombremystere:
print("Plus petit !")
else:
print ("Bien joué, tu as fini les 5 niveaux !")
print ("voulez vous rejouer ? Press 1 for YES")
replay = input ()
if replay==1:
Il fonctionne mais ne plaît pas vraiment :
-Pourriez-vous me dire comment utiliser la commande GOTO dans python ?
-Comment pourrais-je le mettre dans une autre fenêtre que le "python shell" ?
-Puis-je insérer un système de score qui commence d'un nombre et diminue d'un certain nombre à chaque entrée du joueur ?
Merci d'avance
- Edité par Mathias Clabots 21 février 2013 à 11:56:45
Pour commencer, je pense qu'utiliser goto est une tres tres (tres) mauvaise idee (quand bien meme elle existait en python, ce qui n'est pas le cas). Voila qui t'en convaincra.
Pour ce qui est du score, pourquoi ne pas declarer une variable score que tu decrementerais a chaque fois?
Bonne journee!
- Edité par stackOverflow 21 février 2013 à 12:04:53
Mathias, première chose que j'ai remarqué : c'est le code un peu trop tordu, j'ai fait un code similaire au tiens sauf qu'on choisi directement la difficultés et que c'est en fonction tout simplement et ça rends le code très facilement modifiable et je peu rajouter des niveaux de difficultés très facilement avec ce code mais je conçois qu'il n'est pas parfait mais convient tout à fait pour un jeu du "Plus ou du moins"
Jeu du plus ou du moins
# Aleatoire
from random import randrange
print("Bienvenue dans le Jeu du plus ou du moins.")
def jeu_plus_ou_moins (nombre_secret, nb_essaies): # Jeu en soi
nb_prop = 0
while nb_prop != nombre_secret:
nb_prop = input("Saissisez un nombre : ")
try: # Le nombre est convertie en entier
nb_prop = int(nb_prop)
except : # Si on ne peut pas, la boucle recommence
print("Ce n'est pas un nombre.")
continue
if nb_prop <= 0 :
print("Saissisez un nombre supérieur à 0 ")
continue
if nb_prop == nombre_secret : # nombre trouvé
print("Vous avez trouvé le nombre secret !")
break
elif nb_prop < nombre_secret : # trop petit
print("Le nombre saisie est trop petit.")
nb_essaies -= 1
elif nb_prop > nombre_secret : # trop grand
print("Le nombre saisie est trop grand.")
nb_essaies -= 1
if nb_essaies <= 0:
print("Vous n'avez pus d'essaies !")
break
print("Il vous reste {} essaies.".format(nb_essaies))
def difficultee (niveau): # Difficutee en fonction
if niveau == 1:
jeu_plus_ou_moins(randrange(1,51), 20) # facile
elif niveau == 2:
jeu_plus_ou_moins(randrange(1,101), 15) # moyen
elif niveau == 3:
jeu_plus_ou_moins(randrange(1,201), 10) # difficile
elif niveau == 4 :
jeu_plus_ou_moins(randrange(1,501), 7) # hardcore
i = 0
# Choix de la difficulté : Facile, Moyen, Difficile, Hardcore
while i == 0 :
diff = input("Quel difficultée ? Facile/moyen/difficile/hardcore : ")
diff = diff.strip().capitalize()
if diff == "Facile":
difficultee (1)
elif diff == "Moyen":
difficultee (2)
elif diff == "Difficile" :
difficultee(3)
elif diff == "Hardcore":
difficultee(4)
else:
print("Choissisez une difficultée valide !")
continue
while True : # Quitter le programme
quitter = input("Voulez-vous quitter le programme : ")
quitter = quitter.strip().lower()
if quitter == "oui" :
print("Vous quittez le jeu.")
i = 1
break
else :
print("Vous restez sur le jeu.")
break
quitte = input("Appuyez sur ENTREE pour quitter...")
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.