Problème de sortie d'une boucle while en PYTHON

Problème de sortie d'une boucle while en PYTHON - Python - Programmation

Marsh Posté le 17-04-2015 à 11:31:23    

Bonjour,  
Etant étudiante en Mathématiques Appliquées, je dois réaliser un travail  
sur la programmation du jeu des Tours de Hanoï en Python.  
 
___Rappel du jeu des Tours de Hanoï___  
Le casse-tête est constitué de trois tours où la tour de gauche est remplie de tous les disques classés par ordre de décroissants. Cette tour est la tour de départ. Le but est de replacer, dans le même ordre, tous ces disques sur la tour de gauche, dite la tour d'arrivée tout en respectant les règles qui suivent :  
 
1) Il faut déplacer qu'un seul disque à la fois.  
2) Il ne faut pas placer un disque plus large au dessus d'un plus petit.  
______________________________________________________  
 
 
J'ai donc fait mon code, qui tourne tant que la tour d'arrivé n'est pas remplie.  
De plus, je voudrais que l'utilisateur puisse sortir du jeu à tout moment,  
donc j'ai rajouter une condition "et tant que sortie==False".  
Seulement, la deuxième condition ne marche pas, je n'arrives pas à sortir de la boucle while...  
 
Je pense que le problème est dû au fait que j'ai deux boucle while imbriquées l'une dans l'autre, mais je ne voit pas comment faire autrement...  
 
Si quelqu'un aurait une idée, elle serait la bienvenue.  
Merci d'avance.  
 
___Fonction utilisées dans le code___  
 
saisie_verifiee : saisie d'un nombre.  
 
choix_menu : l'utilisateur choisi le mode jeu, le mode démo ou quitter. Ici, l'utilisateur a choisi le mode jeu.  
 
nb_disque : saisie du nombre de disque pour jouer.  
 
saisie_tour : saisie de la tour que le choisie pour prendre un disque, ou pour mettre un disque  
 
dernier_disque : retourne la taille du dernier disque d'une tour  
_______________________________________________________  
 
 

Code :
  1. def jeu():
  2.    cpt=0
  3.    A,B,C,TF=[],[],[],[]
  4.    n=nb_disque()
  5.    for i in range(n,0,-1):
  6.       A=A+[i]
  7.       TF=TF+[i]
  8.    if n!=0:
  9.       print("\n",A,B,C)
  10.    sortie=False
  11.  
  12.    while C!=TF and sortie==False:
  13.      
  14.       Dep=[]
  15.       while len(Dep)==0:
  16.          RepDep=saisie_tour("prendre un" )
  17.          if RepDep in ["S","s"]:
  18.             sortie=True
  19.             break
  20.    
  21.        
  22.          elif RepDep in ["A","a"]:
  23.             Dep=A
  24.          elif RepDep in ["B","b"]:
  25.             Dep=B
  26.          elif RepDep in ["C","c"]:
  27.             Dep=C
  28.          if len(Dep)==0:
  29.             print("\nIl n'y a aucun disque à prendre dans cette tour!" )
  30.             RepDep=saisie_tour("prendre un" )
  31.        
  32.  
  33.       RepArr=saisie_tour("mettre le" )
  34.       while RepArr==RepDep:
  35.          print("\nCe déplacement est inutile, recommencez!" )
  36.          RepArr=saisie_tour("mettre le" )
  37.       if RepArr in ["S","s"]:
  38.          sortie=True
  39.          break
  40.    
  41.       elif RepArr in ["A","a"]:
  42.           Arr=A
  43.       elif RepArr in ["B","b"]:
  44.          Arr=B
  45.       elif RepArr in ["C","c"]:
  46.          Arr=C
  47.       if len(Arr)!=0:
  48.          dArr=dernier_disque(Arr)
  49.       else :
  50.          dArr=n+1
  51.       dDep=dernier_disque(Dep)
  52.  
  53.       if dDep>dArr:
  54.          print("\nCe déplacement n'est pas possible! Le disque est trop grand!" )
  55.       else :
  56.          Arr.append(Dep.pop())
  57.          cpt=cpt+1
  58.          print("\nDéplacement du disque ",dDep," sur la tour ",RepArr.upper())
  59.          print(A,B,C)
  60.    if C==TF:
  61.       print("\nBravo, vous avez gagné!!!" )
  62.    
  63.    if sortie==True:
  64.       print("\nVous avez quitté le jeu !" )

Reply

Marsh Posté le 17-04-2015 à 11:31:23   

Reply

Marsh Posté le 22-04-2015 à 12:33:00    

Ton break ligne 2  fait sortie de la boucle ligne 16 mais pas de la boucle de plus haut niveau...
 
Quand l'utilisateur saisit "s" ou "S", tu pourrais simplement faire un return pour sortir totalement de la fonction ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed