Skip to content

Commit

Permalink
Modificaciones para aclarar el código y algún test más
Browse files Browse the repository at this point in the history
  • Loading branch information
dcsibon committed Oct 13, 2024
1 parent 3277a46 commit 1000cab
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 12 deletions.
File renamed without changes.
38 changes: 32 additions & 6 deletions src/adivinar_numero_v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,16 @@
import time


TITULOS = (
"--- SECCIÓN NO DEFINIDA ---",
"--- BIENVENIDOS AL JUEGO DE ADIVINAR EL NÚMERO OCULTO ---",
"--- MENÚ DE ADIVINA EL NÚMERO OCULTO ---",
"--- ADIVINA EL NÚMERO OCULTO EN {intentos} INTENTOS ---",
"--- CONFIGURA EL JUEGO DE ADIVINA EL NÚMERO OCULTO ---",
"--- CONFIGURACIÓN ACTUAL DE ADIVINA EL NÚMERO OCULTO ---",
)


def limpiar_pantalla():
"""
Limpia la consola según el sistema operativo.
Expand All @@ -22,7 +32,6 @@ def pausa():
También limpia la pantalla después de que el usuario presiona ENTER.
"""
input("\nPresione ENTER para continuar...")
input("\nPresione ENTER para continuar...")
limpiar_pantalla()


Expand Down Expand Up @@ -217,6 +226,23 @@ def configurar_intentos() -> int:
return intentos


def mostrar_titulo(seccion: int, intentos: int = 0):
"""
Muestra el título correspondiente a la sección del juego.
Args:
seccion (int): El identificador de la sección. Los valores válidos son de 1 a 5.
intentos (int): Número de intentos que puede ser usado en el título si corresponde.
"""
if 0 < seccion < len(TITULOS):
if intentos > 0:
print(TITULOS[seccion].format(intentos = intentos) + "\n\n")
else:
print(f"{TITULOS[seccion]}\n\n")
else:
print(f"{TITULOS[0]}\n\n")


def configurar_juego() -> tuple:
"""
Configura todos los parámetros del juego: rango de números, pistas e intentos.
Expand All @@ -225,7 +251,7 @@ def configurar_juego() -> tuple:
tuple: Mínimo, máximo, número de intentos, valor para "Frío" y valor para "Caliente".
"""
limpiar_pantalla()
print("--- CONFIGURA EL JUEGO DE ADIVINA EL NÚMERO OCULTO ---\n\n")
mostrar_titulo(4)

minimo, maximo = configurar_rangos_numeros()
frio, caliente = configurar_pistas(minimo, maximo)
Expand All @@ -246,7 +272,7 @@ def mostrar_configuracion(minimo, maximo, intentos, frio, caliente):
caliente (int): Diferencia mayor para la pista "Caliente".
"""
limpiar_pantalla()
print(f"--- CONFIGURACIÓN ACTUAL DE ADIVINA EL NÚMERO OCULTO ---\n\n")
mostrar_titulo(5)
print(f"* El número oculto será un número entre {minimo} y {maximo}.")
print(f"* El número de intentos es {intentos}.")
print(f"* Pista FRÍO si la diferencia es mayor a {frio}.")
Expand All @@ -260,7 +286,7 @@ def mostrar_menu():
Muestra el menú principal del juego.
"""
limpiar_pantalla()
print(f"--- MENÚ DE ADIVINA EL NÚMERO OCULTO ---\n\n")
mostrar_titulo(2)
print("1. Jugar.")
print("2. Configurar.")
print("3. Mostrar configuración.")
Expand Down Expand Up @@ -311,7 +337,7 @@ def jugar(numero_oculto, intentos, frio, caliente):
caliente (int): Diferencia máxima para la pista "Caliente".
"""
limpiar_pantalla()
print(f"--- ADIVINA EL NÚMERO OCULTO EN {intentos} INTENTOS ---\n\n")
mostrar_titulo(3, intentos)
numero_adivinado, intentos_realizados = adivina_el_numero(numero_oculto, intentos, frio, caliente)

if numero_adivinado:
Expand Down Expand Up @@ -342,7 +368,7 @@ def main():
Configura los parámetros iniciales y gestiona el bucle principal del menú.
"""
limpiar_pantalla()
print("--- BIENVENIDOS AL JUEGO DE ADIVINAR EL NÚMERO OCULTO ---\n\n")
mostrar_titulo(1)
time.sleep(2)

