Advertisement
wrichaard

TorreDeHanoi

Aug 9th, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.77 KB | None | 0 0
  1. import time
  2.  
  3. # Desenho das torres.
  4. def desenho():
  5.     for fila in torres:
  6.         for coluna in fila:
  7.             if coluna == 0:
  8.                 print("            |            ", end="")
  9.             elif coluna == 1:
  10.                 print("          ([|])          ", end="")
  11.             elif coluna == 2:
  12.                 print("         ([[|]])         ", end="")
  13.             elif coluna == 3:
  14.                 print("        ([[[|]]])        ", end="")
  15.             elif coluna == 4:
  16.                 print("       ([[[[|]]]])       ", end="")
  17.             elif coluna == 5:
  18.                 print("      ([[[[[|]]]]])      ", end="")
  19.             elif coluna == 6:
  20.                 print("     ([[[[[[|]]]]]])     ", end="")
  21.             elif coluna == 7:
  22.                 print("    ([[[[[[[|]]]]]]])    ", end="")
  23.         print()
  24.     print("="*77)
  25.     print("            1                        2                        3            ")
  26.     time.sleep(1)
  27.  
  28. # O disco acima da coluna (coluna) retorna, mas retorna 0.
  29. def buscardisco(coluna):
  30.     fila = 0
  31.     while fila <= discos and torres[fila][coluna] == 0:
  32.         fila += 1
  33.     if fila <= discos:
  34.         return torres[fila][coluna]
  35.     else:
  36.         return 0
  37.  
  38. # O espaço vazio acima da coluna (coluna) retorna.
  39. def buscarespaco(coluna):
  40.     fila = 0
  41.     while fila <= discos and torres[fila][coluna] == 0:
  42.         fila += 1
  43.     return fila - 1
  44.  
  45. # Remova o disco superior da coluna (coluna).
  46. def eliminardisco(coluna):
  47.     fila = 0
  48.     while fila <= discos and torres[fila][coluna] == 0:
  49.         fila += 1
  50.     torres[fila][coluna] = 0
  51.  
  52. # Representação gráfica.
  53. def grafico(n, origen=1, auxiliar=2, destino=3):
  54.  
  55.     if n > 0:
  56.       grafico(n-1, origen, destino, auxiliar) # n-1 discos da torre de origem para a torre auxiliar.
  57.       disco = buscardisco(origen-1)
  58.       eliminardisco(origen-1)
  59.       torres[buscarespaco(destino-1)][destino-1] = disco
  60.       print("\n"*40)
  61.       desenho()
  62.       grafico(n-1, auxiliar, origen, destino) # n-1 discos da torre auxiliar até a torre final.
  63.  
  64. # Representação do modo de texto.
  65. def textohanoi(n, origen=1, auxiliar=2, destino=3):
  66.  
  67.     if n > 0:
  68.       textohanoi(n-1, origen, destino, auxiliar) # n-1 discos da torre de origem para a torre auxiliar.
  69.       print("Move o disco %d da torre %d para a torre %d" % (n, origen, destino)) # disco n para a torre de destino.
  70.       textohanoi(n-1, auxiliar, origen, destino) # n-1 discos da torre auxiliar até a torre final.
  71.  
  72. print("="*25)
  73. print("     TORRE DE HANOI     ")
  74. print("="*25)
  75. modo = int(input("Escolha o modo:\n\n1) Modo gráfico\n2) Modo texto\n\n"))
  76.  
  77. if modo == 1:
  78.     discos = int(input("\nDigite a quantidade de discos de 1 a 7: "))
  79.  
  80.     # Definindo a matriz para o gráfico
  81.     if discos > 0 and discos < 8:
  82.         if discos == 1:
  83.             torres = [[0,0,0],[1,0,0]]
  84.         elif discos == 2:
  85.             torres = [[0,0,0],[1,0,0],[2,0,0]]
  86.         elif discos == 3:
  87.             torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0]]
  88.         elif discos == 4:
  89.             torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0]]
  90.         elif discos == 5:
  91.             torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0]]
  92.         elif discos == 6:
  93.             torres = [[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]]
  94.         elif discos == 7:
  95.             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]]
  96.  
  97.         print("\n"*40)
  98.         desenho()
  99.         grafico(discos)
  100.     else:
  101.         print("\nERROR! Somente é permitido de 1 a 7 discos.")
  102. elif modo == 2:
  103.     discos = int(input("\nDigite o número de discos: "))
  104.  
  105.     if discos > 0:
  106.         print()
  107.         textohanoi(discos)
  108.     else:
  109.         print("\nERROR! Digite o número de discos maior que 0.")
  110. else:
  111.     print("\nERROR! A opção digitada está incorreta.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement