Partage
  • Partager sur Facebook
  • Partager sur Twitter

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

Anonyme
29 juin 2014 à 13:02:37

Salut, d'un point de vue sémantique, un while smthg==True se remplace par while smthg . C'est tout l'intérêt des booléens qui remplacent avantageusement les prédicats. Faire un prédicat pour checker si un booléen est True fait perdre du sens au booléen.

De même pour un while smthg == False qui se remplace par while not smthg .

Enfin, à la fin, c'est un peu dommage de mettre les actions qui se font si l'on quitte dans la boucle de jeu (et c'est aussi dommage de faire un append dans le if et dans le else, autant le mettre en dehors).

Du coup, j'aurais plutôt vu un truc dans ce genre là pour la fin :

while continuer
...
liste_coups.append(nbres_coup)
continuer = not(input("Quitter ? ").lower() in ['o','oui','y','yes'])

print("Voici la liste de vos coups {}".format(liste_coups))

</pre>

Mais sinon, le code est assez propre, lisible et il fonctionne. Donc c'est déjà l'essentiel. :)

-
Edité par Anonyme 29 juin 2014 à 13:06:56

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juin 2014 à 13:14:55

Ah oui, c'est vrai, j'avais oublié que les booléens pouvaient se vérifier simplement comme ça !

J'ai corrigé le code avec tes remarques. ;) Seulement je dois avouer que j'ai un peu de mal avec une ligne, celle-ci :

continuer = not(input("Quitter ? ").lower() in ['o','oui','y','yes'])

Je comprends qu'il y a un input et que tu le passes en minuscule pour le comparer à ce que tu veux, mais je ne comprends pas trop le : not().

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juin 2014 à 16:18:24

Si le prédicat input("Quitter ? ").lower() in ['o','oui','y','yes'] est vrai, le joueur veut quitter. Il faut donc mettre le booléen continuer à False.

Si en revanche le prédicat input("Quitter ? ").lower() in ['o','oui','y','yes'] est faux, le joueur ne veux pas quitter. Il faut donc mettre le booléen continuer à True.

Autrement dit, le booléen continuer est le contraire du fait que le joueur veuille quitter, d'où le not.

De manière similaire à l'histoire du while smthg , les if condition : booléen=True ; else : booléen=False se remplacent simplement par booléen=condition .

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juin 2014 à 16:37:33

Ah oui, je comprends maintenant !

Merci de l'explication ! :)

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2015 à 10:18:05

Je me suis prêté à l'exercice non sans quelques petites difficultés (mais j'avais déjà développé ce programme en JustBasic et voulais lui donner les mêmes caractéristiques).

- Un menu de 1 à 4 (1-3 = difficulté, 4 = quitter) ;

- Compteur de "coups" ;

- Possibilité de rejouer, retourner au menu ou quitter.

Débutant complètement dans le Python (et la prog en général depuis très peu de temps), je suppose qu'il est possible de fortement simplifier mon code, et j'aimerais bien avoir quelques pistes en ce sens si quelqu'un a un peu de temps pour m'orienter. :)

# Le jeu du plus ou du moins en Python

import os
from random import randrange
from math import floor

nbMin = 1
play = True

