jubar35 | 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 :
- def jeu():
- cpt=0
- A,B,C,TF=[],[],[],[]
- n=nb_disque()
- for i in range(n,0,-1):
- A=A+[i]
- TF=TF+[i]
- if n!=0:
- print("\n",A,B,C)
- sortie=False
-
- while C!=TF and sortie==False:
-
- Dep=[]
- while len(Dep)==0:
- RepDep=saisie_tour("prendre un" )
- if RepDep in ["S","s"]:
- sortie=True
- break
-
-
- elif RepDep in ["A","a"]:
- Dep=A
- elif RepDep in ["B","b"]:
- Dep=B
- elif RepDep in ["C","c"]:
- Dep=C
- if len(Dep)==0:
- print("\nIl n'y a aucun disque à prendre dans cette tour!" )
- RepDep=saisie_tour("prendre un" )
-
-
- RepArr=saisie_tour("mettre le" )
- while RepArr==RepDep:
- print("\nCe déplacement est inutile, recommencez!" )
- RepArr=saisie_tour("mettre le" )
- if RepArr in ["S","s"]:
- sortie=True
- break
-
- elif RepArr in ["A","a"]:
- Arr=A
- elif RepArr in ["B","b"]:
- Arr=B
- elif RepArr in ["C","c"]:
- Arr=C
- if len(Arr)!=0:
- dArr=dernier_disque(Arr)
- else :
- dArr=n+1
- dDep=dernier_disque(Dep)
-
- if dDep>dArr:
- print("\nCe déplacement n'est pas possible! Le disque est trop grand!" )
- else :
- Arr.append(Dep.pop())
- cpt=cpt+1
- print("\nDéplacement du disque ",dDep," sur la tour ",RepArr.upper())
- print(A,B,C)
- if C==TF:
- print("\nBravo, vous avez gagné!!!" )
-
- if sortie==True:
- print("\nVous avez quitté le jeu !" )
|
|