Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice][Novice]Le jeu du plus ou moins

7 juillet 2010 à 2:11:00

Vous connaissez sûrement le jeu du plus ou moins de m@teo21 (TP du langage C) ? Et bien le but de cet exercice est de faire la même chose mais en Python ;)

Le principe

Pour commencer l'ordinateur va choisir au hasard un nombre compris entre 1 et 100.
L'utilisateur doit alors deviner ce nombre comme ceci :
L'utilisateur propose un nombre. L'ordinateur lui dit s'il est trop petit ou trop grand, et ainsi de suite jusqu'à ce que l'utilisateur aie trouvé le bon nombre.

Voici un exemple :

Quel est le nombre ?
50
C'est trop petit !

Quel est le nombre ?
75
C'est trop grand !

Quel est le nombre ?
60
Félicitations, vous avez trouvé le nombre mystère !!!


Connaissances requises
  • Conditions
  • Boucles

Et pour terminer voici la correction commentée :

# -*-coding:Latin-1 -*

import os
#Fonction randrange nécessaire pour générer un nombre aléatoire.
from random import randrange 

#On initie la variable nombrePropose à n'importe quelle valeur sauf entre 1 et 100 sinon il se pourrait que se soit précisement le nombre mystère !.
nombrePropose = 0 

#Un titre pour faire joli.
print("\t\t\t\t=== LE JEU DU PLUS OU MOINS ===\n\n")

#On génère le nombre mystère.
nombreMystere = randrange(1, 100)

#Boucle qui continuera tant que l'utilisateur n'aura pas trouvé le nombre.
while nombrePropose != nombreMystere:
    
    print("Quel est le nombre ?")

    #L'utilisateur propose son nombre.
    nombrePropose = input()
    nombrePropose = int(nombrePropose)

    #Si le nombre est trop petit...
    if nombrePropose < nombreMystere:
        print("C'est trop petit !\n")

    #Sinon si le nombre est trop grand...
    elif nombrePropose > nombreMystere:
        print("C'est trop grand !\n")

    #Sinon (sous-entendu : si on a trouvé le nombre)...
    else:
        print("Félicitations, vous avez trouvé le nombre mystère !!!\n")

#On met le système en pause.
os.system("pause")

#Et voilà !!!

Bon, cet exercice n'est vraiment pas difficile, vous y arriverez facilement en moins de 10 minutes (débutants compris !) ;)

...

Bon d'accord, 15 minutes :p Après vous pouvez corser le tout en améliorant le programme ;)
  • L'ordinateur affiche un message d'erreur si l'utilisateur propose un nombre inférieur à 0 ou supérieur à 100.
  • Vous pouvez choisir le niveau de difficulté.
  • Vous pouvez inclure un mode multijoueur où un autre utilisateur entre le nombre à deviner.
  • Vous pouvez ajouter une variable "compteur" qui fait en sorte de dire à l'utilisateur en combien de coups il a réussi à découvrir le nombre (ex. : "Vous avez trouvé le nombre en 5 coups")
  • Et enfin vous pouvez demander à l'utilisateur s'il veut refaire une partie ou pas. ;)
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 7:02:03

Voila mon code (si qlq pourrait me dire comment ouvrir la console DOS avec python ce serait cool, et aussi comment mettre une variable sur le randrange pour alléger mon code.):

from random import randrange
from tkinter import *

def GO1 ():

 x = randrange(50)
 y=0
 print('Veuillez entrez un nom entre 1 et 50')

 while(y != x):
    y = int(input())

    if(y<x):
        print("C'est plus grand")
    if(y>x):
        print("C'est plus petit")
    if( y==x):
        print("BRAVO")

def GO2 ():

 x = randrange(99)
 y=0
 print('Veuillez entrez un nom entre 1 et 100')

 while(y != x):
    y = int(input())

    if(y<x):
        print("C'est plus grand")
    if(y>x):
        print("C'est plus petit")
    if( y==x):
        print("BRAVO")

def GO3 ():

 x = randrange(999)
 y=0
 print('Veuillez entrez un nom entre 1 et 1000')

 while(y != x):
    y = int(input())

    if(y<x):
        print("C'est plus grand")
    if(y>x):
        print("C'est plus petit")
    if( y==x):
        print("BRAVO")

def GO4 ():

 x = randrange(9999)
 y=0
 print('Veuillez entrez un nom entre 1 et 10 000')

 while(y != x):
    y = int(input())

    if(y<x):
        print("C'est plus grand")
    if(y>x):
        print("C'est plus petit")
    if( y==x):
        print("BRAVO")


 




fen = Tk()
fen.title('PLUS OU MOINS')

bou1 = Button(fen, text= 'Facile', command = GO1).pack(side=BOTTOM)
bou1 = Button(fen, text= 'Intermédiaire', command = GO2).pack(side=BOTTOM)
bou1 = Button(fen, text= 'Difficile', command = GO3).pack(side=BOTTOM)
bou1 = Button(fen, text= 'FOLIE', command = GO4).pack(side=BOTTOM)


fen.mainloop()
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
7 juillet 2010 à 7:51:23

En fait je ne vois pas trop l'intérêt à moins que tu souhaites voir différents codages.

Alors pour jouer le jeu, j'en ai fait un :) A tester avec la version 2 et surtout pas 3, à moins de faire des modifs dessus.

J'ai essayé de simplifier au maximum pour que tu le comprennes bien, maintenant si t'as des questions, n'hésite pas.

from random import randint
import os
compteur, nb=10, randint(1, 100) # init compteur + nombre compris entre 1 et 100
while 1:
    try:
        choix=int(raw_input("Entrer votre nombre entre 1 et 100:")) # Que en version 2.6
        if not 1<=choix<=100:
            print """t'as du mal ou quoi? C'est entre 1 et 100!!!"""
            continue
    except ValueError:
        print "Entre un chiffre on te dit!"
        continue # redemande d'entrer un nombre
    test=cmp(choix, nb) # fonction de test, voir ligne du dessous
    result={1: "nombre trop grand", -1: "nombre trop petit", 0: "bingo"}
    print result[test]
    if test==0: # Si bingo, on compte les points
        break
    else :
        compteur-=1 
        continue
if compteur>0: print "vous avez %d points" %(compteur) # traitement compteur
else :print "0 point, hououou!!!"
os.system('pause')
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 11:06:15

Pour participer un peu :) .
from random import randint

def alea(min, max) :
  return randint(min, max)

def verif(n_entre, n_mystere) :
  if n_mystere < n_entre :
    print ("C'est moins !")
  elif n_mystere > n_entre :
    print ("C'est plus !")
  else :
    print ("Bravo, vous avez gagnez !\n")
        
min, max = 1, 100
n_entre, n_mystere = 0, alea(min, max) 

print ("Bienvenue dans le pendu\nLe nombre genere est situe entre 1 et 100")

while n_entre != n_mystere : 
  n_entre = int(input("Entrez un nombre "))
  verif(n_entre,n_mystere)


Edit : fred, pour ne pas que le programme se ferme, mettre raw_input() n'est pas une solution propre d'après ce que j'ai lu. Essaye os.system("pause") .
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 11:07:03

Citation : fred1559

En fait je ne vois pas trop l'intérêt à moins que tu souhaites voir différents codages.



Ben écoute, l'intérêt c'est de s'entraîner c'est tout ;) il me semble que c'est pas mal pour les débutants ;)Alors après c'est sûr que les "plus experts" y arriveront les doigts dans le nez les yeux bandés, et cet exo ne leur servira pas à grands-choses, c'est juste un exo pour les débutants ;) Mais après vous pouvez tout à fait jouer le jeu... ;)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
7 juillet 2010 à 11:38:18

Citation

Ben écoute, l'intérêt c'est de s'entraîner c'est tout ;) il me semble que c'est pas mal pour les débutants ;)Alors après c'est sûr que les "plus experts" y arriveront les doigts dans le nez les yeux bandés, et cet exo ne leur servira pas à grands-choses, c'est juste un exo pour les débutants ;) Mais après vous pouvez tout à fait jouer le jeu... ;)



J'avais proposer des petits exos pour s'entrainer sous python, mais je me suis fais rembarrer par nos experts. Dommage pour les débutants.

Je crois que beaucoup d'experts ne comprennent pas qu'avant de faire des problèmes, il faut faire des exercices pour s'entraîner à l'utilisation de python.

Dommage! :(
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 11:59:50

Le problème de tes petits exos, c'est qu'ils sont concentrés sur un sujet précis, par exemple tu feras un exo qui ne parle que des conditions, alors que le mien par exemple, c'est plus général, il utilise les variables, les modules, les boucles et les conditions en même temps, et donc c'est un bon type d'exercice pour les débutants ;)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
7 juillet 2010 à 12:02:18

Par exemple, les dicos, tu ne sais pas encore les utiliser? Si oui, il faut bien que tu en manipules un peu avant de commencer un exo plus généraliste, non?

  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 12:04:10

Ben non, quand j'apprends une nouvelle notion, j'utilise toujours ce que j'ai appris précédemment, ce qui me permets de mieux comprendre l'utilité de cette notion ;)
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 12:09:35

Petite idée pour compléter le biniou : mettre un compteur de "coup"

genre "Vous avez trouvez le nombre mystére en 8 coups !"
c'est bidon à faire :p
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 12:10:07

J'ai éditer le premier message ;)
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 12:59:57