while play:

	print ("\n\n°o. Le jeu du plus ou du moins .o°\n\n")
	print ("Menu\n\n")
	print ("1 - Trouvez le nombre mystère entre 1 et 99\n2 - Trouvez le nombre mystère entre 1 et 999\n3 - Trouvez le nombre mystère entre 1 et 9999\n4 - Quitter\n\n")
	
	choix = 0
	continuer = True
	
	while choix < 1 or choix > 4:
		try:
			choix = int(floor(float(input("Votre choix est : "))))
		except ValueError:
			print("Vous devez taper un chiffre.")
			continue
		if choix < 1 or choix > 4:
			print ("Vous devez saisir un chiffre entre 1 et 4.")		
		elif choix == 1:
			nbMax = 99
		elif choix == 2:
			nbMax = 999
		elif choix == 3:
			nbMax = 9999
		elif choix == 4:
			continuer = False
			play = False
	
	while continuer:
	
		essais = 1
		nbMystere = randrange(nbMin, nbMax)
		nbEntre = 0
	
		while nbEntre != nbMystere:
			try:
				nbEntre = int(floor(float(input("\nQuelle est votre proposition, de {} à {} ?\n".format(nbMin, nbMax)))))
			except ValueError:
				print("Vous devez taper un nombre.")
				continue
			if nbEntre < nbMin or nbEntre > nbMax:
				print ("Vous devez saisir un nombre entre {} et {}.".format(nbMin, nbMax))
			elif nbEntre > nbMystere:
				print ("Le nombre mystère est plus petit que {}".format(nbEntre))
				essais += 1
			elif nbEntre < nbMystere:
				print ("Le nombre mystère est plus grand que {}".format(nbEntre))
				essais += 1
			else:
				print ("Bravo ! Le nombre mystère est bien {}. Vous l'avez trouvé en {} coups !\n".format(nbEntre, essais))
		
		rePlay = 0
		
		while rePlay < 1 or rePlay > 3:
			try:	
				rePlay = int(floor(float(input("Souhaitez-vous rejouer (1), retourner au menu (2) ou quitter (3) ?\n\n"))))
			except ValueError:
				print("Vous devez taper un chiffre.")
				continue
			if rePlay < 1 or rePlay > 3:
				print ("Vous devez saisir un chiffre entre 1 et 3.")
			elif rePlay == 2:
				continuer = False
			elif rePlay == 3:
				continuer = False
				play = False
	
	
	
os.system ("pause")



  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2015 à 11:30:59

Salut,

Bravo pour ce petit programme fonctionnel. Alors comme tu demandes des commentaires, en voici, qui je l'espère seront constructifs.

Tout d'abord, il faut enlever la ligne 78. C'est inutile, et l'utilisateur est censé lancer le script depuis le terminal ou en utilisant IDLE ou un autre IDE, donc la fenêtre ne se refermera pas.

Pour tes print, tu pourrais utiliser la notation avec trois guillemets et rendre le tout plus lisible

print("""

°o. Le jeu du plus ou du moins .o°

Menu

1 - Trouvez le nombre mystère entre 1 et 99 2 - Trouvez le nombre mystère entre 1 et 999 3 - Trouvez le nombre mystère entre 1 et 9999 4 - Quitter

""")

</pre>

Pour le input, je n'utiliserais pas le floor, mais simplement choix = int(input("Votre choix est : ")) en indiquant en message d'erreur qu'il faut entrer un entier. De toute manière tu ne peux pas gagner à ce jeu si tu mettais 73.4 alors que le nombre mystère est 73.

En ligne 25, c'est juste une proposition, mais tu peux ré-écrire la condition if not 1 <= choix <= 4:. C'est à mes yeux un poil plus lisible, mais peut-être tout le monde ne le verrait pas pareil. :)

Pour tes while, au lieu de chaque fois initialiser une variable avec une valeur, puis rentrer dans le while, tu pourrais entrer dans un while True et mettre un break quand la condition est réalisée:

while True:
    try:
        choix = int(input("Votre choix est : "))
    except ValueError:
        print("Vous devez taper un nombre entier.")
        continue
    if not 1 <= choix <= 4:
        print ("Vous devez saisir un nombre entre 1 et 4.")       
    else:
        if choix == 1:
            nb_max = 99
        elif choix == 2:
            nb_max = 999
        elif choix == 3:
            nb_max = 9999
        elif choix == 4:
            continuer = False
            play = False
        break
</pre>

Ce principe peut s'appliquer en ligne 43 et 62.

-
Edité par Dan737 22 mars 2015 à 11:33:03

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2015 à 12:34:49

Pour tes while, au lieu de chaque fois initialiser une variable avec une valeur, puis rentrer dans le while, tu pourrais entrer dans un while True et mettre un break quand la condition est réalisée:

Hmm, non. Je pense pas que ce soit un bon conseil. J'aime bien savoir à quoi sert une boucle avant d'en lire le contenu, et pour ça la meilleure façon de s'y prendre est :

nb_max = None
while nb_max is None:
    # blablablabla
    # blablablablabla
    # blabla

Ici, pas besoin de lire le contenu de la boucle (que j'ai remplacé par des "blabla") pour savoir que cette boucle sert à initialiser nb_max.

Pour le contenu de cette boucle, on peut remarquer également que la conversion du choix de l'utilisateur (numéro dans un menu) en un entier n'est pas nécessaire. En fait, une façon simple d'isoler la correspondance pour la rendre plus facilement réglable serait celle-ci :

MENU_DIFFICULTE = {
    '1': 99,
    '2': 999,
    '3': 9999
}

nb_max = None
while nb_max is None:
    choix = input("Niveau de difficulté (entre 1 et 3 ou 'Q' pour quitter): ")
    choix = choix.lower().strip()
    nb_max = MENU_DIFFICULTE.get(choix, None)
    if choix == 'q':
        raise SystemExit(0)

-
Edité par nohar 22 mars 2015 à 12:35:15

  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
22 mars 2015 à 12:37:10

Merci pour cette réponse.

Dans l'ordre :

- Ligne 78 : je suis sur Windows et à moins que le programme ne plante (ça arrive, si, si), je n'utilise pas trop l'IDLE, je lance directement le programme ;

- C'est vrai que le print utilisé de cette manière est beaucoup plus lisible ! ;

- Le floor n'est pas une bonne option de base, c'est vrai, puisqu'il peut donner une victoire en cas de saisie d'un nombre décimal, c'était pour "aller plus vite" en ôtant une erreur potentielle, en fait (et j'ai appris en passant que floor existait :p) ;

- if not 1 <= choix >= 4: est très lisible pour moi après une première gymnastique de cerveau, à voir si je penserai à l'avenir "si plus petit que ou plus grand que" ou "entre tant et tant", je n'avais même pas songé à cette écriture, j'aime bien ! ;

- Ce n'est pas un peu risqué de prendre l'habitude d'entrer dans une boucle sans variable initialisée et de pouvoir se trouver à oublier d'initialiser une valeur (pas forcément sur la condition de la boucle) par la suite ? J'ai bien lu et compris le while True / break, mais j'ai l'impression que c'est laisser beaucoup de liberté à la boucle (peut-être bizarre comme impression...).

Merci pour les commentaires ! :)

o/

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2015 à 12:48:55

Ce n'est pas un peu risqué de prendre l'habitude d'entrer dans une boucle sans variable initialisée et de pouvoir se trouver à oublier d'initialiser une valeur (pas forcément sur la condition de la boucle) par la suite ? J'ai bien lu et compris le while True / break, mais j'ai l'impression que c'est laisser beaucoup de liberté à la boucle (peut-être bizarre comme impression...).

Si, et je suis d'accord avec toi, d'où mon post.

Les boucles infinies s'avèrent de temps en temps nécessaires, cela dit (pour gérer une boucle événementielle, par exemple). Mais dans le cas général il vaut mieux les éviter au profit de constructions plus intelligibles.

  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
22 mars 2015 à 12:49:31

nohar a écrit:

Pour le contenu de cette boucle, on peut remarquer également que la conversion du choix de l'utilisateur (numéro dans un menu) en un entier n'est pas nécessaire. En fait, une façon simple d'isoler la correspondance pour la rendre plus facilement réglable serait celle-ci :

MENU_DIFFICULTE = {
    '1': 99,
    '2': 999,
    '3': 9999
}

nb_max = None
while nb_max is None:
    choix = input("Niveau de difficulté (entre 1 et 3 ou 'Q' pour quitter): ")
    choix = choix.lower().strip()
    nb_max = MENU_DIFFICULTE.get(choix, None)
    if choix == 'q':
        raise SystemExit(0)

Je  comprends le début, c'est un peu comme le .format que j'utilise dans un print auquel on rajoute des conditions (enfin, je crois). Par contre les lignes 10 et 11 ressemblent un peu à du chinois. :o

-
Edité par JoKaelys 22 mars 2015 à 12:50:57

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2015 à 13:47:23

Pour la boucle while, tout dépend de ce qu'on veut accomplir. Parfois on a besoin plutôt d'une construction dans le style do ... while qui n'existe pas en tant que tel en Python. La manière de le faire est

 while True:
        &lt;setup code>
        if not &lt;condition>:
            break
        &lt;loop body>
</pre> Voir le PEP 315 qui a été rejeté. Aussi un article intéressant est loop and a half.

Mais je suis d'accord que parfois c'est plus lisible d'avoir la condition en haut. L'avantage du while True est qu'on initialise qu'un fois la variable, au moment de l'input, et non avec une valeur choisie avec soin afin de faire échouer la condition du while.

Just my 2 cents... :)

-
Edité par Dan737 22 mars 2015 à 17:04:58

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2015 à 15:57:52

D'où l'existence de None qui évite d'avoir à chercher une valeur pendant des plombes. ;)

  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
23 juillet 2015 à 20:29:34

Voilà, je propose aussi mon code ^^ :

 # -*-coding:Utf-8 -*
from random import randrange 
partie = True
while partie == True:
	print("Voilà le but du jeu, je vais choisir au hasard un nombre compris entre 1 et 100 et vous allez essayer de le deviner, je vous ferai savoir si le nombre saisie est trop petit ou trop grand.")
	nmb_correct = randrange(1, 101)
	nmb = 0
	while nmb != nmb_correct:
		nmb = input("Quel est le nombre ?: ")
		try:
			nmb = int(nmb)
		except ValueError:
			print("Vous n'avez pas saisi un nombre.")
			continue
		if not 1 <= nmb <= 100:
			print("Il faut saisir un nombre entre 1 et 100")
			continue 
		elif nmb == nmb_correct:
			print("Félicitations, vous avez trouvé le bon nombre !!!")
		elif nmb_correct < nmb:
			print("C'est trop grand !")
			continue
		elif nmb < nmb_correct:
			print("C'est trop petit !")
			continue
	partie = False 
	a = 1
	while a != "o" and a != "n": 
		a = input(" Vous voulez rejouer ? [o/n]: ")
		a = a.strip().lower()
		if a != "o" and a != "n":
			print("Veuillez saisir o ou n seulement.")
			a = 1
	if a == "o":
		partie = True



  • Partager sur Facebook
  • Partager sur Twitter
21 septembre 2015 à 0:26:03

arg1=int(input("doonez votre nombre:"))
arg2=int(input("quelle est votre proposition?!:"))
s=0
while(s==s):
    if(arg1 > arg2):
        print("c'est trop petit")
        arg2=int(input("donnez votre proposition:"))
    elif(arg1 < arg2):
        print("c'est trop grand")
        arg2=int(input("donnez votre proposition:"))
    else:
        print("c'est le nombre très bien en fait c'est:",arg1)
        break;
    s+=1        
            


  

  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2015 à 22:15:24

une petite variante pour débutants le jeu du plus ou moins ou c est l ordinateur qui doit deviner un nombre que vous aurez choisi
  • Partager sur Facebook
  • Partager sur Twitter
23 novembre 2015 à 22:01:55

je comprends pas pourquoi mon code ne marche pas:

import random
import os
nb_rand = random.randrange(1, 100)
nb_test = 0

while nb_test != nb_rand:
    nb_test = input("choisissez un nombre: ")
    if nb_test > nb_rand:
        print("votre nombre est trop grand")
    elif nb_test < nb_rand:
        print("votre nombre est trop petit")       
    else:
        print("Vous avez gagné!")      

os.system("pause")



  • Partager sur Facebook
  • Partager sur Twitter
24 novembre 2015 à 7:07:07

Parce que input retourne une chaîne de caractères. Donc quand tu compares if nb_test > nb_rand, en fait tu fais if "32" > 42. Note les guillemets !

Tu dois donc au préalable convertir ta chaîne de caractères en entier avec la fonction int

-
Edité par Dan737 24 novembre 2015 à 7:07:21

  • Partager sur Facebook
  • Partager sur Twitter
13 février 2016 à 17:18:35

# -*-coding:Latin-1 -*
import os
#Fonction randrange nécessaire pour générer un nombre aléatoire.
from random import randrange
#Nombre d'essais
nbr_essais_max = 5
nbr_essais = 1
#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 and nbr_essais <= nbr_essais_max:
    print("Quel est le nombre ?")
    #L'utilisateur propose son nombre.
    nombrePropose = input()
    nombrePropose = int(nombrePropose)
    #L'Utilisateur essaie pour la premiere fois
    print("Essai no ",nbr_essais)
    #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 en ",nbr_essais," essais !!!\n")
    nbr_essais += 1
    if nbr_essais>nbr_essais_max and nombrePropose != nombreMystere :
       print("Désolé, vous avez utilisé vos",nbr_essais_max,"essais en vain.")
       print("J'avais choisi le nombre",nombreMystere,".")
#On met le système en pause.
os.system("pause")
#Et voilà !!!

-
Edité par LouisFrederickRakotoarison 13 février 2016 à 17:40:02

  • Partager sur Facebook
  • Partager sur Twitter
