# Juego: Kenny's Adventure
# Descripción: Un juego de supervivencia en un apocalipsis zombie.
# Instrucciones: El jugador toma decisiones para guiar al personaje principal a través de la historia y sobrevivir.
# Autor: Frannex
# Fecha: 26/5/2023 (ULTIMA MODIFICACIÓN)
#Version: ALPHA 1.0
#Primer proyecto de programacòn

import os #Biblioteca para borrar
import time #Biblioteca para el tiempo

#función que muestra mensajes
def mostrar_mensaje(mensaje):
    for letra in mensaje:
        print(letra, end='', flush=True)
        time.sleep(0.05)
    print()

#Funcion que muestra los riesgos que tomas
def posibilidad_supervivencia(posibilidad):
    for letra in posibilidad:
        print(letra, end='', flush=True)
        time.sleep(0.05)
    print()

#Funcion que muestra la abundancia o escacez que hay de un producto
def abundancia_objeto(abundancia):
    for letra in abundancia:
        print(letra, end='', flush=True)
        time.sleep(0.05)
    print()

#funcion para mostrar el aviso
def mostrar_aviso(aviso):
    for letra in aviso:
        print(letra, end='', flush=True)
        time.sleep(0.05)
    print()

# Función para limpiar la pantalla
def limpiar_pantalla():
    if os.name == 'nt':  # Para sistemas Windows
        os.system('cls') #cls comando para borrar pantalla

#Personajes
protagonista_nombre = "Kenny"
superviviente_nombreMisterioso= "Superviviente"
superviviente_nombre = "Carver"
superviviente_nombreMisterioso1= "Desconocido"
superviviente_nombre1 = "Lee"

#Conversacion entre personajes
def conversacion_personajes(conver):
    for letra in conver:
        print(letra, end='', flush=True)
        time.sleep(0.05)
    print()

# Llamada a la función para limpiar la pantalla
limpiar_pantalla()

#funcion de repetir si no elige correctamente
def pedir_opcion(opciones):
    while True: #Bucle
        eleccion = input() #Digitar
        if eleccion in opciones:
            return eleccion
        else:
            mostrar_mensaje("¡OPCIÓN INCORRECTA!")
            mostrar_mensaje("Elige entre " + ", ".join(opciones))

#Funcion de procesar mensaje (Efecto realista)
def mensaje_procesando():
    mostrar_mensaje("Procesando....")

#Funcion de
def mostrar_dialogo(texto):
    for letra in texto:
        print(letra, end='', flush=True)  # Imprime la letra sin saltar de línea
        time.sleep(0.05)  # Controla la velocidad de aparición de las letras
    print()  # Salta de línea después de imprimir el texto completo

#Funcion de aviso de juego (Te dice de que se trata el juego)
def aviso_juego():
    limpiar_pantalla()
    mostrar_aviso("Antes de empezar tu aventura....")
    mostrar_aviso("Tienes que saber que este juego trata de tomar decisiones.")
    mostrar_aviso("Abajo de las decisiones que haya tendras un porcentaje de posibilidad de sobrevivir.")
    mostrar_aviso("Mientras más alto sea el porcentaje, más posibilidades de sobrevivir vas a tener.")
    mostrar_aviso("Pero cuidado! En algunas opciones el porcentaje de sobrevivir es bajo pero tienes alta posibilidad de recompensa.")
    mostrar_aviso("Así que piensa bien la decisión antes de tomarla, ya que te podes beneficiar.")
    mostrar_aviso("Las acciones que tomes cambiarán el transcurso de la historia.")
    mostrar_aviso("Piensa bien lo que vas a hacer....")
    limpiar_pantalla()

#funcion con la cual empieza la historia
def introduccion():
    mostrar_mensaje("Bienvenidos a Kenny's Adventure.")
    mostrar_mensaje("Es el año 2022.")
    mostrar_mensaje("Es el fin del mundo.")
    mostrar_mensaje("Hace 4 meses empezó el apocalipsis zombie.")
    mostrar_mensaje("Eres Kenny, un joven de 17 años cuyos padres fueron devorados por los zombies.")
    mostrar_mensaje("Estás vagando en un antiguo pueblo abandonado.")
    mostrar_mensaje("Tu objetivo es sobrevivir la primera noche.")
    mostrar_mensaje("Encuentras una casa abandonada.")
    limpiar_pantalla()

