Se connecter

Informatique

Programmation

Sujet : problème compteur en python
1
Verziok
Niveau 5
01 décembre 2021 à 19:14:51

Bonjour, j'ai un soucis que je n'arrive pas à résoudre, j'ai crée en python un programme ayant pour but de résoudre le casse-tête des tour de hanoi avec des animation via turtle, je l'ai fini et il est fonctionnel mais j'aimerai y rajouter un compteur qui compte chaque coup effectué mais je n'y arrive pas.

Voila le programme :

import turtle
import time

fond = turtle.Screen()
fond.setup(800,600)
fond.title('Tower of Hanoi')
fond.bgpic('fond_blanc_gif.gif')
fond.tracer(0)

def hanoi(n,debut,inter,fin):
if n == 0:
pass
else:
hanoi(n-1,debut,fin,inter)
déplacement(debut,fin)
hanoi(n-1,inter,debut,fin)

class Inter_graphique(turtle.Turtle):
def __init__(self, xpos):
super().__init__(shape='square')
self.xpos = xpos
self.up()
self.color('grey')
self.shapesize(10,1)
self.goto(self.xpos,-100)
self.count = 0
self.pos_list = [-180, -160, -140, -120, -100]
self.disques = []

class Disque(turtle.Turtle):
def __init__(self, xpos, ypos, size, color):
super().__init__(shape='square')
self.xpos = xpos
self.ypos = ypos
self.size = size
self.color(color)
self.up()
self.shapesize(1,self.size)
self.goto(self.xpos,self.ypos)

def déplacement_Disque(Disque, Inter_graphique):
while Disque.ycor()<100:
Disque.goto(Disque.xcor(),Disque.ycor()+5)
fond.update()
Disque.goto(Inter_graphique.xcor(),100)
fond.update()
while Disque.ycor()>Inter_graphique.pos_list[Inter_graphique.count]:
Disque.goto(Disque.xcor(),Disque.ycor()-5)
fond.update()
time.sleep(0.5)

def déplacement(debut,fin):
print('on déplace le dique de ',debut,' à ',fin,'!')
if debut == 'Tour 1':
disque_haut = tour1.disques[-1]
start_Inter_graphique = tour1
elif debut == 'Tour 2':
disque_haut = tour2.disques[-1]
start_Inter_graphique = tour2
elif debut == 'Tour 3':
disque_haut = tour3.disques[-1]
start_Inter_graphique = tour3

if fin == 'Tour 1':
Inter_graphique = tour1
elif fin == 'Tour 2':
Inter_graphique = tour2
elif fin == 'Tour 3':
Inter_graphique = tour3

déplacement_Disque(disque_haut,Inter_graphique)
start_Inter_graphique.count-=1
start_Inter_graphique.disques.pop()
Inter_graphique.count+=1
Inter_graphique.disques.append(disque_haut)

tour1 = Inter_graphique(-200)
tour2 = Inter_graphique(0)
tour3 = Inter_graphique(200)

disque1 = Disque(-200, -180, 10, 'orange')
disque2 = Disque(-200, -160, 8, 'blue')
disque3 = Disque(-200, -140, 6, 'red')
disque4 = Disque(-200, -120, 4, 'purple')
disque5 = Disque(-200, -100, 2, 'green')

tour1.count=5
tour1.disques = [disque1,disque2,disque3,disque4,disque5]

hanoi(3, 'Tour 1', 'Tour 2', 'Tour 3')

godrik
Niveau 22
01 décembre 2021 à 20:07:59

utilise la balise code.
Sans ca, c'est difficile a lire.

Elilalilolulu
Niveau 8
02 décembre 2021 à 00:03:07

python sans indentation :hap:

Jacana
Niveau 10
02 décembre 2021 à 02:52:04

À chaque fois que tu fais un déplacement tu incrémentes ton compteur, je vois pas où est la difficulté. Qu'est ce que tu veux faire précisément ?

Golem2Fer
Niveau 6
02 décembre 2021 à 15:42:34

Le 02 décembre 2021 à 00:03:07 Elilalilolulu a écrit :
python sans indentation :hap:

l'indentation est optionnelle en python :ok:

comme les points-virgules en C++

int a = 0 int b = 5 int c = a + b struct Void
{ int m_entier } int z = 0
Cofi-Lake
Niveau 32
02 décembre 2021 à 16:17:06

Le 02 décembre 2021 à 15:54:18 :

Le 02 décembre 2021 à 15:42:34 :

Le 02 décembre 2021 à 00:03:07 Elilalilolulu a écrit :
python sans indentation :hap:

l'indentation est optionnelle en python :ok:

comme les points-virgules en C++

int a = 0 int b = 5 int c = a + b struct Void
{ int m_entier } int z = 0

Euhh t’es sur de ça ?
Pour moi l’indentation en Python est obligatoire pour délimiter les structures de codes

Il troll :hap:

cybevil
Niveau 17
02 décembre 2021 à 17:07:03

Le 02 décembre 2021 à 16:17:06 :

Le 02 décembre 2021 à 15:54:18 :

Le 02 décembre 2021 à 15:42:34 :

Le 02 décembre 2021 à 00:03:07 Elilalilolulu a écrit :
python sans indentation :hap:

l'indentation est optionnelle en python :ok:

comme les points-virgules en C++

int a = 0 int b = 5 int c = a + b struct Void
{ int m_entier } int z = 0

Euhh t’es sur de ça ?
Pour moi l’indentation en Python est obligatoire pour délimiter les structures de codes

Il troll :hap:

Ah :hap: J’aurais dû tilter quand il a parlé du C++ :hap:

1
Sujet : problème compteur en python
   Retour haut de page
Consulter la version web de cette page