Skip to content

Commit

Permalink
Versión 3 finalizada con documentación y tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dcsibon committed Oct 13, 2024
1 parent 36a2602 commit 3277a46
Show file tree
Hide file tree
Showing 3 changed files with 622 additions and 37 deletions.
90 changes: 53 additions & 37 deletions src/adivinar_numero_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,6 @@ def pausa():
limpiar_pantalla()


def mostrar_pista(numero: int, numero_oculto: int, intentos: int, frio: int, caliente: int):
"""Muestra la pista basada en la diferencia entre el número y el número oculto."""
pista = generar_pista(numero, numero_oculto, intentos)
estado_calor = evaluar_distancia(numero, numero_oculto, frio, caliente)
print(f"\n{estado_calor} {pista}")


def generar_pista(numero: int, numero_oculto: int, intentos: int) -> str:
"""Genera un mensaje de pista indicando si el número oculto es mayor o menor."""
if numero_oculto > numero:
return f"el número oculto es MAYOR... ¡te quedan {intentos} intentos!\n"
else:
return f"el número oculto es MENOR... ¡te quedan {intentos} intentos!\n"


def evaluar_distancia(numero: int, numero_oculto: int, frio: int, caliente: int) -> str:
"""Evalúa la distancia entre el número oculto y el ingresado y devuelve el estado."""
diferencia = abs(numero_oculto - numero)
Expand All @@ -44,6 +29,21 @@ def evaluar_distancia(numero: int, numero_oculto: int, frio: int, caliente: int)
return "* TE QUEMAS,"


def generar_pista(numero: int, numero_oculto: int, intentos: int) -> str:
"""Genera un mensaje de pista indicando si el número oculto es mayor o menor."""
if numero_oculto > numero:
return f"el número oculto es MAYOR... ¡te quedan {intentos} intentos!\n"
else:
return f"el número oculto es MENOR... ¡te quedan {intentos} intentos!\n"


def mostrar_pista(numero: int, numero_oculto: int, intentos: int, frio: int, caliente: int):
"""Muestra la pista basada en la diferencia entre el número y el número oculto."""
pista = generar_pista(numero, numero_oculto, intentos)
estado_calor = evaluar_distancia(numero, numero_oculto, frio, caliente)
print(f"\n{estado_calor} {pista}")


def adivina_el_numero(numero_oculto: int, total_intentos: int, frio: int, caliente: int):
"""Gestiona el proceso de adivinación del número oculto."""
intentos_realizados = 0
Expand Down Expand Up @@ -73,50 +73,61 @@ def comprobar_numero_entero(valor: str) -> bool:

def pedir_numero_usuario(mensaje: str) -> int:
"""Pide al usuario que introduzca un número entero, validándolo."""
valor = input(mensaje).strip()
salir = False

while not comprobar_numero_entero(valor):
print("\n*ERROR* Ha introducido un número entero no válido!")
while not salir:
valor = input(mensaje).strip()
salir = comprobar_numero_entero(valor)

if not salir:
print("\n*ERROR* Ha introducido un número entero no válido!")

return int(valor)


def genera_numero_oculto(minimo: int, maximo: int) -> int:
"""Genera un número oculto aleatorio dentro de un rango."""
return random.randint(minimo, maximo)


def configurar_rangos_numeros() -> tuple:
"""Configura el rango de números válidos para el juego."""
minimo = pedir_numero_usuario("Introduce el mínimo número posible: ")
maximo = pedir_numero_usuario("Introduce el máximo número posible: ")
salir = False

while not (minimo < maximo and (maximo - minimo) >= 100):
print("\n*ERROR* Debe haber por lo menos 100 números de diferencia entre ellos...")
while not salir:
minimo = pedir_numero_usuario("Introduce el mínimo número posible: ")
maximo = pedir_numero_usuario("Introduce el máximo número posible: ")

salir = (minimo < maximo) and ((maximo - minimo) >= 100)

if not salir:
print("\n*ERROR* Debe haber por lo menos 100 números de diferencia entre ellos...")

return minimo, maximo


def configurar_pistas(minimo: int, maximo: int) -> tuple:
"""Configura los valores de frío y caliente para las pistas."""
frio = pedir_numero_usuario("Introduce la diferencia para mostrar la pista FRÍO, FRÍO: ")
caliente = pedir_numero_usuario("Introduce la diferencia para mostrar la pista CALIENTE, CALIENTE: ")
salir = False

while not (frio > caliente and minimo <= frio <= maximo and minimo <= caliente <= maximo):
print(f"\n*ERROR* Deben estar dentro del rango ({minimo}.{maximo}) y no ser iguales...")
while not salir:
frio = pedir_numero_usuario("Introduce la diferencia para mostrar la pista FRÍO, FRÍO: ")
caliente = pedir_numero_usuario("Introduce la diferencia para mostrar la pista CALIENTE, CALIENTE: ")

salir = (frio > caliente) and (minimo <= frio <= maximo) and (minimo <= caliente <= maximo)

if not salir:
print(f"\n*ERROR* Deben estar dentro del rango ({minimo}.{maximo}) y no ser iguales...")

return frio, caliente


def configurar_intentos() -> int:
"""Configura el número de intentos para adivinar el número oculto."""
return pedir_numero_usuario("Introduce el número de intentos: ")
salir = False

while not salir:
intentos = pedir_numero_usuario("Introduce el número de intentos: ")
salir = intentos > 0
if not salir:
print("\n*ERROR* El número de intentos debe ser un entero positivo...")

return intentos

def configurar_juego() -> tuple:
"""Configura todos los parámetros del juego: rango, pistas e intentos."""
Expand Down Expand Up @@ -152,6 +163,11 @@ def mostrar_menu():
print("4. Salir.\n")


def comprobar_opcion(opcion: int) -> bool:
"""Comprueba si la opción elegida está en el rango permitido."""
return 1 <= opcion <= 4


def elegir_opcion_menu() -> int:
"""Permite al usuario elegir una opción del menú."""
mostrar_menu()
Expand All @@ -164,11 +180,6 @@ def elegir_opcion_menu() -> int:
return opcion


def comprobar_opcion(opcion: int) -> bool:
"""Comprueba si la opción elegida está en el rango permitido."""
return 1 <= opcion <= 4


def jugar(numero_oculto, intentos, frio, caliente):
"""Gestiona el proceso de juego y muestra los resultados."""
limpiar_pantalla()
Expand All @@ -183,6 +194,11 @@ def jugar(numero_oculto, intentos, frio, caliente):
pausa()


def genera_numero_oculto(minimo: int, maximo: int) -> int:
"""Genera un número oculto aleatorio dentro de un rango."""
return random.randint(minimo, maximo)


def main():
"""Función principal del juego."""
limpiar_pantalla()
Expand Down
Loading

0 comments on commit 3277a46

Please sign in to comment.