#funcion si eliges la primera opción (1)
def opcion_1():
    mostrar_mensaje("Has decidido entrar en la casa.")
    mostrar_mensaje("Escuchas unos ruidos que provienen del segundo piso.")
    mostrar_mensaje("¿Qué haces?.")
    limpiar_pantalla()
    mostrar_mensaje("1. Sales corriendo de la casa.")
    posibilidad_supervivencia("Posibilidad de sobrevivir: 50%.")
    mostrar_mensaje("2. Sales sigilosamente de la casa.")
    posibilidad_supervivencia("Posibilidad de sobrevivir: 20%.")
    mostrar_mensaje("3. Decides ir a investigar qué pasa.")
    posibilidad_supervivencia("Posibilidad de sobrevivir: 35%. Pero alta posibilidad de recibir recompensa.")
    eleccion2 = pedir_opcion(["1", "2", "3"])
    limpiar_pantalla()
    #salir corriendo de la casa
    if eleccion2 == "1":
        mostrar_mensaje("Decides salir corriendo de la casa.")
        mostrar_mensaje("Al salir corriendo haces mucho ruido y algo parece haberte escuchado.")
        mostrar_mensaje("Mientras estás corriendo, decides mirar hacia atrás.")
        mostrar_mensaje("¡ES UN ZOMBIE QUE ESTÁ A PUNTO DE COMERTE!.")
        mostrar_mensaje("¿QUÉ HACES?.")
        limpiar_pantalla()
        mostrar_mensaje("1. SACAS EL CUCHILLO DE TU CINTURA.")
        mostrar_mensaje("2. SIGUES CORRIENDO.")
        eleccion3 = pedir_opcion(["1", "2"])
        limpiar_pantalla()
        #sacar cuchillo
        if eleccion3 == "1":
            mostrar_mensaje("ELEGISTE SACAR EL CUCHILLO DE TU CINTURA.")
            mostrar_mensaje("LO ACUCHILLAS AL ZOMBIE PERO NO ES SUFICIENTE.")
            mostrar_mensaje("¿¿¿¿QUÉ VAS A HACER?????.")
            limpiar_pantalla()
            mostrar_mensaje("1. Te rindes.")
            posibilidad_supervivencia("Posibilidad de sobrevivir: 1%.")
            mostrar_mensaje("2. Lo acuchillas de nuevo.")
            posibilidad_supervivencia("Posibilidad de sobrevivir: 65%.")
            eleccion4 = pedir_opcion(["1", "2"])
            limpiar_pantalla()
            #rendición del personaje(muerte)
            if eleccion4 == "1":
                mostrar_mensaje("Decides que no vale la pena seguir luchando.")
                mostrar_mensaje("¡HAS MUERTO!.")
                manejar_partida(True)
                return
            #intentar acuchillar devueltar al zombie (sobrevivis)
            elif eleccion4 == "2":
                mostrar_mensaje("DECIDIS DAR TU ÚLTIMO INTENTO.")
                mostrar_mensaje("LOGRAS ACABAR CON EL ZOMBIE.")
                mostrar_mensaje("HAS LOGRADO SOBREVIVIR, FELICITACIONES!.")
                limpiar_pantalla()
                mostrar_mensaje("Luego de haber sobrevivido milagrosamente al ataque del zombie decides alejarte del pueblo por las dudas y te diriges al bosque.")
                mostrar_mensaje("Ya en el bosque casi siendo el atardecer empezas a plantearte donde podes quedarte a la noche.")
                mostrar_mensaje("Pensando en tu proximo plan a lo mejos milagrosamente ves un arbol de manzana.")
                mostrar_mensaje("Decides comer un par de manzanas para regenerar tu energia, ya que has pasado muchos dias sin comer.")
                mostrar_mensaje("Ya es de noche y llegas a una especie de granja abandonada.")
                mostrar_mensaje("¿Que haces?.")
                limpiar_pantalla()
                mostrar_mensaje("1. Seguir caminando")
                posibilidad_supervivencia("Posibilidad de sobrevivir: 35%.")
                mostrar_mensaje("2. Te refugias en la granja abandonada")
                posibilidad_supervivencia("Posibilidad de sobrevivir: 45%.")
                eleccion6 = pedir_opcion(["1", "2"])
                limpiar_pantalla()
                #seguir caminando
                if eleccion6 == "1":
                    mostrar_mensaje("Has elegido seguir caminando.")
                    mostrar_mensaje("Esta todo oscuro así que decides ver en tu mochila si tenes algo.")
                    mostrar_mensaje("¿Que vas a agarrar?.")
                    limpiar_pantalla()
                    mostrar_mensaje("1. Encendedor con poco gas.")
                    abundancia_objeto("El encendedor esta muy usado. Alta posibilidad de que se quede sin gas.")
                    mostrar_mensaje("2. 3 Fosforos.")
                    abundancia_objeto("Escacez de fosforos. Alta posibilidad de quedarse sin fosforos.")
                    mostrar_mensaje("3. Linterna casi sin pilas.")
                    abundancia_objeto("Escacez de pila para la lintera. Alta posibilidad que te quedes sin linterna.")
                    eleccion7 = pedir_opcion(["1", "2","3"])
                    limpiar_pantalla()
                    #usar encendedor
                    if eleccion7 == "1":
                        mostrar_mensaje("Has elegido usar el encencedor.")
                        mostrar_mensaje("Tu campo de visión es medio pero algo es algo.")
                        mostrar_mensaje("Sigues caminando hasta que a 4 metros de tu derecha ves lo que parece ser una llanta.")
                        mostrar_mensaje("Siguiendo ves una silueta de lo que parece ser un auto medio chocado en la cuneta.")
                        mostrar_mensaje("¿Que haces?.")
                        mostrar_mensaje("1. Te acercas a la silueta.")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 33%. Alta posibilidad de recompensa")
                        mostrar_mensaje("2. Te alejas.")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 67%.")
                        eleccion8 = pedir_opcion(["1", "2"])
                        limpiar_pantalla()
                        #acercarte
                        if eleccion8 == "1":
                            mostrar_mensaje("Has elegido acercarte a la silueta del auto.")
                            mostrar_mensaje("¿Antes de acercarte que haces?.")
                            mostrar_mensaje("1. Sacar el cuchillo")
                            mostrar_mensaje("2. No sacar el cuchillo")
                            eleccion9 = pedir_opcion(["1", "2"])
                            limpiar_pantalla()
                            #sacar cuchillo
                            if eleccion9=="1":
                                mostrar_mensaje("Has elegido sacar el cuchillo por las dudas.")
                                mostrar_mensaje("Te acercas y...........")
                                mostrar_mensaje("No hay peligro. Gracias a Dios!")
                                mostrar_mensaje("Empiezas a revisarr el auto y...")
                                mostrar_mensaje("Haz encontrado un rifle con mira!.")
                                mostrar_mensaje("Ahora podras cazar y defenderte.")
                                mostrar_mensaje("Lo malo es que tiene una bala. ")
                                mostrar_mensaje("¿Que vas a hacer?.")
                                limpiar_pantalla()
                                mostrar_mensaje("1. Seguir buscando.")
                                mostrar_mensaje("2. Retirarse.")
                                eleccion10 = pedir_opcion(["1", "2"])
                                limpiar_pantalla()
                                if eleccion10=="1":
                                    mostrar_mensaje("Has elegido seguir buscando")
                                    mostrar_mensaje("Al principio no encuentras nada pero...")
                                    mostrar_mensaje("Has encontrado una especie de bolso.")
                                    mostrar_mensaje("Al revisarlo has encontrado 8 balas del rifle y además una lata de arveja.")
                                    mostrar_mensaje("Ahora tenes que tomar una decisión.")
                                    limpiar_pantalla()
                                    mostrar_mensaje("1. Pasar la noche en el auto")
                                    posibilidad_supervivencia("Posibilidad de sobrevivir: 25.4%.")
                                    mostrar_mensaje("2. Seguir caminando en plena noche")
                                    posibilidad_supervivencia("Posibilidad de sobrevivir: 16.3%.")
                                    eleccion11 = pedir_opcion(["1", "2"])
                                    limpiar_pantalla()
                                    #sobrevivis la noche
                                    if eleccion11:
                                        mostrar_mensaje("Has decidido pasar la noche en el auto.")
                                        mostrar_mensaje("Sin duda muy arriesgado.")
                                        mostrar_mensaje("Cierras los ojos y rezas aparecer vivo al día siguiente.")
                                        mostrar_mensaje("A la media hora de haberte dormido unos ruidos te despiertan.")
                                        mostrar_mensaje("Al mirar por la ventana del auto tu sangre se congela.")
                                        mostrar_mensaje("Debido a que era una horda de zombies enfrente tuya.")
                                        mostrar_mensaje("Entonces decides tirarte en el suelo del auto y taparte con una especie de manta.")
                                        mostrar_mensaje("Empiezas a rezar que no te encuentren.")
                                        mostrar_mensaje("Pero por suerte del destino no se percataron de vos.")
                                        mostrar_mensaje("Felicidades! Has pasado la noche.")
                                        manejar_partida(True)
                                        return
                                    #moris debido a la horda y te quedas sin encendedor
                                    if eleccion11:
                                        mostrar_mensaje("Decides seguir caminando en plena noche.")
                                        mostrar_mensaje("Al pasar media hora tu encendedor se queda sin gas y estas en la completa oscuridad.")
                                        mostrar_mensaje("Empiezas a escuchar muchos sonidos raros.")
                                        mostrar_mensaje("Resulta ser una horda de zombies!.")
                                        mostrar_mensaje("Al estar en completa oscuridad no puedes saber donde estan.")
                                        mostrar_mensaje("Pero en un momento inesperado sientes que unos dientes se clavan en tu cuello.")
                                        mostrar_mensaje("Es un zombie que te esta devorando.")
                                        mostrar_mensaje("¡Has muerto!.")
                                        manejar_partida(True)
                                        return
                            #morir debido a la horda pero con el encendeor
                            if eleccion10=="2":
                                mostrar_mensaje("Has elegido alejarte de la silueta del auto.")
                                mostrar_mensaje("Al pasar 25 minutos empiezas a escuchar sonidos raros.")
                                mostrar_mensaje("Cuando visualizas con el poco gas que le quedaba a tu encendedor te das cuenta que es una manada de zombies.")
                                mostrar_mensaje("Te congelas del miedo.")
                                mostrar_mensaje("Pero cuando por fin reaccionas, los zombies te atacan.")
                                mostrar_mensaje("¡Has muerto!.")
                                manejar_partida(True)
                                return
                    #usar encendedor
                    if eleccion7 == "1":
                        mostrar_mensaje("Has elegido usar los fosforos.")
                        mostrar_mensaje("Tu campo de visión es muy bajo.")
                        mostrar_mensaje("Por lo que seguis caminando por la ruta sin ver a los costados.")
                        mostrar_mensaje("Durante 15 minutos caminas hasta que te cansas y decides reintregarte al bosque.")
                        mostrar_mensaje("Justo cuando entras al bosque a lo lejos escuchas lo que parece ser una horda de zombies.")
                        mostrar_mensaje("Menos mal que decidiste integrarte al bosque.")
                        mostrar_mensaje("Si hubieses seguido por la ruta, hubieses muerto.")
                        limpiar_pantalla()
                        mostrar_mensaje("Caminas por el bosque durante un buen rato.")
                        mostrar_mensaje("Sin dudas caminar por el bosque sin luz no es lo mejor.")
                        mostrar_mensaje("Tomas una decisión.")
                        limpiar_pantalla()
                        mostrar_mensaje("1. Subirte arriba de un arbol y pasar la noche allí.")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 5.4%.")
                        mostrar_mensaje("2. Seguir caminando en plena noche")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 0.3%.")
                        eleccion12 = pedir_opcion(["1", "2"])
                        limpiar_pantalla()
                        #pasar noche en el arbol (sobrevivis)
                        if eleccion12=="1":
                            mostrar_mensaje("Has elegido pasar la noche arriba de un arbol.")
                            mostrar_mensaje("No es demasiado comodo pero por lo menos podes dormir.")
                            mostrar_mensaje("Decides dormir.")
                            mostrar_mensaje("Despiertas al dia siguiente.")
                            mostrar_mensaje("Has sobrevivido la noche!.")
                            manejar_partida(True)
                            return

                        #seguir caminando por el bosque (muerte 100% asegurada)
                        elif eleccion12=="2":
                            mostrar_mensaje("Has decidido seguir caminando por el bosque.")
                            mostrar_mensaje("Durante media hora caminas sin rumbo y en plena oscuridad.")
                            mostrar_mensaje("Cuando....")
                            mostrar_mensaje("Sin querer y debido a la oscuridad te atrapa una trampa para osos en el pie.")
                            mostrar_mensaje("Empiezas a gritar debido al gran dolor que estas sintiendo.")
                            mostrar_mensaje("Intentas librarte pero no puedes, ya que no ves nada.")
                            mostrar_mensaje("Tu grito atraen la atención de un par de zombies que rondaban en el bosque.")
                            mostrar_mensaje("Tienes 2 opciones.")
                            limpiar_pantalla()
                            mostrar_mensaje("1. Clavarte tu cuchillo en la garganta para no ser devorado brutalmente por los zombies.")
                            posibilidad_supervivencia("Posibilidad de sobrevivir: 0%.") #Te suicidas
                            mostrar_mensaje("2. Intentar liberarte de la trampa")
                            posibilidad_supervivencia("Posibilidad de sobrevivir: 0.4%.") #Te devoran
                            eleccion13 = pedir_opcion(["1", "2"])
                            limpiar_pantalla()
                            #suicidio
                            if eleccion13=="1":
                                mostrar_mensaje("Has decidido clavarte tu cuchillo en la garganta.")
                                mostrar_mensaje("Lo haces, ya que no queres morir en agonia.")
                                mostrar_mensaje("¡Te has suicidado!")
                                manejar_partida(True)
                                return
                            #masacrado
                            elif eleccion13=="2":
                                mostrar_mensaje("Decides seguir intentando luchar por tu vida.")
                                mostrar_mensaje("Pero es imposible, no lográs liberarte.")
                                mostrar_mensaje("Los zombie te masacran brutalmente.")
                                mostrar_mensaje("¡Has sido devorado!.")
                                manejar_partida(True)
                                return
                    #Usas la linterna
                    if eleccion7 == "3":
                        mostrar_mensaje("Has elegido usar la linterna.")
                        mostrar_mensaje("Tu campo de visión es alto, pero recuerda, tienes poca bateria.")
                        mostrar_mensaje("Usala bien.")
                        mostrar_mensaje("Empiezas a caminar por la ruta con tu linterna de largo alcance.")
                        mostrar_mensaje("Luego de caminar por un rato, notás que a tu izquierda a lo lejos hay un tipo de galpon.")
                        mostrar_mensaje("Vas a tener que tomar una decisión.")
                        limpiar_pantalla()
                        mostrar_mensaje("1. Investigar el galpon")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 27%.")
                        mostrar_mensaje("2. Seguir tu camino")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 34%.")
                        eleccion14 = pedir_opcion(["1", "2"])
                        limpiar_pantalla()
                        #Investigar el galpon
                        if eleccion14=="1":
                            mostrar_mensaje("Has elegido investigar el galpon.")
                            mostrar_mensaje("Parece estar abandonado pero quien sabe, puede haber alguien dentro.")
                            mostrar_mensaje("Sacas tu cuchillo, te armas de valor y decides entrar.")
                            mostrar_mensaje("Al entrar no hay nada.")
                            mostrar_mensaje("Entonces, decidis investigar con la poca bateria que le queda en tu linterna.")
                            mostrar_mensaje("Felicidades! Has encontrado un machete, parece estar muy filoso.")
                            mostrar_mensaje("¿Cuál es tu siguiente paso?.")
                            limpiar_pantalla()
                            mostrar_mensaje("1. Quedarse en el galpon")
                            posibilidad_supervivencia("Posibilidad de sobrevivir: 26%.")
                            mostrar_mensaje("2. Seguir tu camino")
                            posibilidad_supervivencia("Posibilidad de sobrevivir: 16.4%.")
                            eleccion15 = pedir_opcion(["1", "2"])
                            limpiar_pantalla()
                            if eleccion15=="1":
                                mostrar_mensaje("Has decidido pasar la noche en el galpón.")
                                mostrar_mensaje("Te duermes.")
                                mostrar_mensaje("Es la madrugada cuando un ruido te despierta.")
                                mostrar_mensaje("Te levantas y ves a una persona desconocida apuntandote con un arma.")
                                conversacion_personajes(f"{superviviente_nombreMisterioso}: NO MUEVAS UN SOLO PELO.")
                                conversacion_personajes(f"{superviviente_nombreMisterioso}: ¿QUE CARAJO ESTÁS HACIENDO?.")
                                conversacion_personajes(f"{protagonista_nombre}: Ey, ey, tranquilo!")
                                conversacion_personajes(f"{superviviente_nombreMisterioso}: ¿Eres uno de esos putos bandidos verdad?")
                                mostrar_mensaje("De que manera entablas conversación con el superviviente?.")
                                mostrar_mensaje("1. De forma calmada.")
                                mostrar_mensaje("2. De forma agresiva.")
                                eleccion19 = pedir_opcion(["1", "2"])
                                limpiar_pantalla()
                                #hablar de forma tranquila
                                if eleccion19=="1":
                                    conversacion_personajes(f"{protagonista_nombre}: Escucha amigo, disculpame!.")
                                    conversacion_personajes(f"{protagonista_nombre}: Porfavor, no dispares.")
                                    conversacion_personajes(f"{protagonista_nombre}: No sabia que este galpón estas abandonado.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: ¿TE PENSAS QUE SOY IDIOTA?.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: VIENES A ROBARME.")
                                    conversacion_personajes(f"{protagonista_nombre}: Hablemos, porfavor.")
                                    conversacion_personajes(f"{protagonista_nombre}: Mi nombre es Kenny, ¿Cual es el tuyo?.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: ....")
                                    conversacion_personajes(f"{protagonista_nombre}: Porfavor, no dispares, tranquilizate.")
                                    conversacion_personajes(f"{protagonista_nombre}: No quiero morir.")
                                    mostrar_mensaje("El superviviente baja el arma.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: ¿Seguro que no eres un bandido?")
                                    conversacion_personajes(f"{protagonista_nombre}: Te lo juro.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Disculpame chico.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: La semana pasada una banda de bandidos vino a este refugio.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Y me intentaron robar las cosas.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Claro, no lo lograron.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Ya que asesine a uno de esos hijos de puta.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Y los otros salieron corrieron.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Mi nombre es Carver, un placer conocerte.")
                                    conversacion_personajes(f"{protagonista_nombre}: Un placer conocerlo Carver.")
                                    conversacion_personajes(f"{protagonista_nombre}: Si no es mucha molestia, podria pasar la primera noche aquí.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: .....")
                                    conversacion_personajes(f"{protagonista_nombre}: Porfavor, solo esta noche, a la mañana siguiente me retirare.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: Más te vale no intentar nada.")
                                    conversacion_personajes(f"{protagonista_nombre}: Muchisimas gracias señor.")
                                    mostrar_mensaje("Has pasado la noche en el galpón")
                                    mostrar_mensaje("Has sobrevivido la primera noche")
                                    manejar_partida(True)
                                    return
                                #hablar de forma agresiva
                                elif eleccion19=="1":
                                    conversacion_personajes(f"{protagonista_nombre}: Baja la puta arma ahora!.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: ¿¡TE CREES QUE ESTOY BROMEANDO IMBECIL?!.")
                                    conversacion_personajes(f"{protagonista_nombre}: No tenes los suficientes huevos.")
                                    conversacion_personajes(f"{protagonista_nombre}: He conocido asesinos, vos no tenes pinta de ser uno de esos.")
                                    mostrar_mensaje("Procedes a levantarte.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: QUIETO IMBECIL! O VOY A DISPARAR?")
                                    conversacion_personajes(f"{protagonista_nombre}: No te da pedazo de pelotudo.")
                                    mostrar_mensaje("Lo ignoras y seguis acercandote.")
                                    conversacion_personajes(f"{superviviente_nombreMisterioso}: ¡QUIETO, NO LO VOY A REPETIR UNA VEZ MÁS.")
                                    mostrar_mensaje("¿Que vas a hacer.")
                                    mostrar_mensaje("1. Sacas tu cuchillo y lo atacas.")
                                    mostrar_mensaje("2. Te acercas un poco más.")
                                    eleccion20 = pedir_opcion(["1", "2"])
                                    limpiar_pantalla()
                                    #Matar a carver
                                    if eleccion20=="1":
                                        mostrar_mensaje("Procedes a atacarlo.")
                                        mostrar_mensaje("Te dispara pero erra todos los tiros.")
                                        mostrar_mensaje("Le clavas el cuchillo en el corazón.")
                                        mostrar_mensaje("Lo matas.")
                                        mostrar_mensaje("Revisas su cuerpo y agarras las cosas utiles de él.")
                                        mostrar_mensaje("Con tus pocas fuerzas moves el cuerpo hacia afuera para que no haya olor.")
                                        mostrar_mensaje("Pasas la noche en el galpón.")
                                        mostrar_mensaje("Has sobrevivido la primera noche.")
                                        manejar_partida(True)
                                        return

                                    elif eleccion20=="2":
                                        mostrar_mensaje("Procedes a acertarte un poco más.")
                                        conversacion_personajes(f"{superviviente_nombreMisterioso}: ¡TE LO HE ADVERTIDO!.")
                                        mostrar_mensaje("Te acribilla.")
                                        mostrar_mensaje("¡HAS SIDO ASESINADO!.")
                                        manejar_partida(True)
                                        return

                            #seguis por tu camino
                            elif eleccion15=="2":
                                mostrar_mensaje("Has decidido seguir por tu camino ")
                                mostrar_mensaje("Estas un buen rato caminando en el bosque hasta que...")
                                mostrar_mensaje("Escuchas un disparo en el bosque")
                                mostrar_mensaje("Decides ir a investigar")
                                mostrar_mensaje("Te escondes detras de un arbol.")
                                mostrar_mensaje("Visualizas a un superviviente el cuál esta luchando contra 4 zombies.")
                                mostrar_mensaje("¿Que acción vas a tomar?")
                                limpiar_pantalla()
                                mostrar_mensaje("1. Vas a ayudarlo ")
                                posibilidad_supervivencia("Posibilidad de sobrevivir: 34%. Alta posibilida de recompensa")
                                mostrar_mensaje("2. Lo ignoras y seguis tu camino ")
                                posibilidad_supervivencia("Posibilidad de sobrevivir: 36%")
                                eleccion16 = pedir_opcion(["1", "2"])
                                limpiar_pantalla()

                                #ayudar al superviviente
                                if eleccion16=="1":
                                    mostrar_mensaje("Decides ayudarlo")
                                    limpiar_pantalla()
                                    mostrar_mensaje("¿Que armas vas a usar? ")
                                    mostrar_mensaje("1. Machete ")
                                    mostrar_mensaje("2. Cuchillo ")
                                    eleccion16 = pedir_opcion(["1", "2"])
                                    limpiar_pantalla()
                                    if eleccion16=="1":
                                        mostrar_mensaje("Has decidido usar el machete.")
                                        limpiar_pantalla()
                                        mostrar_mensaje("Salis de tu escondite y te dirigis a los zombies.")
                                        mostrar_mensaje("Matas a 2 de ellos y el otro superviviente mata a los otros 2.")
                                        mostrar_mensaje("Te agradece por salvarlo.")
                                        mostrar_mensaje("De que manera entablas conversación con el superviviente?.")
                                        limpiar_pantalla()
                                        mostrar_mensaje("1. De forma amable.")
                                        mostrar_mensaje("2. De forma agresiva.")
                                        mostrar_mensaje("3. Lo asesinas para robarle el fusil de asalto que tiene.")
                                        eleccion17 = pedir_opcion(["1", "2"])
                                        limpiar_pantalla()

                                        #de forma amable
                                        if eleccion17=="1":
                                            conversacion_personajes(f"{protagonista_nombre}: ¿Estas lastimado.?")
                                            conversacion_personajes(f"{superviviente_nombreMisterioso}: Gracias a Dios no, sino hubieses por vos seguro ya no estaria aqui.")
                                            conversacion_personajes(f"{protagonista_nombre}: ¿Como te llamas?.")
                                            conversacion_personajes(f"{superviviente_nombreMisterioso}: Mi nombre es Carver. Un placer, ¿el tuyo?")
                                            conversacion_personajes(f"{protagonista_nombre}: Kenny, un placer encontrar una cara amigable.")
                                            conversacion_personajes(f"{superviviente_nombre}: Luces algo joven.")
                                            conversacion_personajes(f"{protagonista_nombre}: Tengo 17 años.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¿¿17 AÑOS??. ¿Donde estan tus padres pibe?.")
                                            conversacion_personajes(f"{protagonista_nombre}: Han sido devorados por lo zombies.")
                                            conversacion_personajes(f"{superviviente_nombre}: Oh.")
                                            conversacion_personajes(f"{superviviente_nombre}: Lamento escuchar eso.")
                                            conversacion_personajes(f"{protagonista_nombre}: Es el apocalipsis. Todos perdemos personas.")
                                            conversacion_personajes(f"{superviviente_nombre}: Oye, usas muy bien ese machete.")
                                            conversacion_personajes(f"{superviviente_nombre}: Sin dudas antes de esto habras sido un Samurai.")
                                            conversacion_personajes(f"{protagonista_nombre}: Muchas gracias por el halago.")
                                            conversacion_personajes(f"{protagonista_nombre}: La verdad es, que la acabo de encontrar en un galpon abandonado.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¿Dijiste galpón abandonado?.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¿Hablas de uno a unos minutos de aqui?.")
                                            conversacion_personajes(f"{protagonista_nombre}: Emmmm.")
                                            conversacion_personajes(f"{protagonista_nombre}: Si, ¿Porque preguntas?.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¡Es mi refugio!.")
                                            conversacion_personajes(f"{superviviente_nombre}: Ese machete seguro es el que le pertenecia mi padre jaja!.")
                                            conversacion_personajes(f"{protagonista_nombre}: DIOS.")
                                            conversacion_personajes(f"{protagonista_nombre}: ¡PERDON!")
                                            conversacion_personajes(f"{protagonista_nombre}: No era mi intención robartelo!")
                                            conversacion_personajes(f"{protagonista_nombre}: Es que el lugar parecia abandonado y....")
                                            conversacion_personajes(f"{superviviente_nombre}: Che, no te hagas drama.")
                                            conversacion_personajes(f"{superviviente_nombre}: Quedatelo.")
                                            conversacion_personajes(f"{superviviente_nombre}: Después de haberme salvado, es lo minimo que te puedo recompensar.")
                                            conversacion_personajes(f"{protagonista_nombre}: ¡Muchas gracias!.")
                                            conversacion_personajes(f"{superviviente_nombre}: Yo diria de ir a mi refugio.")
                                            conversacion_personajes(f"{superviviente_nombre}: Estar en pleno bosque de noche, no se si es buena idea.")
                                            conversacion_personajes(f"{protagonista_nombre}: ¿Estas seguro que no tenes problema que me quede con vos?.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¡Por supuesto que no, has salvado mi vida!.")
                                            conversacion_personajes(f"{protagonista_nombre}: Bueno. Muchisimas gracias!")
                                            mostrar_mensaje("Vuelven al galpón y pasas la noche ahi.")
                                            mostrar_mensaje("Felicidades! Has sobrevivido la primer noche.")
                                            manejar_partida(True)
                                            return

                                            #de forma agresiva
                                        elif eleccion17=="2":
                                            conversacion_personajes(f"{superviviente_nombreMisterioso}: Has salvado mi vida! Muchisimas gracias.")
                                            conversacion_personajes(f"{protagonista_nombre}: Casi haces que me maten por salvarte, maldito imbecil.")
                                            conversacion_personajes(f"{superviviente_nombreMisterioso}: Disculpame...")
                                            conversacion_personajes(f"{superviviente_nombreMisterioso}: Soy Carver.¿Cual es tu nombre?")
                                            conversacion_personajes(f"{protagonista_nombre}: Que te importa.")
                                            conversacion_personajes(f"{superviviente_nombre}: Oye, nadie te obligo que me salvaras la vida.")
                                            conversacion_personajes(f"{protagonista_nombre}: Lo hice por principios, no voy a dejar que asesinen a otro humano.")
                                            conversacion_personajes(f"{protagonista_nombre}: Aunque claramente, a cambio me tenes que dar tu rifle de asalto.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¿Que carajos dices?.")
                                            conversacion_personajes(f"{protagonista_nombre}: Ya me escuchaste.")
                                            conversacion_personajes(f"{protagonista_nombre}: He salvado tu vida, me debes eso.")
                                            limpiar_pantalla()
                                            mostrar_mensaje("Procedes a poner tu machete en su cuello")
                                            limpiar_pantalla()
                                            conversacion_personajes(f"{protagonista_nombre}: Dame tu rifle de asalto o veras.")
                                            conversacion_personajes(f"{superviviente_nombre}: Bueno, bueno.")
                                            conversacion_personajes(f"{superviviente_nombre}: Tranquilo, aqui lo tienes.")
                                            limpiar_pantalla()
                                            mostrar_mensaje("Te ha dado su rifle de asalto")
                                            limpiar_pantalla()
                                            conversacion_personajes(f"{protagonista_nombre}: Dame también tu mochila.")
                                            conversacion_personajes(f"{superviviente_nombre}: Ya veo porque me salvaste.")
                                            conversacion_personajes(f"{superviviente_nombre}: Simplemente querías robarme las cosas.")
                                            conversacion_personajes(f"{superviviente_nombre}: Maldito bandido de mierda.")
                                            conversacion_personajes(f"{protagonista_nombre}: Es el apocalipsis hermano.")
                                            mostrar_mensaje("Toma una decisión")
                                            mostrar_mensaje("1. Lo asesinas")
                                            posibilidad_supervivencia("Posibilidad de sobrevivir: 75%")
                                            mostrar_mensaje("2. Lo dejas vivir")
                                            posibilidad_supervivencia("Posibilidad de sobrevivir: 56%")
                                            eleccion18 = pedir_opcion(["1", "2"])
                                            limpiar_pantalla()
                                            #matar a Carver
                                            if eleccion18=="1":
                                                conversacion_personajes(f"{protagonista_nombre}: Lo siento amigo.")
                                                conversacion_personajes(f"{protagonista_nombre}: Pero no puedo dejarte vivo.")
                                                conversacion_personajes(f"{superviviente_nombre}: Porfavor, te lo ruego.")
                                                conversacion_personajes(f"{superviviente_nombre}: No me asesines.")
                                                mostrar_mensaje("Le apuntas en la cabeza")
                                                mostrar_mensaje("Procedes a asesinarlo")
                                                mostrar_mensaje("Carver ha muerto.")
                                                limpiar_pantalla()
                                                mostrar_mensaje("Decides volver al galpón debido a la situación peligrosa del bosque.")
                                                mostrar_mensaje("Pasas la noche ahi.")
                                                mostrar_mensaje("Felicidades, has sobrevivido la primer noche!.")
                                                manejar_partida(True)
                                                return

                                            #perdonar a Carver
                                            elif eleccion18=="2":
                                                conversacion_personajes(f"{protagonista_nombre}: Andate lejos de acá.")
                                                conversacion_personajes(f"{protagonista_nombre}: Espero que no te vuelva a ver.")
                                                conversacion_personajes(f"{superviviente_nombre}: Vete al carajo.")
                                                mostrar_mensaje("Carver procede a levantarse.")
                                                mostrar_mensaje("Se va por el bosque.")
                                                mostrar_mensaje("Desaparece de tu vista.")
                                                limpiar_pantalla
                                                mostrar_mensaje("Debido a que corres riesgo de que Carver intente vengarse de vos decides volver al galpón.")
                                                mostrar_mensaje("Pasas la noche en el galpón.")
                                                mostrar_mensaje("Sobrevives la primera noche.")
                                                manejar_partida(True)
                                                return
                                        #matar a carver
                                        elif eleccion17=="3":
                                            conversacion_personajes(f"{superviviente_nombre}: Muchas gracias por salvarme!.")
                                            conversacion_personajes(f"{protagonista_nombre}: No hay de que amigo.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¿Como puedo pagarte?.")
                                            conversacion_personajes(f"{protagonista_nombre}: Ya lo has hecho.")
                                            conversacion_personajes(f"{superviviente_nombre}: ¿Disculpame?.")
                                            mostrar_mensaje("Procedes a clavar tu machete en su cabeza.")
                                            mostrar_mensaje("Empiezas a machetearlo muchas veces.")
                                            mostrar_mensaje("¡Has asesinado a Carver!.")
                                            mostrar_mensaje("¡Has obtenido un fusil de asalto.")
                                            mostrar_mensaje("Tomas su mochila y la abres.")
                                            mostrar_mensaje("¡Has obtenido dos latas de arveja!.")
                                            mostrar_mensaje("Decides volver al galpón para intentar sobrevivir.")
                                            mostrar_mensaje("Sobrevives la primera noche.")
                                            manejar_partida(True)
                                            return

                                    elif eleccion16:
                                        mostrar_mensaje("Has decidido usar el cuchillo.")
                                        limpiar_pantalla()
                                        mostrar_mensaje("Sigilosamente te acercas por detrás de los zombies para matarlos.")
                                        mostrar_mensaje("Cuando estas apunto de matar a los zombies.")
                                        mostrar_mensaje("Recibes una bala perdida del superviviente.")
                                        mostrar_mensaje("Empiezas a gritar del dolor.")
                                        mostrar_mensaje("Un zombie te ataca y te asesina.")
                                        mostrar_mensaje("Los 3 zombies restantes atacan al superviviente y también lo asesinan.")
                                        mostrar_mensaje("¡Has muerto!.")
                                        mostrar_mensaje("¡El superviviente ha muerto!.")
                                        manejar_partida(True)
                                        return

                                    #seguir tu camino(muerte)
                                    if eleccion16=="2":
                                        mostrar_mensaje("Has elegido ignorarlo y seguir tu camino.")
                                        mostrar_mensaje("Justo cuando ibas a dejar el lugar.")
                                        mostrar_mensaje("El superviviente le erra un tiro a los zombies y te pega a vos.")
                                        mostrar_mensaje("Empiezas a sangrar muchisimo.")
                                        mostrar_mensaje("¡Has muerto desangradote!.")
                                        manejar_partida(True)
                                        return
                #Ir al a granja
                if eleccion6 == "2":
                    mostrar_mensaje("Has elegido ir a la granja.")
                    mostrar_mensaje("Decides sacar tu cuchillo.")
                    mostrar_mensaje("Abres la puerta y entras.")
                    mostrar_mensaje("Todo parece estar calmado hasta que.....")
                    conversacion_personajes(f"{superviviente_nombre1}: Movete y te disparo.")
                    limpiar_pantalla()
                    mostrar_mensaje("¿Como le vas a hablar al desconocido?.")
                    mostrar_mensaje("1. Calmado.")
                    posibilidad_supervivencia("Posibilidad de sobrevivir: 86%")
                    mostrar_mensaje("2. Agresivo.")
                    posibilidad_supervivencia("Posibilidad de sobrevivir: 56%")
                    eleccion21 = pedir_opcion(["1", "2"])
                    limpiar_pantalla()
                    #le hablas calmado
                    if eleccion21 == "1":
                        conversacion_personajes(f"{protagonista_nombre}: Tranquilo.")
                        conversacion_personajes(f"{superviviente_nombre1}: ¿Quien eres?.")
                        conversacion_personajes(f"{protagonista_nombre}: Me llamo Franco.")
                        conversacion_personajes(f"{protagonista_nombre}: Y quiero vivir.")
                        conversacion_personajes(f"{protagonista_nombre}: Tranquilo.")
                        conversacion_personajes(f"{protagonista_nombre}: ¿Como te llamas?.")
                        conversacion_personajes(f"{superviviente_nombreMisterioso1}: Me llamo Lee.")
                        conversacion_personajes(f"{superviviente_nombreMisterioso1}: Esta es mi granja.")
                        conversacion_personajes(f"{protagonista_nombre}: Escuchame Lee, te pido disculpas.")
                        conversacion_personajes(f"{protagonista_nombre}: Estaba buscando refugio, no sabia que esta era tu casa.")
                        conversacion_personajes(f"{superviviente_nombreMisterioso1}: Vuelve de donde viniste.")
                        mostrar_mensaje("Que vas a hacer?.")
                        mostrar_mensaje("1. Pedirle que te deje entrar")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 56%")
                        mostrar_mensaje("2. Asesinarlo.")
                        posibilidad_supervivencia("Posibilidad de sobrevivir: 46.4%")
                        eleccion22 = pedir_opcion(["1", "2"])
                        limpiar_pantalla()
                        #pedirle que te deje entrar
                        if eleccion22 == "1":
                            conversacion_personajes(f"{protagonista_nombre}: Porfavor, dejame entrar.")
                            conversacion_personajes(f"{protagonista_nombre}: Llevo dias sin poder comer bien y dormir.")
                            conversacion_personajes(f"{protagonista_nombre}: Dejame esta noche por lo menos.")
                            conversacion_personajes(f"{superviviente_nombreMisterioso1}: ¿Como se que no me vas a asesinar?.")
                            conversacion_personajes(f"{superviviente_nombreMisterioso1}: ¿Como se que no sos un asesino o un bandido?.")
                            conversacion_personajes(f"{protagonista_nombre}: Quedate con mi cuchilo, no me importa.")
                            conversacion_personajes(f"{protagonista_nombre}: Porfavor, te lo ruego.")
                            conversacion_personajes(f"{superviviente_nombreMisterioso1}: .....")
                            conversacion_personajes(f"{superviviente_nombreMisterioso1}: Entra, intenta hacer algo y te asesino.")
                            conversacion_personajes(f"{protagonista_nombre}: Muchas gracias, enserio, muchisimas gracias señor....")
                            conversacion_personajes(f"{superviviente_nombre1}: Lee.")
                            conversacion_personajes(f"{protagonista_nombre}: Un placer Lee, soy Kenny.")
                            limpiar_pantalla()
                            mostrar_mensaje("Has pasado la noche en la granja.")
                            mostrar_mensaje("Has sobrevivido la primer noche")
                            manejar_partida()
                            return

                        #intentar asesesinarlo
                        elif eleccion22 == "2":
                            mostrar_mensaje("Sacas tu cuchillo de la cintura.")
                            mostrar_mensaje("Estas apunto de apuñarlo al superviviente.")
                            mostrar_mensaje("Pero el te dispara.")
                            mostrar_mensaje("¡Has sido asesinado!.")
                            manejar_partida(True)
                            return

        #seguis corriendo (sobrevivis)
        elif eleccion3 == "2":
            mostrar_mensaje("Decides seguir corriendo.")
            mostrar_mensaje("Logras escapar del zombie por ahora.")
            manejar_partida(True)
            return
    #salir sigilosamente de la casa (sobrevivis)
    elif eleccion2 == "2":
        mostrar_mensaje("Decides salir sigilosamente de la casa.")
        mostrar_mensaje("Logras salir sin hacer ruido.")
        mostrar_mensaje("Sigues vagando por el pueblo en busca de raciones.")
        manejar_partida(True)
        return
    #decidir investigar que sucede
    elif eleccion2 == "3":
        mostrar_mensaje("Decides ir a investigar qué pasa.")
        mostrar_mensaje("Subes las escaleras del segundo piso.")
        mostrar_mensaje("En una esquina encuentras una mesa de luz.")
        mostrar_mensaje("La abris.")
        mostrar_mensaje("Has encontrado un revolver con 8 balas! Enhorabuena. Ha valido la pena subir al segundo piso.")
        mostrar_mensaje("Ahora estas armado.")
        mostrar_mensaje("Sigues recorriendo el segundo piso.")
        mostrar_mensaje("Encuentras una habitación cerrada.")
        mostrar_mensaje("¿Qué haces?.")
        limpiar_pantalla()
        mostrar_mensaje("1. Intentas abrir la puerta.")
        posibilidad_supervivencia("Posibilidad de sobrevivir: 50%.")
        mostrar_mensaje("2. Sales corriendo de la casa.")
        posibilidad_supervivencia("Posibilidad de sobrevivir: 50%.")
        eleccion3 = pedir_opcion(["1", "2"])
        limpiar_pantalla()
        #intentar abrir la puerta (sobrevivis)
        if eleccion3 == "1":
            mostrar_mensaje("Intentas abrir la puerta pero está cerrada con llave.")
            mostrar_mensaje("Pero al hacer ruido el zombie se alerta.")
            mostrar_mensaje("Te escondes en el ropero de la casa.")
            mostrar_mensaje("El zombie sale de la casa corriendo a Dios sepa donde.")
            mostrar_mensaje("Logras escapar del peligro.")
            manejar_partida(True)
            return
        #salir corriendo de la casa
        elif eleccion3 == "2":
            mostrar_mensaje("Decides salir corriendo de la casa.")
            mostrar_mensaje("Al salir corriendo haces mucho ruido y algo parece haberte escuchado.")
            mostrar_mensaje("Mientras estás corriendo, decides mirar hacia atrás.")
            mostrar_mensaje("¡ES EL ZOMBIE QUE ESTÁ A PUNTO DE COMERTE!.")
            mostrar_mensaje("¿QUÉ HACES?")
            limpiar_pantalla()
            mostrar_mensaje("1. SACAS EL CUCHILLO DE TU CINTURA.")
            posibilidad_supervivencia("Posibilidad de sobrevivir: 34%.")
            mostrar_mensaje("2. SACAS EL REVÓLVER DE TU CINTURA.")
            posibilidad_supervivencia("Posibilidad de sobrevivir: 45%.")
            mostrar_mensaje("3. SIGUES CORRIENDO.")
            posibilidad_supervivencia("Posibilidad de sobrevivir: 23%.")
            eleccion4 = pedir_opcion(["1", "2", "3"])
            limpiar_pantalla()
            #sacar cuchillo nuevamente de la cintura (muerte 100%)
            if eleccion4 == "1":
                mostrar_mensaje("ELEGISTE SACAR EL CUCHILLO DE TU CINTURA.")
                mostrar_mensaje("LO ACUCHILLAS AL ZOMBIE PERO NO ES SUFICIENTE.")
                mostrar_mensaje("¿¿¿¿QUÉ VAS A HACER?????.")
                limpiar_pantalla()
                mostrar_mensaje("1. Te rindes.")
                posibilidad_supervivencia("Posibilidad de sobrevivir: 1.5%.")
                mostrar_mensaje("2. Lo acuchillas de nuevo.")
                posibilidad_supervivencia("Posibilidad de sobrevivir: 33%.")
                eleccion5 = pedir_opcion(["1", "2"])
                limpiar_pantalla()
                #rendición (muerte)
                if eleccion5 == "1":
                    mostrar_mensaje("Decides que no vale la pena seguir luchando.")
                    mostrar_mensaje("¡HAS MUERTO!.")
                    manejar_partida(True)
                    return
                #logras acuchillar al zombie devuelta (muerte x2)
                elif eleccion5 == "2":
                    mostrar_mensaje("DECIDIS DAR TU ÚLTIMO INTENTO.")
                    mostrar_mensaje("EL ZOMBIE TE ARRANCA UN PEDAZO DEL ESTOMAGO.")
                    mostrar_mensaje("PERO LOGRAS ACUCHILLARLO.")
                    mostrar_mensaje("LOGRAS ACABAR CON EL ZOMBIE.")
                    mostrar_mensaje("PERO LA HERIDA ES MUY GRAVE.")
                    mostrar_mensaje("¡HAS MUERTO!.")
                    manejar_partida(True)
                    return
            #sacar revolver
            elif eleccion4 == "2":
                mostrar_mensaje("ELEGISTE SACAR EL REVÓLVER DE TU CINTURA.")
                mostrar_mensaje("LE DISPARAS AL ZOMBIE.")
                mostrar_mensaje("PERO SOLO LO HERISTE.")
                mostrar_mensaje("¿¿¿¿QUÉ VAS A HACER?????.")
                limpiar_pantalla()
                mostrar_mensaje("1. Te rindes.")
                posibilidad_supervivencia("Posibilidad de sobrevivir: 4.3%.")
                mostrar_mensaje("2. Le disparas de nuevo.")
                posibilidad_supervivencia("Posibilidad de sobrevivir: 65%.")

                eleccion5 = pedir_opcion(["1", "2"])
                limpiar_pantalla()
                #rendición (muerte)
                if eleccion5 == "1":
                    mostrar_mensaje("Decides que no vale la pena seguir luchando.")
                    mostrar_mensaje("¡HAS MUERTO!.")
                    manejar_partida(True)
                    return
                #dispararle nuevamente (sobrevivis)
                elif eleccion5 == "2":
                    mostrar_mensaje("DECIDIS DAR TU ÚLTIMO INTENTO.")
                    mostrar_mensaje("LE DISPARAS NUEVAMENTE.")
                    mostrar_mensaje("LOGRAS ACABAR CON EL ZOMBIE.")
                    mostrar_mensaje("¡FELICIDADES, HAS GANADO!.")
                    manejar_partida(True)
                    return
            #salir corriendo (muerte)
            elif eleccion4 == "3":
                mostrar_mensaje("DECIDES SEGUIR CORRIENDO.")
                mostrar_mensaje("PERO TE OLVIDASTE DE ALGO.")
                mostrar_mensaje("QUE LLEVAS DIAS SIN COMER BIEN Y DORMIR BIEN.")
                mostrar_mensaje("POR LO QUE NO ESTAS EN TU MEJOR MOMENTO.")
                mostrar_mensaje("EL ZOMBIE TE ALCANZA.")
                mostrar_mensaje("¡HAS MUERTO!.")
                manejar_partida(True)
                return

#funcion si eliges la segunda opcion(2)
def opcion_2():
    mostrar_mensaje("Has decidido seguir vagando por el pueblo.") #otra opcion
    mostrar_mensaje("Lastimosamente al no entrar en la casa, no te percataste que habia un zombie dentro de ese lugar.") #otra opcion
    mostrar_mensaje("Cuando empiezas a escuchar unos pasos detras tuyos, ya es tarde.") #otra opcion
    mostrar_mensaje("El zombie te ha devorado.") #otra opcion
    mostrar_mensaje("¡HAS MUERTO!.") #otra opcion
    manejar_partida(True)
    return #Volver

#funcion para comenzar
def comenzar():
    aviso_juego()
    introduccion()
    mostrar_mensaje("¿Qué haces?.")
    mostrar_mensaje("1. Decides entrar en la casa.")
    posibilidad_supervivencia("Alto nivel de peligro (40% de sobrevivir), pero alta recompensa potencial. Ten en cuenta los riesgos.")
    mostrar_mensaje("2. Decides seguir vagando por el pueblo.")
    posibilidad_supervivencia("Bajo nivel de peligro (60% de sobrevivir), pero sin recompensa potencial. Piensa tu decisión.")
    eleccion1 = pedir_opcion(["1", "2"])
    limpiar_pantalla()

    if eleccion1 == "1":
        opcion_1()
        limpiar_pantalla()
    elif eleccion1 == "2":
        opcion_2()
        limpiar_pantalla()

    mostrar_mensaje("FIN DEL JUEGO")