13 février 2016 à 18:03:30

@LouisFred: Jouons ensemble au jeu des 7 erreurs: Quelle est la différence entre ton code et celui de TOUS les autres :-°?

Si tu as trouvé la réponse, tu peux directement éditer ton message 

-
Edité par Olygrim 13 février 2016 à 18:04:39

  • Partager sur Facebook
  • Partager sur Twitter
Précepte: Le mieux est l'ennemi du bien
14 février 2016 à 0:40:33

Olygrim a écrit:

@LouisFred: Jouons ensemble au jeu des 7 erreurs: Quelle est la différence entre ton code et celui de TOUS les autres :-°?

Si tu as trouvé la réponse, tu peux directement éditer ton message 

-
Edité par Olygrim il y a environ 6 heures


J'ai ajoute quelques codes
  • Partager sur Facebook
  • Partager sur Twitter
14 février 2016 à 10:22:27

Je parlais de la présentation ;). Ton code n'est pas formaté comparé à celui des autres (cadre noir, coloration syntaxique, numéro de ligne, ...). Pour ce faire, il faut mettre ton code dans les balises correspondantes: </> et choisir le langage python ^^.

Et comme je l'ai dit, tu peux directement éditer ton premier message (pas besoin d'en créer un autre) ;)

  • Partager sur Facebook
  • Partager sur Twitter
Précepte: Le mieux est l'ennemi du bien
11 juin 2016 à 23:21:21

V'là mon code ^_^

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

"""Excercice Python no2: Jeu du plus ou moins
	Par JeroomuSama"""
from random import randint

nombre_entre = int(0)
nombre_cpu = int(0)
score = float(0)
nb_de_coups = int(0)
sortie_boucle = False
victoire = False

nombre_cpu = randint(1,100)

game_paused = raw_input("Pour quitter le jeu, tapez 'quit' au lieu d'entrer votre nombre...")

while nombre_cpu != nombre_entre and sortie_boucle == False:
	try:
		nombre_entre = raw_input('Entrez un nombre compris entre 1 et 100: ')
		if nombre_entre == "quit":
			sortie_boucle = True
		else:
			nombre_entre = int(nombre_entre)
	except ValueError:
		print "Veillez à n'entrer que des caractères numériques..."
		if nb_de_coups > 0:
			nb_de_coups -= 1
	#--------------------------------------------------------------------------#
	nb_de_coups += 1
	if nombre_cpu == nombre_entre and isinstance (nombre_entre, int):
		victoire = True
		sortie_boucle = True
	elif nombre_cpu > nombre_entre and isinstance (nombre_entre, int):
		print "Le nombre attendu est plus grand que ",nombre_entre," !"
	elif nombre_cpu < nombre_entre and isinstance (nombre_entre, int):
		print "Le nombre attendu est plus petit que ",nombre_entre," !"
	else:
		print "..."
#-------------------------------------<
score = (99 / nb_de_coups) * 112

if victoire == True:
	print "Félicitations, vous avez trouvé le nombre caché en ",nb_de_coups," coups !"
	print "Votre score pour cette partie est de: ",score," Points."
else:
	print "Merci d'avoir joué, passez une excellente journée :)"
 



-
Edité par jeroomusama 11 juin 2016 à 23:24:16

  • Partager sur Facebook
  • Partager sur Twitter
11 juin 2016 à 23:33:48

Tu peux mettre un break à la lace de sortir_boucle ...

Tu peux aussi te passer de victoire

-
Edité par josmiley 11 juin 2016 à 23:34:54

  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

12 juin 2016 à 18:18:38

Merci pour le rappel du "Break", c'est vrai que je n'y pense jamais ;)

Pour la variable "victoire" c'est plus propre, si le joueur quitte la partie avec le mot clef "quit" le texte final ne sera pas le même que s'il remporte la partie.

  • Partager sur Facebook
  • Partager sur Twitter
13 juin 2016 à 1:21:20

et comme ça ... ?

j'ai retiré les variables inutiles et sorti les lignes qui ne servaient à rien dans les boucles.

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

from random import randint
 
nombre_entre = 0
nb_de_coups	 = 0
 
nombre_cpu	 = randint(1,100)
 
raw_input("Pour quitter le jeu, tapez 'quit' au lieu d'entrer votre nombre...")
 
while nombre_cpu != nombre_entre:
	nombre_entre = raw_input('Entrez un nombre compris entre 1 et 100: ')
	if nombre_entre == "quit":
		print "Merci d'avoir joué, passez une excellente journée :)"
		break
	try:
		nombre_entre = int(nombre_entre)
	except ValueError:
		print "Veillez à n'entrer que des caractères numériques..."
		print "..."
		continue
	#--------------------------------------------------------------------------#
	nb_de_coups += 1
	if nombre_cpu > nombre_entre:
		print "Le nombre attendu est plus grand que ",nombre_entre," !"
	elif nombre_cpu < nombre_entre:
		print "Le nombre attendu est plus petit que ",nombre_entre," !"
#-------------------------------------<
	
else:
	print "Félicitations, vous avez trouvé le nombre caché en ",nb_de_coups," coups !"
	score = (99 / nb_de_coups) * 112
	print "Votre score pour cette partie est de: ",score," Points."


-
Edité par josmiley 13 juin 2016 à 10:39:32

  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

13 juin 2016 à 11:05:52

Bin on arrive exactement au même résulta sauf qu'on voit bien que c'est pas la même personne qui a programmé les deux bordels :)

Ta façon de faire est mieux, elle va à l'essentiel et je vais retenir deux ou trois choses de ça, merci ;)

Par contre je préfère déclarer mes variables en début de code plutôt que de le faire directement dans un calcul en plein milieu du bordel (comme ici avec la variable "score", tu l'as enlevée en haut mais tu t'en sers quand même en bas... Ca fonctionne et c'est pas grave mais moi je préfère tout de même les déclarer au début avec la valeur "0" pour les int).

  • Partager sur Facebook
  • Partager sur Twitter
2 mai 2017 à 17:42:42

Voici un code qui fonctionne parfaitement avec les idées d'amélioration :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

////////// le nombre cacher ///////////////////

/*
int nombre = 0;

    printf("\n \n  ");
    scanf("%d",&nombre);

if(nombre != 47 ){
    while(nombre != 47)
    {

    printf("\n \n Résseyer on sait jamais \n \n");
    scanf("%d",&nombre);
    }
}else{
    printf("\n \n  \n \n ");
}

   printf("\n \n yeeesss vous avez reussi \n \n ");
*/


// boucle qui se répete un certain nombre de fois
/*
int compteur = 0 ;

while(compteur <= 3 ){
    printf("avant %d",compteur);
    compteur++;
    printf("apres %d  \n \n \n  ",compteur);
}
*/

// boucle 2 : do .... while


//do{

    // instructions
// }while(/* conditions */);

// boucle 3 : for

// for(initialisation;condition;incrementation){
    // instruction
// }
//// chapitre 8 /////////////
int nombreMystere = 0 ;
int nombre = 0 ;
int compteur = 0 ;
int continuerPartie = 0 ;
int choix = 0 ;
int niveau = 0 ;

printf(" \n  ********   menu **********  \n");
printf(" \n  ****  vous avez 2 jeu ****  \n");
printf(" \n  **** le 11 ou le 22 ******  \n");
printf(" \n  ** Faite votre le 11 ou 22 **  \n");
scanf("%d",&choix);

if(choix == 11)
   {
// c'est le mode 1 le pc qui génére le nombre mystére

do
{
printf("Vous avez trois niveau de dificulter \n ");
printf(" \n Niveau 1 ---> entre 1 et 100");
printf(" \n Niveau 2 ---> entre 1 et 1000");
printf(" \n Niveau 3 ---> entre 1 et 10000");
printf(" \n Veuiller taper le numero de votre niveau :");
scanf("%d",&niveau);

if(niveau == 1){

// c'est deux lignes génére un nombre mystére
srand(time(NULL));
nombreMystere = (rand() % (100 - 1 + 1)) + 1;

}else if(niveau == 2) {

// c'est deux lignes génére un nombre mystére
srand(time(NULL));
nombreMystere = (rand() % (1000 - 1 + 1)) + 1;

}else{
// c'est deux lignes génére un nombre mystére
srand(time(NULL));
nombreMystere = (rand() % (10000 - 1 + 1)) + 1;

}

// le jeu commence
printf(" \n \n Bienvenu dans le jeu Plus ou moins \n \n");
printf(" Deviner le nombre : \n \n  ");
scanf("%d",&nombre);



while(nombre != nombreMystere){
if(nombre > nombreMystere){
            compteur++;
            printf("\n C'est moins \n \n ");
            printf("Quel est le nombre ? ");
            scanf("%d",&nombre);
}else{
            compteur++;
            printf("\n C'est plus \n \n ");
            printf("Quel est le nombre ? ");
            scanf("%d",&nombre);
}
                              }

            printf(" \n woooow Felicitation vous avez trouver le nombre mystere en %d woooow \n \n \n",compteur);

printf(" vous voulez commencer une Nouvelle Partie si oui entrer le nombre 10 sinon entrer le nombre 0 : \n \n ");
scanf("%d",&continuerPartie);

 }while(continuerPartie == 10);

 printf("\n \n Aller a Bientot bye bye \n \n ");








   }else{

// c'est le mode 2 c'est vous que vous choisiser le nombre mystére

printf(" \n Bienvenue au jeu 22 \n");

printf("Vous avez trois niveau de dificulter \n ");
printf(" \n Niveau 1 ---> entre 1 et 100");
printf(" \n Niveau 2 ---> entre 1 et 1000");
printf(" \n Niveau 3 ---> entre 1 et 10000");
printf(" \n Veuiller taper le numero de votre niveau :");
scanf("%d",&niveau);

if(niveau == 1){
printf("choisisez un nombre entre 1 et 100");
scanf("%d",&nombreMystere);

}else if(niveau == 2) {

printf("choisisez un nombre entre 1 et 1000");
scanf("%d",&nombreMystere);

}else{
printf("choisisez un nombre entre 1 et 10000");
scanf("%d",&nombreMystere);
}







do
{


// le jeu commence






printf(" \n \n  le jeu 22 commence  \n \n");
printf(" Deviner le nombre : \n \n  ");
scanf("%d",&nombre);



while(nombre != nombreMystere){
if(nombre > nombreMystere){
            compteur++;
            printf("\n C'est moins \n \n ");
            printf("Quel est le nombre ? ");
            scanf("%d",&nombre);
}else{
            compteur++;
            printf("\n C'est plus \n \n ");
            printf("Quel est le nombre ? ");
            scanf("%d",&nombre);
}
                              }

            printf(" \n woooow Felicitation vous avez trouver le nombre mystere en %d woooow \n \n \n",compteur);

printf(" vous voulez commencer une Nouvelle Partie si oui entrer le nombre 10 sinon entrer le nombre 0 : \n \n ");
scanf("%d",&continuerPartie);

 }while(continuerPartie == 10);

 printf("\n \n Aller a Bientot bye bye \n \n ");






   }


    return 0;

}

