Código fuente para magia

import os
import time

from cartas import Mazo, Carta

[documentos]def _explicar(texto): """ Limpiar la pantalla y mostrar in texto recuadrado. Args: texto (str): Texto a mostrar en pantalla. Examples: :: ----------------------------------------------------- Esto es un texto recuadrado ----------------------------------------------------- """ os.system('cls' if os.name == 'nt' else 'clear') print("-----------------------------------------------------") print(texto) print("-----------------------------------------------------")
[documentos]def _mostrar_pilas(pilas): """ Imprimir cuarto pilas (mazos) en columnas. Args: pilas (magia.cartas.Mazo): Mazos a mostrar en pantalla. """ # obtener cantidad máxima de lineas a imprimir lineas = max(pilas[0].cant_cartas(), pilas[1].cant_cartas(), pilas[2].cant_cartas()) print("{:<14} {:<14} {:<14}".format("Pila 1", "Pila 2", "Pila 3")) for i in range(lineas): cartas = [] # cartas a imprimir en esta línea for pila in pilas: try: cartas.append(str(pila.cartas[i])) except IndexError: cartas.append("") print("{:<14} {:<14} {:<14}".format(cartas[0], cartas[1], cartas[2]))
[documentos]def truco_de_magia(): """ Hace un truco de magia usando las cartas. """ # mazo con todas las cartas mazo_completo = Mazo() mazo_completo.generar("español", 48) explicar("Conseguí un mazo") print(mazo_completo) # cartas usadas en el truco, son 20 mazo = Mazo() # crear 3 pilas en donde se ponen las cartas pilas = [] for _ in range(3): pilas.append(Mazo()) # mezclar mazo mazo_completo.mezclar() explicar("Mezclé el mazo") print(mazo_completo) # tomar 21 cartas del mazo y ponerlas en la mano for i in range(21): mazo.poner(mazo_completo.tomar()) explicar("Tomé 21 cartas del mazo, a las demás las descarté\n" "Pensá en una carta, cuando estés listo apretá Enter") print(mazo) input() # truco de magia en sí for _ in range(3): # poner las cartas del mazo en las pilas ordenadamente p = 0 # pila en donde poner la siguiente carta for i in range(21): pilas[p].poner(mazo.tomar()) if p < 2: p += 1 else: p = 0 explicar("Estoy poniendo las cartas en pilas") mostrar_pilas(pilas) time.sleep(0.1) explicar("Terminé de poner las cartas en pilas\n" "Decime en qué pila está tu carta, ingresa 1, 2 o 3") mostrar_pilas(pilas) pila_elegida = int(input()) - 1 # poner las cartas en el mazo nuevamente, la pila elegida debe ir al # medio orden_pilas = [0, 1, 2] # orden en el cual poner las pilas en el mazo orden_pilas.remove(pila_elegida) # sacar el número de la pila elegida orden_pilas.insert(1, pila_elegida) # ponerlo en el segundo lugar for i in orden_pilas: mazo.poner(pilas[i]) # obtener la carta pensada tomando la carta número 11 for _ in range(10): mazo.tomar() carta_mágica = mazo.tomar() explicar("La carta que pensaste es:") print(carta_mágica) print( " *\n" " * *\n" " * \* / *\n" " * --.:. *\n" " * * :\ -\n" " .* | \\\n" " * * \\\n" " . * \\\n" " .. /\\.\n" " * |\\)|\n" " . * \ |\n" " . . * |/\\\n" " .* * / \\\n" " * \\ / \\\n" " * . * \\ \\\n" " * . \n" " * * \n" " . * * \n" )