Partage
  • Partager sur Facebook
  • Partager sur Twitter

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

29 octobre 2010 à 19:03:51

Citation : fred1599


De quoi parles-tu ? Je ne vois pas.



clear deux fois dans ton code, est-ce nécessaire ?


Citation : fred1599

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).
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 octobre 2010 à 19:14:19

Citation

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.

  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2010 à 19:41:11

Citation : fred1599


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).
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2010 à 20:01:59

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) .
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2010 à 20:40:08

Voici ce que donne ton code chez moi :

$ python sdz.py 
  File "sdz.py", line 45
    print ("Il faut donner un nombre entre 1 et 100 :")
        ^
IndentationError: expected an indented block
  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2010 à 15:00:37

Un petit essais vite fait avec l'enregistrement des scores :D
#-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")
  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2010 à 0:41:38

Bonjour,

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. :o
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 décembre 2010 à 9:11:15

Citation

S'il vous plait, où est mon erreur ?



Ba le truc c'est qu'il n'y en a pas qu'une.

Problème d'indentation ligne 20 à 24
Oubli d'un ":" en ligne 22

edit : Une boucle infinie en ligne 14

etc.
  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2010 à 9:11:28

indentation des lignes 21,22,et 23
manque ':' à la fin de la ligne 22

arf, trop tard ...
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

11 décembre 2010 à 13:22:07

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.

Merci de votre patience.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 décembre 2010 à 13:54:05

while signifie "tant que"

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


  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2010 à 14:57:47

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 ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 décembre 2010 à 15:20:32

La PEP 8 est un ensemble de conventions pour le codeur python.

Ça permet de ne pas se détourner de l'habitude du codeur lorsqu'il lira ton code pour le corriger par exemple :)

  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2010 à 1:48:11

Putain, bonjour le pavé en anglais XD
  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2010 à 12:46:09

Citation : ShikiSokuZeku

Putain, bonjour le pavé en anglais XD


Ou sinon il y a ça en français.
  • Partager sur Facebook
  • Partager sur Twitter
9 avril 2011 à 9:51:54

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)
  • Partager sur Facebook
  • Partager sur Twitter

Sandro CAZZANIGA

Anonyme
9 avril 2011 à 12:47:04

sys.exit(0)


Il ne sert à rien car comme tu sors de ta boucle, tu sors aussi de ton programme
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2011 à 10:45:02

C'était pour s'assurer qu'il finisse bien avec un code d'erreur 0.
  • Partager sur Facebook
  • Partager sur Twitter

Sandro CAZZANIGA

Anonyme
10 avril 2011 à 12:43:28

Citation

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.

;)
  • Partager sur Facebook
  • Partager sur Twitter
11 avril 2011 à 16:52:42

Ah oui, merci de m'avoir aidé à améliorer le programme! :)
  • Partager sur Facebook
  • Partager sur Twitter

Sandro CAZZANIGA

17 avril 2011 à 11:19:19

Et voilà ma solution:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from random import choice
champ = range(0, 101)
hasard_nombre = choice(champ)
adieux = ['fermer', 'quiter', 'exit']
reponse = ''
while reponse not in adieux:
	try:
		reponse = raw_input('Quel est le nombre ?\n')
		if int(reponse) < 0:
			print "C'est un nombre positive !"
		if int(reponse) < hasard_nombre:
			print "C'est trop petit !\n"
		elif int(reponse) == hasard_nombre:
			print "Félicitations, vous avez trouvé le nombre mystère !!!\n"
			break
		elif int(reponse) > hasard_nombre:
			print "C'est trop grand !\n"
		if reponse in adieux:
			break
	except:
		print 'Erreur: Invalid réponse.\n'
  • Partager sur Facebook
  • Partager sur Twitter
8 août 2011 à 15:10:33

J'ai fait un petit truc, ça m'a l'air assez long comparé aux autres codes que je vois. :-°
Dites moi ce que vous en pensez. :)