Cet exercice convient bien au débutant mais le problème c'est qu'il est trop classique. (Il n'y a pas un TP dans le cours ?)

  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 13:55:03

Citation : EPonix

Cet exercice convient bien au débutant mais le problème c'est qu'il est trop classique. (Il n'y a pas un TP dans le cours ?)



Si en langage C :p .
Classique ou pas, il faut bien commencer par quelque chose ^^


P.S: Le mode "aperçu" ne marche pas, cela vient il de moi ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
7 juillet 2010 à 14:01:46

Citation : fred1599


A tester avec la version 2 et surtout pas 3, ...


:diable: A mort Python 2 !! :lol:

Voilà ma version (non simplifié :pirate: )

# Plus ou Moins Mon Premier Jeu 

class PlayerError(Exception):
    pass
class HumanCheater(PlayerError):
    pass

yes = ('y', 'yes', 'o', 'oui')

try:
    rep = input("""
    Moi, Python 3, je te parie que je peux deviner à quel nombre, compris entre
    0 et 100, tu est entrain de penser en moins de 8 tentatives. Alors on parie ?

    Réponds moi 'oui' quand tu es prês, toute autre réponse sera considéré comme
    un refus de participer.
    @> """)

    if rep in yes:
        pass
    else:
        raise PlayerError("Bah... Toi y'en as pas vouloir jouer avec moi !? :'(")

    while True:
        nmin = 0
        nmax = 100
        
        for i in range(7):
            nb_myst = ((nmax - nmin) // 2) + nmin
            if nb_myst <= nmin or nb_myst >= nmax:
                raise HumanCheater("Tu peux toujours essayer de me tromper...")

            print('Tantative', i+1, ' : ',
                  "Est-ce que le nombre mystère est",
                  nb_myst, "?")

            rep = input(""" - Réponses acceptées: [+|-|oui] @> """)
            if rep in yes:
                print("Alors, qui que c'est le plus fort ! ;)")
                break

            elif rep in ('+', 'plus'):
                nmin = nb_myst
                print()

            elif rep in ('-', 'moins'):
                nmax = nb_myst
                print()

            else:
                raise PlayerError("Toi y'en as pas jouer le jeu !! >_<")

            if i == 6:
                raise HumanCheater("Tu peux toujours essayer de me tromper...")
            
        rep = input("Veux-tu rejouer ? @> ")
        if rep in yes:
            print()
            continue
        else:
            break

except PlayerError as err:
    print(err)
    print('Dans ce cas là, bah moi je te dis; à la revoillure !!')

Bon, c'est vrai que ce n'était pas vraiment ça l'exercice, m'enfin bon... :-°
  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2010 à 18:31:02

Niark niark petits joueurs >_< Je vous offre sur un plateau la version "la totale" :soleil::pirate:

# -*- coding: cp1252 -*-

############################## OK alors ça ce sont les modules.
import os
from random import randrange

############################## Voilà, donc c'est la fonction permettant de déterminer "nombreMystere" au cas où on a choisi le mode multi.
def multijoueur(nombreMystere, MIN, MAX):
        print """\nJoueur 1, entrez le nombre mystère (entre 1 et 100) que le joueur 2 doit trouver :"""

        while nombreMystere < MIN or nombreMystere > MAX:
            nombreMystere=int(input())

            if nombreMystere < MIN or nombreMystere > MAX:
                print """Vous devez entrer un nombre compris entre 1 et 100 !"""

            else:
                os.system("clear")
                return nombreMystere

############################## Et là c'est la fonction qui permet à l'utilisateur de choisir son lvl.
def difficultee(MAX):
    print """\n1 / 100 (tapez 1)
1 / 500 (tapez 2)
1 / 1000 (tapez 3)

Votre choix ?"""
    choixDifficultee = False
    while choixDifficultee == False:
        
        choixDifficultee = input()

        if choixDifficultee < 1 or choixDifficultee > 3:
            print """Veuillez entrer un choix valide !"""
            choixDifficultee = False

        elif choixDifficultee == 1:
            choixDifficultee = 1
            MAX = 100
            return MAX

        elif choixDifficultee == 2:
            choixDifficultee = 2
            MAX = 500
            return MAX

        else:
            choixDifficultee = 3
            MAX = 1000
            return MAX
        
recommencer = True
while recommencer == 1:
    
############################## Les variables
    MIN, MAX, nombreMystere = nombreEntre = 1, 100, 0
    compteur = 0

    print """
\t\t\t\t=== LE JEU DU PLUS OU MOINS ===

Mode solitaire (tapez 1)
Mode multijoueur (tapez 2)

Votre choix ?"""

    choixMode = False
    while choixMode == False:
        
        choixMode = input()

        if choixMode < 1 or choixMode > 2:
            print """Veuillez entrer un choix valide !"""
            choixMode = False

        elif choixMode == 1:
            choixMode = 1

        else:
            choixMode = 2

    if choixMode == 1:
        MAX = difficultee(MAX)
        nombreMystere = randrange(MIN, MAX)
        print """"""

    else:
        nombreMystere = multijoueur(nombreMystere, MIN, MAX)

############################## Et c'est parti ! On essaye de trouver le nombre...
    while nombreEntre != nombreMystere:
        print """Quel est le nombre (entre 1 et""", MAX,""") ?"""
        nombreEntre = input()
        nombreEntre = int(nombreEntre)

        if nombreEntre < MIN or nombreEntre > MAX:
            compteur -= 1
            print """Veuillez proposer un nombre compris entre 1 et""", MAX,""" !\n"""
            
        elif nombreEntre < nombreMystere:
            
            print """C'est plus !\n"""
            
        elif nombreEntre > nombreMystere:
            
            print """C'est moins !\n"""
            
        else:
            compteur += 1
            print """Félicitations, vous avez trouvé le nombre mystère en""", compteur, """coup(s) !!!\n"""

        compteur += 1

############################## On demande à l'utilisateur s'il veut recommencer...
    print """Recommencer une partie (tapez 1)
Quitter (tapez 2)

Votre choix ?"""

    recommencer = False
    while recommencer == False:
        
        recommencer = input()

        if recommencer < 1 or recommencer > 2:
            print """Veuillez entrer un choix valide !"""
            recommencer = False

        elif recommencer == 1:
            recommencer = 1

os.system("pause")
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 11:44:33

Bonjour,
moi j'ai fait mon code mais j'ai juste un petit probléme quand je demande a l'utilisateur d'entrer un nombre il reste afficher et je ne veux pas(l'autre utilisateur le vois après). Voici comme meme mon code
# -*-coding:Latin-1 -*
import os
from random import randrange

print("Bienvenue dans ma version du jeu plus ou moin en Python.")
continuer = True
while continuer == True:
	print("Tapez 1 pour facile => 100, 2 pour moyen =>10000 et 3 pour difficile =>1000000. Mais si vous voulez que se soi une autre personne qui rentre le chiffre tapez 4")
	niveau = input()

	if niveau == 1:
		print("Vous allez jouez en mode facile.")
		nb_mystere = randrange(100)
	
	elif niveau == 2:
		print("Vous allez jouez en mode moyen.")
		nb_mystere = randrange(10000)
	
	elif niveau == 3:
		print("Vous allez jouer en mode difficile.")
		nb_mystere = randrange(1000000)
	
	elif niveau == 4:
		print("Tapez le nombre a entrer")
		nb_mystere = input()
		
	else:
		print("vous n'avez pas choisi le niveau de difficulter tapez 1, 2, 3 ou 4!")
	
	
	print("Veuillez tapez un nombre pour que je puisse vous dire si c'est plus ou moin.")
	nb_saisi = input()
	compteur = 0
	
	while nb_mystere != nb_saisi:
		if nb_saisi < nb_mystere:
			print("C'est plus !! Tapez un nombre.")
			nb_saisi = input()
			compteur = compteur + 1
		
		elif nb_saisi > nb_mystere:
			print("C'est moin !! Tapez un nombre.")
			nb_saisi = input()
			compteur = compteur + 1
	
	compteur = compteur + 1
	print("Bravo vous avez gagner ! Vous avez eu besion de ",compteur,"coups")
	print("Voulez vous rejouer ? Tapez 1 pour oui et une lettre pour quitter.")
	quiterl = input()
	
	if quiterl == 1:
		continuer = True
		
os.system("pause")
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 13:31:39

os.system("cls")

De rien ;)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2010 à 14:56:31

Bon voila mon jeu, avec une certaine difficulté à le terminer si on commence au niveau 1.
On commence à 10 points et le passage au niveau supérieur se fait automatiquement avec un bonus de 5 points.
Vous pouvez tester chaque niveau, mais le vrai jeu se commence au niveau 1

import random

def gen_nombre(choix):
    global myst
    global x
    x=[101, 501, 1001]
    myst=random.randint(0, x[choix-1])
    

def test(a, b):
    global t
    t=cmp(a, b)
    result={1:"nombre trop grand", \
            0:"Oui tres bien !", \
            -1:"nombre trop petit"}
    return result[t]

def utilisateur():
    compteur=10
    user=int(raw_input("Entrer (1, 2 ou 3) pour le choix du mode :"))
    if user>0 and user<4 :
        gen_nombre(user)
        while 1:
            demande="Entrer votre nombre (max=%d):" %(x[user-1]-1)
            nb=int(raw_input(demande))
            print test(nb, myst)
            if (t==0 and compteur>=0):
                compteur+=5
                print "vous avez %d points!" %(compteur)
                if user!=3 and compteur>=0:
                    user+=1
                    print "passage au niveau %d !" %(user)
                    gen_nombre(user)
                elif (user==3 and compteur>=0):
                    print "vous etes deja au niveau max, Trop fort!"
                    break
                elif compteur<0:
                    print "plus assez de points, perdu!"
                    break
            elif (t!=0 and compteur<0):
                print "plus assez de points, perdu!"
                break
            else :
                compteur-=1
                continue
    else : utilisateur()

def main():
    print "Jeu du plus ou moins"
    print """Choisissez votre difficulté

1--> mode simple (nombre entre 0 et 100)
2--> mode intermédiaire (nombre entre 0 et 500)
3--> mode difficile (nombre entre 0 et 1000)"""
    utilisateur()

main()
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 15:03:06

Bonjour,

Je suis vraiment très loin d'être bon en python mais ces lignes me laisse perplexe:
def test(a, b):
    global t
    t=cmp(a, b)
    result={1:"nombre trop grand", \
            0:"Oui tres bien !", \
            -1:"nombre trop petit"}
    return result[t]


En effet, l'utilisation du dictionnaire n'est-elle pas abusive ici? De simples conditions suffit, non?
J'en appelle aux plus expert que moi pour répondre à cette question^^
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2010 à 15:19:55

Je ne comprend pas où tu veux en venir, chacun ayant sa façon de coder, les uns préfèreront les conditions et d'autres les dicos.

Dans ce cas ci et c'est même pas pour ça que je l'ai fais, j'ai une ligne d'économisée, mais avec les if, elif et else, c'est tout à fait faisable.

De là à dire que c'est abusif, c'est un peu poussé.

Qu'on me disent que isinstance c'est mieux que le module types, mais moins bien que try except, je veux bien c'est la PEP qui le dit, mais dans mon cas de figure, je ne vois rien qui dit que dico moins bien que des conditions. o_O
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 17:41:25

Il y a une erreur dans ton code : si on choisi le mode simple, ils nous disent que le max est 500 alors que c'est censé être 100 :

Jeu du plus ou moins
Choisissez votre difficulté

1--> mode simple (nombre entre 0 et 100)
2--> mode intermédiaire (nombre entre 0 et 500)
3--> mode difficile (nombre entre 0 et 1000)
Entrer (1, 2 ou 3) pour le choix du mode :1
Entrer votre nombre (max = 500):


Et si on choisi le mode 2, le max est 1000 (alors que c'est censé être 500) et quand on choisi le mode 3, et bien la console s'éteint tout bonnement...
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2010 à 17:44:08

Citation : LeYan'tibus

Citation : fred1599


A tester avec la version 2 et surtout pas 3, ...


:diable: A mort Python 2 !! :lol:

Voilà ma version (non simplifié :pirate: )


# Python 3, c'est plus fort que toi ! 

class JoueurNonCoopératif(Exception):
    def __init__(self, s=None):
        if not s:
            s = "Toi y'en as po tout comprendre !"
        self = Exception.__init__(self, s)


class TuEsUnTricheur(JoueurNonCoopératif):
    def __init__(self):
        self = JoueurNonCoopératif.__init__(self, "Pff! Tricheur !!")


class Devinette:
    def __init__(self):
        self.min = 0
        self.max = 100
        self.tentative = 7
        self.plus = ('plus', 'p', '+')
        self.moins = ('moins', 'm', '-')
        self.deviner()

    def deviner(self):
        self.X = (self.max - self.min) // 2 + self.min

    def vérificationAntiCheateur(self):
        if self.X in (self.max, self.min):
            raise TuEsUnTricheur

    def plusGrand(self):
        if self.tentative:
            self.min = self.X
            self.deviner()
            self.tentative -= 1
        else:
            raise TuEsUnTricheur

    def plusPetit(self):
        if self.tentative:
            self.max = self.X
            self.deviner()
            self.tentative -= 1
        else:
            raise TuEsUnTricheur

    def plusOuMoins(self):
        self.vérificationAntiCheateur()
        rep = self.réponseÀLaQuestion("Est-ce que le nombre est " +
                                      str(self.X) + " ? Sinon est-il plus ou" +
                                      " moins grand ? ")
        if rep in self.plus:
            self.plusGrand()
        elif rep in self.moins:
            self.plusPetit()
        elif rep in ('o', 'y', 'oui', 'yes'):
            return True
        else:
            raise JoueurNonCoopératif
        return False



if __name__ == "__main__":

    def reponse(s):
        return input(s)
    
    print("""
On parie que moi, Python 3, je peux deviner à quel nombre, compris
entre 0 et 100, tu es entrain de penser en moins de 8 tentative ?
""")
    input('Appui sur entrée quand tu es prés à commencer !')

    gg = Devinette()
    gg.réponseÀLaQuestion = reponse

    try:

        for i in range(7):
            print('Tentative', i+1)
            if gg.plusOuMoins():
                print('Je sais, je suis trop fort ! ^^')
                break
        else:
            raise TuEsUnTricheur

    except JoueurNonCoopératif as err:
        print(err)

Bon, c'est vrai que ce n'était pas vraiment ça l'exercice, m'enfin bon... :-°

Oups je voulais édité et j'ai cité :lol: tans pis ^^
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2010 à 18:00:40

Citation

Il y a une erreur dans ton code : si on choisi le mode simple, ils nous disent que le max est 500 alors que c'est censé être 100 :



Petite, mais elle est là, c'est rectifié! Merci.

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 18:09:25

Citation : fred1599

...



En fait je pense que l'utilisation de dico doit être plus lente, et je trouve que ca réduit la lisibilité du code ici...
Après c'est mon point de vue :p
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2010 à 18:52:08

Citation

En fait je pense que l'utilisation de dico doit être plus lente, et je trouve que ca réduit la lisibilité du code ici..



Hou il ne faut pas penser, mais tester, la différence est ridicule et c'est normal, mais j'arrive à te prouver le contraire

import time
def test(a, b):
    depart=time.time()
    global t
    t=cmp(a, b)
    result={1:"nombre trop grand", \
            0:"Oui tres bien !", \
            -1:"nombre trop petit"}
    print result[t]
    print "le temps d'execution est de %f seconde avec dicos" %(time.time()-depart)

def test_1(a, b):
    depart=time.time()
    global t
    t=cmp(a, b)
    if t==1: print "nombre trop grand"
    elif t==0: print "Oui tres bien!"
    else: print "nombre trop petit"
    print "le temps d'execution est de %f seconde avec conditions" %(time.time()-depart)

test(5, 3)
test_1(5, 3)


>>> 
nombre trop grand
le temps d'execution est de 0.000000 seconde avec dicos
nombre trop grand
le temps d'execution est de 0.016000 seconde avec conditions
>>>


Et maintenant tu utiliseras plus souvent le dico, je suis sur que non :D

Edit : Sur 1 million de calculs on voit un peu mieux la différence

le temps d'execution est de 1.510000 seconde avec conditions
le temps d'execution est de 0.798000 seconde avec dico


Citation

Mais c'est plus sur la sémantique du code



Je ne suis pas informaticien, donc la sémantique je m'en fou un peu faut dire.

Faut que ça marche, c'est tout!

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 19:25:41

Citation : fred1599

...



EDIT : Tu a modifié ton test, com obsolète.
neo2500@neo2500-desktop:/tmp$ cat test.py
def test(a, b):
    i = 0;
    while( i<1000000):
        global t
        t=cmp(a, b)
        result={1:"nombre trop grand", \
                    0:"Oui tres bien !", \
                    -1:"nombre trop petit"}
        i+=1
   
test(5,3)
neo2500@neo2500-desktop:/tmp$ cat test2.py
def test(a, b):
    i = 0;
    while (i<1000000) :
        global t
        t=cmp(a, b)
        if t==1: 1
        elif t==0: 1
        else: 1
        i+=1

test(5, 3)
neo2500@neo2500-desktop:/tmp$ time python test.py 

real        0m0.700s
user        0m0.690s
sys        0m0.000s
neo2500@neo2500-desktop:/tmp$ time python test2.py 

real        0m0.438s
user        0m0.430s
sys        0m0.000s


Donc c'est bien plus lent... Normal en même temps(mais bon très négligeable je l'admet).
Mais c'est plus sur la sémantique du code ma question, est-ce une bonne utilisation des dicos?
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 19:30:43

S'il vous plaît, c'est pas le lieu pour discuter de ça...
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2010 à 19:49:24

Une petite version récursive, pas forcément super élégante :
from random import randrange

nombre_mystere = randrange(1, 100)

def plus_ou_moins(nombre_entre, nb_coups, nombre_mystere):
    if nombre_entre == nombre_mystere:
        print "Bravo, réussi en %d coups" % nb_coups
    else:
        return plus_ou_moins(int(input(["=", "<", ">"][cmp(nombre_entre, nombre_mystere)])),
                             nb_coups + 1, nombre_mystere)


plus_ou_moins(input(), 1, nombre_mystere)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2010 à 20:10:53

Oui je n'avais pas pensé à le faire dans ce sens.

Par contre je la trouve élégante du fait qu'elle est facilement compréhensible et bien recherché.

Par contre j'aurais initialisé le nombre de coups dans la fonction, question de logique (ma logique).

  • Partager sur Facebook
  • Partager sur Twitter