#Funcion para reiniciar el juego
def manejar_partida(reiniciar):
    mostrar_mensaje("FIN DE LA PARTIDA") #THE END
    if reiniciar:
        mostrar_mensaje("¿Deseas reiniciar el juego?") #reiniciar la partida
        mostrar_mensaje("1. Sí")
        mostrar_mensaje("2. No")
        eleccion = pedir_opcion(["1", "2"])
        if eleccion == "1":
            comenzar()
        else:
            mostrar_mensaje("Gracias por haber jugado!")
            mostrar_mensaje("¡Hasta luego!")
    else:
        mostrar_mensaje("Gracias por haber jugado!")
        mostrar_mensaje("¡Hasta luego!")

comenzar() #Obligatorio, sino, no funcina tu codigo


# Spotify for Developers
# App name: Billboard to Spotify
# Redirect URI: http://example.com
# spotipy 2.23.0 - A light weight Python library for the Spotify Web API
# pip install spotipy
import os
from dotenv import load_dotenv

import spotipy
from spotipy.oauth2 import SpotifyOAuth

load_dotenv()

CURRENTUSER_ID = os.environ.get("CURRENTUSER_ID")
CLIENT_ID = os.environ.get("SPOTIPY_CLIENT_ID")
CLIENT_SECRET = os.environ.get("SPOTIPY_CLIENT_SECRET")
REDIRECT_URI = os.environ.get("SPOTIPY_REDIRECT_URI")
ACCESS_TOKEN = os.environ.get("access_token")
scope = "playlist-modify-private"

