Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- # Desenho das torres.
- def desenho():
- for fila in torres:
- for coluna in fila:
- if coluna == 0:
- print(" | ", end="")
- elif coluna == 1:
- print(" ([|]) ", end="")
- elif coluna == 2:
- print(" ([[|]]) ", end="")
- elif coluna == 3:
- print(" ([[[|]]]) ", end="")
- elif coluna == 4:
- print(" ([[[[|]]]]) ", end="")
- elif coluna == 5:
- print(" ([[[[[|]]]]]) ", end="")
- elif coluna == 6:
- print(" ([[[[[[|]]]]]]) ", end="")
- elif coluna == 7:
- print(" ([[[[[[[|]]]]]]]) ", end="")
- print()
- print("="*77)
- print(" 1 2 3 ")
- time.sleep(1)
- # O disco acima da coluna (coluna) retorna, mas retorna 0.
- def buscardisco(coluna):
- fila = 0
- while fila <= discos and torres[fila][coluna] == 0:
- fila += 1
- if fila <= discos:
- return torres[fila][coluna]
- else:
- return 0
- # O espaço vazio acima da coluna (coluna) retorna.
- def buscarespaco(coluna):
- fila = 0
- while fila <= discos and torres[fila][coluna] == 0:
- fila += 1
- return fila - 1
- # Remova o disco superior da coluna (coluna).
- def eliminardisco(coluna):
- fila = 0
- while fila <= discos and torres[fila][coluna] == 0:
- fila += 1
- torres[fila][coluna] = 0
- # Representação gráfica.
- def grafico(n, origen=1, auxiliar=2, destino=3):
- if n > 0:
- grafico(n-1, origen, destino, auxiliar) # n-1 discos da torre de origem para a torre auxiliar.
- disco = buscardisco(origen-1)
- eliminardisco(origen-1)
- torres[buscarespaco(destino-1)][destino-1] = disco
- print("\n"*40)
- desenho()
- grafico(n-1, auxiliar, origen, destino) # n-1 discos da torre auxiliar até a torre final.
- # Representação do modo de texto.
- def textohanoi(n, origen=1, auxiliar=2, destino=3):
- if n > 0:
- textohanoi(n-1, origen, destino, auxiliar) # n-1 discos da torre de origem para a torre auxiliar.
- print("Move o disco %d da torre %d para a torre %d" % (n, origen, destino)) # disco n para a torre de destino.
- textohanoi(n-1, auxiliar, origen, destino) # n-1 discos da torre auxiliar até a torre final.
- print("="*25)
- print(" TORRE DE HANOI ")
- print("="*25)
- modo = int(input("Escolha o modo:\n\n1) Modo gráfico\n2) Modo texto\n\n"))
- if modo == 1:
- discos = int(input("\nDigite a quantidade de discos de 1 a 7: "))
- # Definindo a matriz para o gráfico
- if discos > 0 and discos < 8:
- if discos == 1:
- torres = [[0,0,0],[1,0,0]]
- elif discos == 2:
- torres = [[0,0,0],[1,0,0],[2,0,0]]
- elif discos == 3:
- torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0]]
- elif discos == 4:
- torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0]]
- elif discos == 5:
- torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0]]
- elif discos == 6:
- torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]]
- elif discos == 7:
- torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],[7,0,0]]
- print("\n"*40)
- desenho()
- grafico(discos)
- else:
- print("\nERROR! Somente é permitido de 1 a 7 discos.")
- elif modo == 2:
- discos = int(input("\nDigite o número de discos: "))
- if discos > 0:
- print()
- textohanoi(discos)
- else:
- print("\nERROR! Digite o número de discos maior que 0.")
- else:
- print("\nERROR! A opção digitada está incorreta.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement