Skip to content

Commit

Permalink
Cambios para preparar la prueba del martes
Browse files Browse the repository at this point in the history
  • Loading branch information
dcsibon committed Oct 27, 2024
1 parent 4739f3f commit 37a7f52
Showing 1 changed file with 79 additions and 65 deletions.
144 changes: 79 additions & 65 deletions otros/adivinar_numero_v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def limpiar_pantalla():
os.system('clear')


def pausa(tiempo: int, tecla_enter = False, limpiar_pantalla = True):
def pausa(tiempo = 0, tecla_enter = False, limpiar = True):
"""
Realiza una pausa hasta que el usuario presione ENTER.
Expand All @@ -40,6 +40,33 @@ def pausa(tiempo: int, tecla_enter = False, limpiar_pantalla = True):
limpiar_pantalla()


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 mostrar_error(msjError: str):
"""Muestra un mensaje de error en la consola y pausa la ejecución.
Args:
msjError (str): Mensaje de error que se mostrará al usuario.
"""
print("\n*ERROR* " + str(msjError))
pausa(1)


def evaluar_diferencia(numero: int, numero_oculto: int, frio: int, caliente: int) -> int:
"""
Evalúa la distancia entre el número oculto y el ingresado, y devuelve un código numérico
Expand Down Expand Up @@ -77,9 +104,9 @@ def evaluar_diferencia(numero: int, numero_oculto: int, frio: int, caliente: int
return 2 # Te Quemas


def mostrar_pista(numero: int, numero_oculto: int, intentos: int, frio: int, caliente: int):
def obtener_pista(numero: int, numero_oculto: int, intentos: int, frio: int, caliente: int) -> str:
"""
Muestra una pista combinando la distancia (frío, caliente, te quemas) y si el número oculto
Obtiene una pista combinando la distancia (frío, caliente, te quemas) y si el número oculto
es mayor o menor.
Args:
Expand All @@ -88,6 +115,9 @@ def mostrar_pista(numero: int, numero_oculto: int, intentos: int, frio: int, cal
intentos (int): Cantidad de intentos restantes.
frio (int): Diferencia máxima para considerar la pista como "Frío".
caliente (int): Diferencia máxima para considerar la pista como "Caliente".
Returns:
str: Frase con la pista para el juego.
"""
diferencia_code = evaluar_diferencia(numero, numero_oculto, frio, caliente)

Expand All @@ -111,7 +141,7 @@ def mostrar_pista(numero: int, numero_oculto: int, intentos: int, frio: int, cal
else:
pista += f"¡te queda {intentos} intento!\n"

print(f"\n{pista}")
return pista


def adivina_el_numero(numero_oculto: int, total_intentos: int, frio: int, caliente: int):
Expand All @@ -127,40 +157,34 @@ def adivina_el_numero(numero_oculto: int, total_intentos: int, frio: int, calien
Returns:
tuple: Un booleano que indica si el número fue adivinado y el número de intentos realizados.
"""
# Hacer un bucle hasta que se adivine el número o realice todos los intentos posibles...
# Utiliza pedir_numero_usuario("¿Qué número es? ") pero cuidado con la Excepción que debes controlar AQUÍ.
# Muestra la pista con obtener_pista() si el número introducido no es el oculto.
# La función debe retornar si el número fue adivinado y los intentos realizados.
intentos_realizados = 0
numero_adivinado = False
salir = False

while not salir and total_intentos > 0:
numero = pedir_numero_usuario("¿Qué número es? ")
intentos_realizados += 1
total_intentos -= 1

if numero != numero_oculto:
mostrar_pista(numero, numero_oculto, total_intentos, frio, caliente)
else:
numero_adivinado = True
salir = True

return numero_adivinado, intentos_realizados
while not numero_adivinado and total_intentos > 0:

numero = None
try:
numero = pedir_numero_usuario("¿Qué número es? ")
except ValueError as e:
mostrar_error(e)

def comprobar_numero_entero(valor: str) -> bool:
"""
Verifica si el valor ingresado es un número entero válido.
if numero != None:
intentos_realizados += 1
total_intentos -= 1

Args:
valor (str): Valor ingresado por el usuario.
if numero != numero_oculto:
print(f"\n{obtener_pista(numero, numero_oculto, total_intentos, frio, caliente)}")
else:
numero_adivinado = True

Returns:
bool: True si el valor es un número entero válido, False en caso contrario.
"""
if valor.startswith("-"):
valor = valor[1:]
return valor.isdigit()
return numero_adivinado, intentos_realizados


def pedir_numero_usuario(mensaje: str) -> int:
def pedir_numero_usuario(mensaje: str, minimo: int = None, maximo: int = None) -> int:
"""
Solicita al usuario que introduzca un número entero válido.
Expand All @@ -169,17 +193,19 @@ def pedir_numero_usuario(mensaje: str) -> int:
Returns:
int: Número entero ingresado por el usuario.
Exceptions:
ValueError: Si el valor introducido no puede convertirse a un número entero.
"""
salir = False

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!")
num = int(input(mensaje).strip())

if minimo != None and num < minimo:
raise ValueError("")

return int(valor)
if maximo != None and num > maximo:
raise ValueError("")

return num


def configurar_rangos_numeros() -> tuple:
Expand All @@ -198,7 +224,7 @@ def configurar_rangos_numeros() -> tuple:
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...")
mostrar_error("Debe haber por lo menos 100 números de diferencia entre ellos...")

return minimo, maximo

Expand All @@ -223,7 +249,7 @@ def configurar_pistas(minimo: int, maximo: int) -> tuple:
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...")
mostrar_error(f"Deben estar dentro del rango ({minimo}.{maximo}) y no ser iguales...")

return frio, caliente

Expand All @@ -243,28 +269,11 @@ def configurar_intentos() -> int:
salir = intentos > 0

if not salir:
print("\n*ERROR* El número de intentos debe ser un entero positivo...")
mostrar_error("El número de intentos debe ser un entero positivo...")

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 Down Expand Up @@ -335,15 +344,20 @@ def elegir_opcion_menu() -> int:
Returns:
int: La opción elegida por el usuario.
"""
mostrar_menu()
salir = False
opcion_correcta = False

while not salir:
opcion = pedir_numero_usuario("Elije => ")
salir = comprobar_opcion(opcion)
while not opcion_correcta:
mostrar_menu()
try:
opcion = pedir_numero_usuario("Elije => ")

except ValueError as e:
mostrar_error("Ha introducido un número entero no válido!")
else:
opcion_correcta = comprobar_opcion(opcion)

if not salir:
print(f"\n*ERROR* Opción {opcion} incorrecta! (1-4)")
if not opcion_correcta:
mostrar_error(f"Opción {opcion} incorrecta! (1-4)")

return opcion

Expand Down

0 comments on commit 37a7f52

Please sign in to comment.