# -*- coding: UTF-8 -*-

from random import randint

def lire_int(s = ''):
    if len(s):
        print s
    nb = int(raw_input())
    return nb

def difficulte():
    print 'Difficulté :'
    print '1 - Facile    (0-100)'
    print '2 - Moyen     (0-1000)'
    print '3 - Difficile (0-10000)'
    diff = lire_int()
    return diff - 1

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
    
def rejouer():
    print 'Rejouer ?'
    print 'oui/non'
    rep = raw_input()
    if rep in ('o', 'oui'):
        return 1
    else:
        return 0

def main_loop():
    cont = 1
    while cont:
        x = difficulte()
        n = generer_nombre(x)
        jouer(n)
        cont = rejouer()
    
main_loop()
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 août 2011 à 15:40:23

C'est pas mal du tout, en tout cas le code est clair, compréhensible, on peut corriger facilement ;)

def lire_int(s = ''):
    if len(s):
        print s
    nb = int(raw_input())
    return nb


En plus concis, j'ai en plus rajouter les erreurs possibles de l'utilisateur

def lire_int(s = ''):
    if s:
        print s
    try:
        nb = int(raw_input())
    except ValueError: # Au cas où le mec rentre n'importe quoi
        lire_int()    
    return nb


Suivant

def difficulte():
    print 'Difficulté :'
    print '1 - Facile    (0-100)'
    print '2 - Moyen     (0-1000)'
    print '3 - Difficile (0-10000)'
    diff = lire_int()
    return diff - 1


On peut utiliser les triples quotes, ça évite beaucoup de print

def difficulte():
    print '''Difficulté :
    1 - Facile    (0-100)
    2 - Moyen     (0-1000)
    3 - Difficile (0-10000)'''
    diff = lire_int()
    return diff - 1


Suivant

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


on pourrait faire plus concis

def generer_nombre(diff = 0):
    try:
        niv =[100, 1000, 10000][diff+1]
        return randint(0, niv)
    except ValueError:
        print 'Erreur: difficulté inconnue'
        return 100


suivant
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é :-°

Voilà ;)
  • Partager sur Facebook
  • Partager sur Twitter
8 août 2011 à 15:52:53

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. :)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 août 2011 à 16:10:54

Citation

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



donc le else est inutile, tu peux le virer.
  • Partager sur Facebook
  • Partager sur Twitter
8 août 2011 à 16:13:33

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
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 août 2011 à 16:30:02

Oui j'avais pas tout compris en effet le else est obligatoire.
Et oui je ne me souvenais plus de ton diff-1, donc tout est ok maintenant

Edit : Pour une question

Citation

Je ne connaissais pas les triples quote, ça sert uniquement à mettre du texte sur plusieurs lignes ?



Oui
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 17:41:53

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)
  • Partager sur Facebook
  • Partager sur Twitter
18 août 2011 à 9:30:49

# -*- coding: utf8 -*-
from random import randint
compteur = 0
nombre_joueur = 0
nombre_mystere = randint(1, 100)
while(not(nombre_joueur == nombre_mystere)):
 print "TAPER UN NOMBRE:"
 nombre_joueur = int(input())
 if (nombre_joueur < nombre_mystere):
  print "TROP PETIT"
 else:
  print "TROP GRAND"
 compteur += 1
print "GAGNANT EN", compteur, "COUPS"


Une solution de base mais fonctionnelle :)
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2011 à 10:34:11


Citation : Kolkhosia

while(not(nombre_joueur == nombre_mystere)):




Parenthèses après while inutiles.

Citation : Kolkhosia

not(nombre_joueur == nombre_mystere)




ou plus simplement nombre_joueur != nombre_mystere

Citation : Kolkhosia

if (nombre_joueur < nombre_mystere):

Parenthèses après if inutiles.


Citation : Kolkhosia


Une solution de base mais fonctionnelle :)



Tout à fait ;)
  • Partager sur Facebook
  • Partager sur Twitter