# TO-DO 1: figure out how to authenticate your Python project with Spotify using your unique Client ID/ Client Secret.
spotify = spotipy.Spotify(oauth_manager=SpotifyOAuth(
    scope=scope,
    redirect_uri=REDIRECT_URI,
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    cache_path="./__pycache__/.cache"))

# TO-DO 2: Create a private playlist using Spotify Api
my_playlist = spotify.user_playlist_create(user=f"{CURRENTUSER_ID}", name="New Playlist", description="Create new playlist with Python", public=False)

# TO-DO 3: Get the user playlist
my_playlist = spotify.user_playlists(user=f"{CURRENTUSER_ID}", )
print(my_playlist)

# TO-DO 4: Get the user id of the authenticated user (your Spotify username).
# Hint: Use this method: current_user()
user_id = spotify.current_user()
print(user_id)

# TO-DO 5: create a list of Spotify song URIs for the list of song names you found from step 1 (scraping billboard 100).
track_name = {"Incomplete"}
artist = "Sisqo"
year = "2000"
search_track = spotify.search(q=f"track:{track_name} artist:{artist}", type="track", market="US", limit=1)
print(search_track)


import os
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from modules.ner_inference import NER_Inference_Simple
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired
from wtforms import TextAreaField, SubmitField

class NERForm(FlaskForm):
    sequence = TextAreaField('Input text', validators = [DataRequired()])
    submit = SubmitField('Find named entities')