# Configuración inicial por defecto
Expand Down
88 changes: 82 additions & 6 deletions tests/test_adivinar_numero_v3.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
import pytest

from src.adivinar_numero_v3 import (
evaluar_distancia, generar_pista, mostrar_pista,
adivina_el_numero, comprobar_numero_entero, pedir_numero_usuario,
configurar_rangos_numeros, configurar_pistas, configurar_intentos,
genera_numero_oculto
)
from src.adivinar_numero_v3 import *

###################################################################################################

Expand Down Expand Up @@ -192,3 +187,84 @@ def test_configurar_intentos(mock_input, expected, monkeypatch):

# Probar si los intentos son configurados correctamente
assert configurar_intentos() == expected

###################################################################################################

@pytest.mark.parametrize(
"seccion, intentos, expected_output",
[
(1, 0, "--- BIENVENIDOS AL JUEGO DE ADIVINAR EL NÚMERO OCULTO ---\n\n\n"),
(2, 0, "--- MENÚ DE ADIVINA EL NÚMERO OCULTO ---\n\n\n"),
(3, 5, "--- ADIVINA EL NÚMERO OCULTO EN 5 INTENTOS ---\n\n\n"),
(0, 0, "--- SECCIÓN NO DEFINIDA ---\n\n\n"), # Sección no válida, debería usar el título por defecto
(3, 0, "--- ADIVINA EL NÚMERO OCULTO EN {intentos} INTENTOS ---\n\n\n"), # Sección con intentos en 0, no formatea
(10, 0, "--- SECCIÓN NO DEFINIDA ---\n\n\n"), # Sección fuera de rango, debería usar el título por defecto
]
)
def test_mostrar_titulo(capsys, seccion, intentos, expected_output):
# Ejecutar la función mostrar_titulo
mostrar_titulo(seccion, intentos)

# Capturar la salida impresa
captured = capsys.readouterr()

# Verificar que la salida sea la esperada
assert captured.out == expected_output

###################################################################################################

@pytest.mark.parametrize(
"opcion, expected",
[
(1, True), # Opción válida
(4, True), # Opción válida
(0, False), # Opción inválida (menor a 1)
(5, False), # Opción inválida (mayor a 4)
]
)
def test_comprobar_opcion(opcion, expected):
assert comprobar_opcion(opcion) == expected

###################################################################################################

@pytest.mark.parametrize(
"mock_inputs, expected",
[
(['0', '1'], 1), # Entrada inválida seguida de entrada válida
(['abc', '2'], 2), # Entrada no numérica seguida de entrada válida
(['4'], 4), # Entrada válida en el primer intento
]
)
def test_elegir_opcion_menu(mock_inputs, expected, monkeypatch):
# Simular las entradas del usuario
inputs_iter = iter(mock_inputs)
monkeypatch.setattr('builtins.input', lambda _: next(inputs_iter))

# Probar si la opción es configurada correctamente
assert elegir_opcion_menu() == expected

###################################################################################################

def test_mostrar_menu(capsys):
mostrar_menu()
captured = capsys.readouterr()
expected_output = "--- MENÚ DE ADIVINA EL NÚMERO OCULTO ---\n\n\n1. Jugar.\n2. Configurar.\n3. Mostrar configuración.\n4. Salir.\n\n"
assert captured.out == expected_output

###################################################################################################

@pytest.mark.parametrize(
"mock_inputs, expected",
[
(['0', '200', '30', '10', '5'], (0, 200, 5, 30, 10)), # Rango válido, pistas válidas, intentos válidos
(['1', '500', '50', '20', '7'], (1, 500, 7, 50, 20)), # Otro set válido
]
)
def test_configurar_juego(mock_inputs, expected, monkeypatch):
# Simular entradas para rango, pistas e intentos
inputs_iter = iter(mock_inputs)
monkeypatch.setattr('builtins.input', lambda _: next(inputs_iter))

# Probar si el juego es configurado correctamente
assert configurar_juego() == expected

0 comments on commit 1000cab

Please sign in to comment.