C'est parce que tu tourne dans ta boucle while "while a==1 and P==0:" et du coup la P==2 tu n'y retourne jamais.
En fait dans l'idée, si tu veux faire ça simplement il faudrait structurer comme ça (je te le fais en pseudo code, j'ai la flemme de pondre un python correcte là

)
[debut]
# initialisation des stats
nb_partie_joue=1
nb_partie_gagne=0
nb_essaie_total=0
tant que True (en python ce serait : while True:)
si nb_partie_joue > 1
on demande si la personne veut changer les config
si nb_partie_joue = 1 ou la personne veut changer de config
on defini les config (prix min/max et nombre d'essai)
# initialisation du nombre a trouver et des autres valeurs necessaire
nb_donne=0
nb_a_trouver=randint() #avec les bornes donnee dans le if au dessus
nb_essaie_courant=1
tant que nb_donnee != nb_a_trouver et nb_essaie_courant <= nombre_max_essai
on demande le nombre
si nb_donnee = cheatcode
message cheat code
break
# nouvelle zone "if"
si nb_donnee > nb_a_trouver
on affiche le bon message
sinon si nb_donnee < nb_a_trouver
on affiche l'autre message <img src='http://img.gmstemple.com/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
sinon
on affiche vous avez trouver !
break
si on depasse les borne des prix max / min
on affiche l'erreur
sinon si nb_essaie_courant .... (on gère l'affichage des avertissement sur les nombre d'essaie)
affiche ce qu'il faut
nb_essaie_courant += 1
fin de tant que
si nb_donnee = nb_a_trouver
vous avez gagner,
nb_partie_joue += 1
nb_partie_gagne += 1
nb_essaie_total += nb_essaie_courant
sinon si cheatcode utilise
on affiche le texte qu'il faut
nb_partie_joue += 1
sinon
vous avez perdu
nb_partie_joue += 1
nb_essaie_total += nb_essaie_courant
voulez vous rejouer?
si "non":
break
fin de tant que
# pas besoin de condition ici, tu sors de la boucle c'est que tu arrête forcément de jouer <img src='http://img.gmstemple.com/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
on affiche les scores
[FIN]Pour l'info :
c=c+i+1 #nombre de coup sur l'ensemble des parti (+1 car sinon il me manquais toujours 1 au résultat je ne sais pas pourquoi)
C'est parce que tu commence tes compteurs à 0, pas à 1, c'est d'ailleur pour ça que je commence les compteurs à 1 ici tu remarqueras. On fera toujours une partie
Sinon en vrac quelques commentaires sur ton code :
- donne des vrais nom à tes variables ! T'es pas limité au nombre de caractères dans ton code, ni noté sur ce point je suppose, donc ce sera plus simple pour toi (et ton correcteur) à relire avec de vrais nom genre "nb_partie_jouee" à la place de "p"

- evite les "elif" a toute les sauces :
if m==M or m>M or m==0:
print("Fourchette de prix impossible verifier bien que le maximun ne soit pas inferieur au minimum, que l'ecart entre les deux valeur est au moins de 1 et Que le prix minimum soit au moins de 1.")
elif e==0:
print("Valeur impossible le minimum d'essais accorder doit etre au minimum 1.")
ici il faut 2 if : si la personne fait par exemple m == M et e==0, seule le premier print va s'afficher alors qu'on a les deux erreurs

Fait plutôt
if m==M:
premier message
elif m>M:
message m>M pas bien
elif m==0:
message m=0 pas bien
if e==0:
message e=0 pas bien
Ca permet de savoir plus précisement ce qui est faux. Quand tu te trompe de login quand tu t'identifie au forum, il te dis pas "login incorrect ou mdp incorrect ou account ban ou account lock ou ...."

- les commentaires, ça se met au dessus ou en dessous des lignes de code, pas derrières, pour une question de lisibilité : un commentaire inline (sur la même ligne) va plus distraire qu'être utile
Sinon dans les convention de code, un commentaire doit, s'il est long, être écrit comme une phrase (majuscule / point) (le "." peut être omis si le commentaire fait 4 mots) - ta boucle "while n!=x and i!=e-1:" pas besoin de demander 10fois la même chose, on le fait déjà une fois au début de la boucle qu'on va parcourir nb_partie_max fois au plus

- essaie d'éviter les conditions inutiles, ex: le if a==2, ou la condition quand on gagne/perd : tu fais ça
#Quand on gagne
if n==x:
#...
#Quand on perd
elif i==e-1:
Fait simplement, c'est plus simple et moins lourd
#Quand on gagne
if n==x:
#...
#Quand on perd
else:
- aère ton code, même point qu'avant, t'es pas limité à la place que tu prend donc au lieu de faire ça (par exemple)
c=c+i+1 #nombre de coup sur l'ensemble des parti (+1 car sinon il me manquais toujours 1 au resultat je ne sais pas pourquoi)
g=g+1 #nombre de victoire
p=p+1 #nombre de parti
fait
# nombre de coup sur l'ensemble des parti (+1 car sinon il me manquais toujours 1 au resultat je ne sais pas pourquoi)
c = c + i + 1
# nombre de victoire
g = g + 1
# nombre de parti
p = p + 1
Après, je ne sais pas si tu connais ça, mais utilise les formatage de string pour tes print avec des variables, ce qui rend un print beaucoup plus lisible (
http://docs.python.o...ting-operations)
Pour donner un exemple : print("nombre de coups moyens pour",g,"parties gagnés:",c/g)deviendrais :
print("nombre de coups moyens pour %d parties gagnés: %f" % (g, c / g))
Sinon tu as peut être vu que j'ai écris "break" dans mon pseudo code, c'est un référence à ce point :
http://docs.python.o...tmts.html#breakAprès si ça t'intéresse, les conventions de code se trouvent ici :
http://www.python.or.../peps/pep-0008/ Sinon bon code dans l'ensemble, t'avais ce qu'il faut, juste un peu lourd car ça sent le code "je fais un truc, je test, ça marche, j'ajoute un autre truc etc"

Mais courage, ça viendra.
En espérant que mes commentaires puissent t'aider
Modifié par Anakha, 28 May 2013 - 23:38.
correction de coquilles. Putain je haie le WYSIWYG sur les forums...