Idée pour améliorer l'exercice : Comment cacher le nombre entrer par le joueur A ?

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 mai 2017 à 18:13:42

Ici on est sur le forum PYTHON !

Ton code C quand à lui est répétitif, tu peux améliorer cela en utilisant les fonctions par exemple...

Ligne 84 à 97 avec une fonction,

...

Mais bon, on est sur le forum PYTHON !

  • Partager sur Facebook
  • Partager sur Twitter
2 mai 2017 à 18:29:19

ah d'accord ca ressemble au C un peu , la pour le moment j'ai pas lu le chapitre sur les fonction . 

Merci pour la réponse comme méme ^^

  • Partager sur Facebook
  • Partager sur Twitter
22 juillet 2017 à 10:53:03

Hello,

J'apprend le Python et je viens de finir le premier chapitre.

Voilà ma solution à l'exercice :

#config:utf-8
from random import randrange
continuer = True

print("Bonjour et bienvenue au jeu du nombre mystère !")
while continuer==True:
	nb=0
	nbmys=0
	nbmys=randrange(1,100)

	while nb!=nbmys:
		nb=input("Quel est le nombre mystère ? (entre 1 et 100)")
		nb=int(nb)
		if nb>nbmys:
			print("Le nombre mystère est plus petit !")
		elif nb<nbmys:
			print("Le nombre mystère est plus grand !")
	print("Bravo ! Le nombre mystère était bien",nbmys)
	quitter=input("Voulez-vous continuer à jouer ? (o/n)")
	if quitter=="n":
		print("A la prochaine !")
		continuer=False

Qu'en pensez-vous ?

  • Partager sur Facebook
  • Partager sur Twitter