def create_app():
    SECRET_KEY = os.urandom(32)

    app = Flask(__name__)
    Bootstrap(app)
    app.config['SECRET_KEY'] = SECRET_KEY

    ner_engine = NER_Inference_Simple()

    @app.route('/', methods = ['GET', 'POST'])
    def main():

        form = NERForm()
        if form.validate_on_submit():
            sequence = form.sequence.data
            result = ner_engine.predict(sequence)

            return render_template('index.html', result = result, form=form)
        result = []
        return render_template('index.html', result = result, form=form)

    return app

if __name__ == "__main__":
    app = create_app()
    app.run(debug=True)


import unittest

from base import FunctionalTestCase

class MyTest(FunctionalTestCase):
    def test_shows_login_to_instagram(self):
        self.driver.get('nginx:8001')
        self.driver.find_element_by_link_text('Login to Instagram')

if __name__ == '__main__':
    unittest.main()


product = {}
while True:
    print(f"1.Add 2.Display 3.Search 4.Exit")
    ch = input("Enter a choice")
    if ch == 1:
        print(f"Enter product id and value price")
        pro_id = int(input())
        price = int(input())
        product[pro_id] = price
    elif ch == 2:
        if product == {}:
            print(f"No products")
        else:
            for k,v in product.items():
                print(f"Product id: {pro_id} --- value price {price} ")
    elif ch == 3:
        se = int(input("Enter the product id which to be searched"))
        if product.get(se):
            print(f"Product with :")


'''
Файл отвечающий за логику и стратегию бота.
'''
import random

class Bot:
    ''' Bot - собственно сам бот.
    method:
        get_hit - принимает выстрел в поле table_1
        set_hit - формирует координаты для выстрела по player.table_1
        check_hand -  связывающий метод с seh_hit  выбора координаты для выстрела как проверка
        strategy_x - одна стратегия которая стреляет по полю вниз и в право.
        modify_table -  отметка удара противника на таблице кораблей
    '''
    def __init__(self):
        self.table_1 = {}
        self.table_2 = {}       # по сути нам он не нужен, но он используется методом game.dots_install для отметки корабля
        self.ship_symbol = '@'  # вид палубы
        self.ships_count = None # корабли с координатами
        self.temp_coordinats = [] # список истории ходов, чтоб определить например последнее попадание
        self.temp_status_2 = [] # список истории ходов, после того как ранили корабль
        self.moves = []         # список, в котором хранятся все ходы бота
        self.strikes = []       # список всех попаданий
        # для стратегий:
        self.a = 1
        self.b = 0
        self.rnd = random.randint(0,1)

    def get_hit(self, coordinate):
        if self.table_1[coordinate[0]][coordinate[1]] == self.ship_symbol:
            return 0
        elif self.table_1[coordinate[0]][coordinate[1]] == '.' or self.table_1[coordinate[0]][coordinate[1]] == 'X':
            return -1
        else:
            return 1

    def set_hit(self,status):
        result = None # нужна для координат выстрела в режиме статуса числом выше 2х
        # случайный выстрел или случайный выстрел т.к. последний корабль убит
        if status == -1 or status == 1:
            # чистка данных
            self.temp_coordinats.clear()
            self.temp_status_2.clear()
            self.strikes.clear()

            # stratery_x
            '''
            возможно из за этого кода выход за пределы массива
            if self.rnd == 0:
                self.a += 1
                self.b += 1
                if not self.strategy_x():
                    return [self.a, self.b]
                else:
                    self.a=1
                    self.b=0
            '''
            # история данных
            rcord =  [random.randint(1,10),random.randint(0,9)]
            self.temp_coordinats.append(rcord[:])
            self.moves.append(rcord[:])
            return self.temp_coordinats[-1]
        # ранил
        elif status == 2:
            # берем последние координаты
            coord = self.temp_coordinats[-1]
            # рандомно выбираем куда стрелять
            list_check = [
                [coord[0], coord[1] + 1], [coord[0], coord[1] - 1],
                [coord[0] - 1, coord[1]], [coord[0] + 1, coord[1]]
            ]

            for i in random.choice([list_check]):
                # проверка границ
                if (i[0] <= 10 and i[0] >= 1) and (i[1] <= 9 and i[1] >= 0):
                    # выбираем рандомную координату и возвращаем ее
                    # выбирать то, что еще не выбиралось
                    if not i in self.temp_status_2:
                        self.temp_status_2.append(i)
                        self.moves.append(i[:])
                        return i
                    continue
                else:
                    continue
            else:
                print('что-то не так, метод bot.set_hit')
                exit(1)
        # не первое попадание в корабль
        elif status > 2:
            # если первые числа координаты положительны, значит корабль распологается по горизонтали
            # вертикаль
            if self.temp_coordinats[-1][0] == self.temp_status_2[-1][0]:
                # тут чекаем горизонталь
                return self.check_hand(1,0,9)
            # горизонталь
            elif self.temp_coordinats[-1][1] == self.temp_status_2[-1][1]:
                # тут чекаем вертикаль
                return self.check_hand(0, 1, 10)
            else:
                print('что то тут не так. метод bot.set_hit(), сектор elif status > 2')
                exit(1)

    def check_hand(self,hid,up,down):
        temp=0
        inc=1
        while 1:
            if inc:
                temp = max(self.strikes)[:]
                temp[hid]+=1
            else:
                temp = min(self.strikes)[:]
                temp[hid]-=1

            if temp in self.strikes:
                if inc: inc = 0
                else: inc = 1
                continue

            self.temp_coordinats[-1] = temp[:]

            #1 смотрим, нет ли таких же координатов
            if not self.temp_coordinats[-1] in self.moves:
                #2 границы <-->
                if self.temp_coordinats[-1][hid] <= down and self.temp_coordinats[-1][hid] >= up:
                    self.moves.append(self.temp_coordinats[-1][:])
                    return self.temp_coordinats[-1]
                else:
                    if inc:inc = 0
                    else: inc = 1
                    continue
            else:
                if inc: inc = 0
                else: inc = 1
                continue

    def strategy_x(self):
        if self.a <=10 and self.b <=9:
            return 0
        else:
            return 1

    def modify_table(self,coordinate,label):
        self.table_1[coordinate[0]][coordinate[1]] = label


#  hello/urls.py

from django.urls import path
from . import views

from django.conf import settings
from django.conf.urls.static import static

app_name = "portfolio"

urlpatterns = [
    path('', views.home_page_view, name='home'),
    path('home', views.home_page_view, name='home'),
    path('projetos', views.projetos_view, name='projetos'),
    path('videos', views.videos_view, name='videos'),
    path('labs', views.labs_view, name='labs'),
    path('contactos', views.contactos_view, name='contactos'),
    path('sobre', views.sobre_view, name='sobre'),
    path('meteorologia', views.consulta_metreologia, name='meteorologia'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# @Author: José Sánchez-Gallego (gallegoj@uw.edu)
# @Date: 2018-07-13
# @Filename: dapall.py
# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause)
#
# @Last modified by: José Sánchez-Gallego (gallegoj@uw.edu)
# @Last modified time: 2018-11-14 12:03:58

import os
from packaging.version import parse

import astropy.io.fits

import marvin
from marvin.core.exceptions import MarvinError
from marvin.utils.general import get_dapall_path, map_dapall

__all__ = ['DAPallMixIn']

class DAPallMixIn(object):
    """A mixin that provides access to DAPall paremeters.

    Must be used in combination with `.MarvinToolsClass` and initialised
    before `~.DAPallMixIn.dapall` can be called.

    `DAPallMixIn` uses the `.MarvinToolsClass.data_origin` of the object to
    determine how to obtain the DAPall information. However, if the object
    contains a ``dapall`` attribute with the path to a DAPall file, that file
    will be used.

    """

    __min_dapall_version__ = parse('2.1.0')

    @property
    def dapall(self):
        """Returns the contents of the DAPall data for this target."""

        if (not self._dapver or
                parse(self._dapver) < self.__min_dapall_version__):
            raise MarvinError('DAPall is not available for versions before MPL-6.')

        if hasattr(self, '_dapall') and self._dapall is not None:
            return self._dapall

        if self.data_origin == 'file':
            try:
                dapall_data = self._get_dapall_from_file()
            except IOError:
                marvin.log.debug('cannot find DAPall file. Trying remote request.')
                dapall_data = self._get_from_api()
        elif self.data_origin == 'db':
            dapall_data = self._get_dapall_from_db()
        else:
            dapall_data = self._get_dapall_from_api()

        self._dapall = dapall_data

        return self._dapall

    def _get_dapall_from_file(self):
        """Uses DAPAll file to retrieve information."""

        daptype = self.bintype.name + '-' + self.template.name

        dapall_path = get_dapall_path(self._drpver, self._dapver)

        assert dapall_path is not None, 'cannot build DAPall file.'

        if not os.path.exists(dapall_path):
            raise MarvinError('cannot find DAPall file in the system.')

        dapall_hdu = astropy.io.fits.open(dapall_path)

        header = dapall_hdu[0].header
        dapall_table = dapall_hdu[-1].data

        dapall_row = dapall_table[(dapall_table['PLATEIFU'] == self.plateifu) &
                                  (dapall_table['DAPTYPE'] == daptype)]

        assert len(dapall_row) == 1, 'cannot find matching row in DAPall.'

        return map_dapall(header, dapall_row[0])

    def _get_dapall_from_db(self):
        """Uses the DB to retrieve the DAPAll data."""

        dapall_data = {}

        daptype = self.bintype.name + '-' + self.template.name

        mdb = marvin.marvindb

        if not mdb.isdbconnected:
            raise MarvinError('No DB connected')

        datadb = mdb.datadb
        dapdb = mdb.dapdb

        dapall_row = mdb.session.query(dapdb.DapAll).join(
            dapdb.File, datadb.PipelineInfo, datadb.PipelineVersion).filter(
                mdb.datadb.PipelineVersion.version == self._dapver,
                dapdb.DapAll.plateifu == self.plateifu,
                dapdb.DapAll.daptype == daptype).use_cache().first()

        if dapall_row is None:
            raise MarvinError('cannot find a DAPall match for this target in the DB.')

        for col in dapall_row.__table__.columns.keys():
            if col != 'pk' and '_pk' not in col:
                dapall_data[col] = getattr(dapall_row, col)

        return dapall_data

    def _get_dapall_from_api(self):
        """Uses the API to retrieve the DAPall data."""

        url = marvin.config.urlmap['api']['dapall']['url']

        url_full = url.format(name=self.plateifu,
                              bintype=self.bintype.name,
                              template=self.template.name)

        try:
            response = self._toolInteraction(url_full)
        except Exception as ee:
            raise MarvinError('found a problem while getting DAPall: {0}'.format(str(ee)))

        if response.results['error'] is not None:
            raise MarvinError('found a problem while getting DAPall: {}'
                              .format(str(response.results['error'])))

        data = response.getData()

        return data['dapall_data']


# Expected inputs- rain/ cloudy/ thunderstorm/ sunny

def weather_to_emoji(weather):

  if weather == "rain":
    print("☔")

  elif weather == "cloudy":
    print("☁")

  elif weather == "thunderstorm":
    print("⚡")

  else:
    print("🌞")

weather_to_emoji("rain")


from concurrent.futures import ProcessPoolExecutor
import json
import multiprocessing
import os
import pickle
import argparse
import sys
from base_dataset import Dataset
from threed_future_labels import THREED_FUTURE_LABELS
from threed_future_model import VoxelThreedFutureModel
from utils import lower_slash_format
import logging
from tqdm import tqdm

# Supress trimesh logging in all processes
logger = logging.getLogger("trimesh")
logger.setLevel(logging.ERROR)

class ThreedFutureDatasetParser(Dataset):
    def __init__(self, *args,
                root=None,
                labels=None,
                transform=None,
                download_url="",
                **kwargs):
        super().__init__(*args,
                            download_url=download_url,
                            root=root,
                            **kwargs)

        #File mapping categorical info to objects
        self.model_suffix =  "model_info.json"
        with open(os.path.join(self.root_path,self.model_suffix)) as f:
            self.model_info = json.load(f)
        #Transformations on data
        self.transform = transform
        # Set property variables
        self.objects = []
        self.object_type_frequencies = {}
        self.obj_count = 0

        future_labels = THREED_FUTURE_LABELS.values()
        future_keys = THREED_FUTURE_LABELS.keys()
        for v in future_labels:
            self.object_type_frequencies[v] = 0
        for model in self.model_info:
            if model["category"] and lower_slash_format(model["category"]) in future_keys:
                self.objects.append(
                    VoxelThreedFutureModel(
                        model_jid = model["model_id"],
                        model_info= model,
                        scale=1,
                        path_to_models=self.root_path
                    )
                )
                self.object_type_frequencies[THREED_FUTURE_LABELS[lower_slash_format(model["category"])]] +=1
                self.obj_count += 1
        self.object_types = THREED_FUTURE_LABELS
        self.n_object_types = len(THREED_FUTURE_LABELS)

    def __len__(self):
        return self.obj_count

    def __getitem__(self, index):
        object = self.objects[index]
        if self.transform is not None:
            object = self.transform(object)
        return object

    def _filter_objects_by_label(self, label):
        return [oi for oi in self.objects if oi.label == label]

    @property
    def categories(self):
        return set([s.lower().replace(" / ", "/") for s in self._categories])

    @property
    def super_categories(self):
        return set([
            s.lower().replace(" / ", "/")
            for s in self._super_categories
        ])

def process_object(model):
    matrix = model.get_voxel_matrix(skip_texture=True)
    return ({
        "model_name" : model.model_jid,
        "label" : model.label,
        "matrix" : matrix,
    })

def pickle_threed_future_dataset_parallel(data, output_dir):

    num_cores = (multiprocessing.cpu_count() - 1) or 1
    with ProcessPoolExecutor(max_workers=num_cores) as pool:
        with tqdm(total=len(data)) as progress:
            progress.set_description("Processing dataset")
            futures = []
            for model in data:
                future = pool.submit(process_object, model)
                future.add_done_callback(lambda p: progress.update())
                futures.append(future)
            objects = []
            for future in futures:
                object = future.result()
                objects.append(object)
    with open(os.path.join(output_dir,'threed_future.pkl'), 'wb') as f:
        pickle.dump(objects, f)
        print(f"Data saved at: {f.name}")

def pickle_threed_future_dataset(data, output_dir):
    objects = []
    print("Parsing dataset ", end="")
    for i in range(len(data)):
        model = data[i]
        matrix = model.get_voxel_matrix(skip_texture=True)
        objects.append({
            "model_name" : model.model_jid,
            "label" : model.label,
            "matrix" : matrix,
        })
        s = "{:5d} / {:5d}".format(i, len(data))
        print(s, flush=True, end="\b"*len(s))
    print()
    with open(os.path.join(output_dir,'threed_future.pkl'), 'wb') as f:
        pickle.dump(objects, f)
        print(f"Data saved at: {f.name}")

def pickle_dataset(data, output_dir, parallelize=False):
    if parallelize:
        pickle_threed_future_dataset_parallel(data, output_dir)
    else:
        pickle_threed_future_dataset(data, output_dir)

def serialize_stats(data, output_dir):
    frequencies = data.object_type_frequencies
    stats = {
        "n_objects" : len(data),
        "n_object_types" : len(THREED_FUTURE_LABELS),
        "object_types" : THREED_FUTURE_LABELS,
        "object_type_frequencies" : frequencies
    }
    with open(os.path.join(output_dir,'dataset_stats.json'), 'w') as f:
        json.dump(stats, f, ensure_ascii=False, indent=4)

def main(argv):

    MODEL_SUFFIX =  "model_info.json"
    model_info = None

    parser = argparse.ArgumentParser(
        description="Prepare the 3D-FUTURE objects to train our model"
    )
    parser.add_argument(
        "--output_directory",
        default="../../output/",
        help="Path to output directory"
    )
    parser.add_argument(
        "path_to_3d_future_dataset_directory",
        default="../../ATISS/datasets/3D-Front/3D-FUTURE-model",
        help="Path to the 3D-FRONT dataset"
    )
    parser.add_argument('-p', action='store_true')
    args = parser.parse_args(argv)

    root_path = args.path_to_3d_future_dataset_directory
    with open(os.path.join(root_path, MODEL_SUFFIX)) as f:
        model_info = json.load(f)

    # We need model data
    assert model_info != None, "3D-Future model information needed."

    # Check if output directory exists and if it doesn't create it
    if not os.path.exists(args.output_directory):
        os.makedirs(args.output_directory)

    data =  ThreedFutureDatasetParser(root=root_path)

    if args.p:
        print("--- Processing dataset in parallel ---")
    else:
        print("--- Processing dataset sequentially ---")

    # Produce json file for statistics file in output directory
    serialize_stats(data, args.output_directory)
    # Pickle dataset to /tmp/threed_future.pkl
    pickle_dataset(data, args.output_directory ,args.p)

if __name__ == "__main__":
    main(sys.argv[1:])


#!/usr/bin/env python
"""A wxpython practice"""
__author__ = 'GYG'

import wx

class InsertFrame(wx.Frame):
    def __init__(self,parent=None,id=-1,pos=wx.DefaultPosition,title='Frame With Button'):

        #wx.Frame.__init__(self,parent,id,title,pos,(1000,2000))
        wx.Frame.__init__(self,parent,id,'Frame With Button',pos, (300,100))
        panel=wx.Panel(self,-1)
        button=wx.Button(panel,label="Close",pos=(0,0),size=(50,50))
        self.Bind(wx.EVT_BUTTON,self.OnCloseMe,button)
        self.Bind(wx.EVT_CLOSE,self.OnCloseWindow)

    def OnCloseMe(self,event):
        self.Close(True)

    def OnCloseWindow(self,event):
        self.Destroy()

class App(wx.App):
    def OnInit(self):
        self.frame=InsertFrame(parent=None,id=-1)
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

def button_demo():
    # app = App()
    # app.MainLoop()

    app = wx.PySimpleApp()
    frame=InsertFrame(parent=None,id=-1)
    frame.Show()
    app.MainLoop()

if __name__=='__main__':
    button_demo()


num = list(map(int, input().split()))
A = min(num)
C = max(num)
B = (set(num) - {A} - {C}).pop()
order = list(input())
dictionary = {"A": A, "B": B, "C": C}
answer = []
for x in order:
    answer.append(dictionary.get(x))
print(" ".join(map(str, answer)))


from tools.fancy import printOk, printFail

LogFailure = lambda  *args : None
LogSuccess = lambda  *args : None
LogInfo = lambda *args : None

class AssertFailedException(Exception):
    pass

class Application:

    def __init__(self):
        self.logFiles = []
        self.errors = []

    def register(self, logFile):
        self.logFiles.append(logFile)

    def verify(self):
        for logFile in self.logFiles:
            try:
                logFile.run()
            except AssertFailedException as e:
                self.errors.append({"file": logFile.fileName, "args": e.args})
        self._printResult()

    def _printResult(self):
        LogInfo("\nSummary:\n")
        total = len(self.logFiles)
        failure = len(self.errors)
        success = total - failure
        myprint = printOk if failure == 0 else printFail
        myprint("Success: {0}\tFailed: {1}\t Total: {2}\n".format(
            success,
            failure,
            total))
        for error in self.errors:
            myprint("{0}: Expected '{1}' from line n{2} to the end of file\n".format(
                error["file"],
                error["args"][0],
                error["args"][1]))
        LogInfo("\n")

class LogFile(object):

    def __init__(self, fileName):
        self.fileName = fileName
        self.expectedList = []

    def expect(self, expected):
        self.expectedList.append(expected)

    def _verifyLogFile(self):
        fileStream = open(self.fileName, 'r')
        lineIndex = lastLine = 1
        LogInfo("Testing: {0}\n".format(self.fileName))
        for expectedLine in self.expectedList:
            for line in fileStream:
                lineIndex += 1
                if (line[:-1] == expectedLine):
                    LogSuccess("{0}:{1}".format(lineIndex, line))
                    lastLine = lineIndex
                    break # Go to next expected item
            else: # End of file reached but expected line not find
                LogFailure("{0}\n".format(expectedLine))
                fileStream.close()
                raise AssertFailedException(expectedLine, lastLine)
        fileStream.close()

    def verify(self):
        try:
            self._verifyLogFile()
        except FileNotFoundError as e:
            printFail(e)
            raise e


#!/usr/bin/env python3

import socket
import struct

# このmsgがbytes型
def send_msg(sock, msg):
    total_sent_byte_length = 0
    total_message_byte_length = len(msg)
    while total_sent_byte_length < total_message_byte_length:
        # pythonのbytes型はgoのbyte sliceみたいな感じ
        sent_length = sock.send(msg[total_sent_byte_length:])
        if sent_length == 0:
            raise RuntimeError("socket connection broken")
        total_sent_byte_length += sent_length

def recv_msg(sock, total_msg_byte_size):
    total_recv_byte_size = 0
    while total_recv_byte_size < total_msg_byte_size:
        received_chunk = sock.recv(total_msg_byte_size - total_recv_byte_size)
        if len(received_chunk) == 0:
            raise RuntimeError("socket connection broken")
        yield received_chunk
        total_recv_byte_size += len(received_chunk)

def main():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    server_socket.bind(("127.0.0.1", 54321))
    server_socket.listen()
    print("starting server...")
    client_socket, (client_address, client_port) = server_socket.accept()
    print(f"accepted from {client_address}:{client_port}")
    received_msg = b"".join(recv_msg(client_socket, total_msg_byte_size=8))
    print(f"received: {received_msg}")

    # バイト列を2つの32ビットの整数として解釈する
    # 次の部分で、受信したネットワークバイトオーダーのバイト列をホストバイトオーダーのバイト列に変換している
    # バイトオーダーの変換は、Pythonではstructモジュールを使って実現できます。
    # ネットワークバイトオーダーをホストバイトオーダーに変換するにはunpack()関数を使います。
    # 引数の'!ii'という文字列は、受信したバイト列を2つの4バイト整数として解釈する、という意味です
    (operand1, operand2) = struct.unpack("!ii", received_msg)
    print(f"operand1:{operand1}, operand2:{operand2}")
    result = operand1 + operand2

    print(f"result: {result}")
    # ホストバイトオーダーをネットワークバイトオーダーに変換しているのが次の部分です。
    # ホストバイトオーダーのバイト列からネットワークバイトオーダーのバイト列への変換にはpack()関数を使います。
    # ここでは計算した値を一つの64ビット(8バイト)の整数として解釈できるように変換しています。
    result_msg = struct.pack("!q", result)
    send_msg(client_socket, result_msg)
    print(f"sent: {result_msg}")

    client_socket.close()
    server_socket.close()

if __name__ == "__main__":
    main()


import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout

"""This example places the two buttons in the lower right corner of the window.
When we resize the app window, they are fixed in the lower right corner.
We use both QHBoxLayout and QVBoxLayout layouts."""

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        """A stretch factor was added before adding the two buttons,
        which will push the two buttons to the right side of the window."""

        okButton = QPushButton('OK')
        cancelButton = QPushButton('Cancel')

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)

        """To get the layout we want, we also need to put the horizontal layout into the vertical layout.
        The stretch factor on the vertical box pushes
        the horizontal box including the controls inside to the bottom of the window."""

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)

        """Finally, we set the main layout of the window."""
        self.setLayout(vbox)
        self.setGeometry(300, 300, 350, 150)
        self.setWindowTitle('Box layout example, QHBoxLayout, QVBoxLayout')
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec())


from datetime import datetime

from flask import current_app, flash, redirect, render_template, request, url_for
from flask_login import current_user, login_required

from app import db
from app.email import send_email
from app.models import Message, User
from app.sn import bp
from app.sn.forms import MessageForm, SearchForm, UpdateAccountForm

@bp.route("/edit_profile", methods=["GET", "POST"])
@login_required
def edit_profile():
    """Renders the edit profile page."""
    form = UpdateAccountForm()
    if form.validate_on_submit():
        if form.picture.data:
            current_user.save_picture(form.picture.data)
        current_user.threshold = form.threshold.data
        current_user.days = form.days.data
        current_user.username = form.username.data
        current_user.email = form.email.data
        db.session.commit()
        flash(f"Your account has been updated", "success")
        return redirect(url_for("sn.edit_profile"))
    elif request.method == "GET":
        if current_user.days:
            form.days.data = current_user.days
        if current_user.threshold:
            form.threshold.data = current_user.threshold
        form.username.data = current_user.username
        form.email.data = current_user.email
    if current_user.image_file:
        image_file = url_for(
            "static", filename="profile_pics/" + current_user.image_file
        )
    else:
        image_file = url_for("static", filename="profile_pics/default.jpg")
    return render_template(
        "sn/edit_profile.html", title="Edit Profile", image_file=image_file, form=form
    )

@bp.route("/contacts", methods=["GET", "POST"])
@login_required
def contacts():
    """This renders a paginated page, with all users in the db."""
    form = SearchForm()
    page = request.args.get("page", 1, type=int)
    next_url = None
    prev_url = None
    if form.validate_on_submit():
        people_id = User.query.filter(User.id != current_user.id).filter(
            User.username.like("%" + form.search.data + "%")
        )
        people_email = User.query.filter(User.id != current_user.id).filter(
            User.email.like("%" + form.search.data + "%")
        )
        people = [person_id for person_id in people_id]
        [people.append(person_email) for person_email in people_email]
        people = list(dict.fromkeys(people))
    else:
        people = User.query.filter(User.id != current_user.id).order_by(User.username)
        people = people.paginate(page, current_app.config["POSTS_PER_PAGE"], False)
        if people.has_next:
            next_url = url_for("sn.contacts", page=people.next_num)
        if people.has_prev:
            prev_url = url_for("sn.contacts", page=people.prev_num)
        people = people.items
    return render_template(
        "sn/contacts.html",
        user=current_user,
        people=people,
        form=form,
        next_url=next_url,
        prev_url=prev_url,
    )

@bp.route("/following", methods=["GET", "POST"])
@login_required
def following():
    """renders a page of users who the current.user is following."""
    user = User.query.filter_by(username=current_user.username).first_or_404()
    people = current_user.followed.all()
    return render_template("sn/following.html", user=user, people=people)

@bp.route("/followers", methods=["GET", "POST"])
@login_required
def followers():
    """renders a page of users who follow the current.user."""
    user = User.query.filter_by(username=current_user.username).first_or_404()
    people = current_user.followers.all()
    return render_template("sn/followers.html", user=user, people=people)

@bp.route("/follow_request/<username>", methods=["GET", "POST"])
@login_required
def follow_request(username):
    """
    Sends a token to the user which the current user has requested to follow.

    Emails the token and messgaes the user.
    """

    user = User.query.filter_by(username=username).first_or_404()
    if user is None:
        flash("User {} not found.".format(username))
        return redirect(url_for("sn.contacts", username=current_user.username))
    if user == current_user:
        flash(f"You cannot follow yourself!", "warning")
        return redirect(url_for("sn.contacts", username=current_user.username))
    current_user.pend(user)
    flash(f"your follow request for {username} has been sent!", "warning")
    token = user.get_follow_request_token()
    send_email(
        "[Arhat] Connection Request",
        sender=current_app.config["ADMINS"][0],
        recipients=[user.email],
        text_body=render_template(
            "email/follow_request.txt",
            user=user,
            follow_requester=current_user,
            token=token,
        ),
        html_body=render_template(
            "email/follow_request.html",
            user=user,
            follow_requester=current_user,
            token=token,
        ),
    )
    msg = Message(
        author=current_user,
        recipient=user,
        body="Check your email, I have sent you a connection request",
    )
    db.session.add(msg)
    db.session.commit()

    return redirect(url_for("sn.contacts", username=current_user.username))

@bp.route("/follow/<username>/<follow_requester>/<token>", methods=["GET", "POST"])
def follow(username, follow_requester, token):
    """Receives the token from the user and sets up relationship"""
    user = User.query.filter_by(username=username).first()
    follow_user = User.query.filter_by(username=follow_requester).first()
    verified = User.verify_follow_request_token(token)
    if not verified:
        flash(f"Token not valid.", "danger")
        return render_template("sn/follow.html", title="Follow")
    if user is None:
        flash(f"User {username} not found.", "danger")
        return render_template("sn/follow.html", title="Follow")
    if user == follow_requester:
        flash(f"You cannot follow yourself!", "danger")
        return render_template("sn/follow.html", title="Follow")
    if follow_user.is_following(user):
        flash(f"You are already following this person!", "warning")
        return render_template("sn/follow.html", title="Follow")
    follow_user.follow(user)
    follow_user.unpend(user)
    db.session.commit()
    flash(f"You are following {follow_requester}!", "success")
    return render_template("sn/follow.html", title="Follow")

@bp.route("/unfollow/<username>")
@login_required
def unfollow(username):
    """Allows the curret user to unfollow a user"""
    user = User.query.filter_by(username=username).first()
    if user is None:
        flash(f"User {username} not found.", "danger")
        return redirect(url_for("sn.contacts"))
    if user == current_user:
        flash(f"You cannot unfollow yourself!", "danger")
        return redirect(url_for("sn.contacts", username=username))
    current_user.unfollow(user)
    db.session.commit()
    flash(f"You are not following {username}.", "danger")
    return redirect(url_for("sn.contacts", username=username))

@bp.route("/send_message/<recipient>", methods=["GET", "POST"])
@login_required
def send_message(recipient):
    """Sends a private message to another user."""
    user = User.query.filter_by(username=recipient).first_or_404()
    form = MessageForm()
    if form.validate_on_submit():
        msg = Message(author=current_user, recipient=user, body=form.message.data)
        db.session.add(msg)
        db.session.commit()
        flash("Your message has been sent.", "success")
        return redirect(url_for("sn.sent_messages"))
    return render_template(
        "sn/send_message.html", title="Send Message", form=form, recipient=recipient
    )

@bp.route("/reply/<recipient>/<ident>", methods=["GET", "POST"])
@login_required
def reply(recipient, ident):
    """Allows a user to reply to a specific message."""
    user = User.query.filter_by(username=recipient).first_or_404()
    form = MessageForm()
    message = Message.query.filter_by(id=ident).first_or_404()
    time = message.timestamp.strftime("%d/%m/%Y %H:%M:%S")
    form.message.data = f"Quote: {message.body}, sent on {time}"
    if form.validate_on_submit():
        msg = Message(author=current_user, recipient=user, body=form.message.data)
        db.session.add(msg)
        db.session.commit()
        flash("Your message has been sent.", "success")
        return redirect(url_for("sn.sent_messages"))
    return render_template(
        "sn/reply.html", title="Send Message", form=form, recipient=recipient
    )

@bp.route("/messages")
@login_required
def messages():
    """Renders a page of private receievd messages."""
    current_user.last_message_read_time = datetime.utcnow()
    db.session.commit()
    page = request.args.get("page", 1, type=int)
    messages = current_user.messages_received.order_by(
        Message.timestamp.desc()
    ).paginate(page, current_app.config["POSTS_PER_PAGE"], False)
    next_url = (
        url_for("sn.messages", page=messages.next_num) if messages.has_next else None
    )
    prev_url = (
        url_for("sn.messages", page=messages.prev_num) if messages.has_prev else None
    )
    return render_template(
        "sn/messages.html",
        messages=messages.items,
        next_url=next_url,
        prev_url=prev_url,
    )

@bp.route("/sent_messages")
@login_required
def sent_messages():
    """Renders a page of paginated messages sent by the current user."""
    current_user.last_message_read_time = datetime.utcnow()
    db.session.commit()
    page = request.args.get("page", 1, type=int)
    sent_messages = current_user.messages_sent.order_by(
        Message.timestamp.desc()
    ).paginate(page, current_app.config["POSTS_PER_PAGE"], False)
    sent_next_url = (
        url_for("sn.sent_messages", page=sent_messages.next_num)
        if sent_messages.has_next
        else None
    )
    sent_prev_url = (
        url_for("sn.sent_messages", page=sent_messages.prev_num)
        if sent_messages.has_prev
        else None
    )
    return render_template(
        "sn/sent_messages.html",
        sent_messages=sent_messages.items,
        sent_next_url=sent_next_url,
        sent_prev_url=sent_prev_url,
    )