es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Entrada de usuario solo al final del bucle mientras.

Quiero que la entrada del usuario “continuar jugando” solo aparezca cuando todos los intentos se hayan agotado en el juego de adivinanzas.

from random import random, randint
import random

# Juego de Adivinanzas
intentos = 5

print("===ADIVINA EL NÚMERO===")
print(f"OBJETIVO DEL JUEGO: Adivina el número de la computadora en {intentos} intentos.")

running = True

numeroComputadora = random.randint(1,15)

while running == True:

    intento = int(input("Adivina el número:\n>"))
    print("\n")

    if intento > numeroComputadora:
        print("Más bajo...")
        intentos -= 1
        print(f"[Te quedan {intentos} intentos]")

    if intento < numeroComputadora:
        print("Más alto...")
        intentos -= 1
        print(f"[Te quedan {intentos} intentos]")

    if intentos == 0:
        print("¡GAME OVER!")
        print(f"El número de la computadora es {numeroComputadora}")
        break

    if intento == numeroComputadora:
        print("¡Has adivinado el número!")
        print("¡GANASTE!")
        break

    print("\n")

    jugarDeNuevo = input("¿Quieres seguir jugando (S/N):\n")

    if jugarDeNuevo in ("N","n"):
        break

El problema con este código ahora es que cada vez que adivinas el número, sigue preguntando si deseas continuar jugando.

También quiero que la consola imprima "No es un número" cada vez que se ingrese cualquier cosa aparte de un número.

if not guess.isdigit():
        print("Ingresa un número")

Esta es mi idea aproximada hasta ahora, pero sigo recibiendo mensajes de error.

Soy principiante, por cierto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para que la opción de entrada del usuario “continuar jugando” solo aparezca cuando se agoten todos los intentos, puedes mover la instrucción que pregunta si el usuario quiere continuar jugando dentro del bloque de código que verifica si attempts == 0. De esta manera, la única vez que se solicita al usuario que continúe jugando es si ya ha agotado todos sus intentos.

    Para imprimir “No es un número” cada vez que se ingrese algo que no sea un número, puedes usar un bloque try-except para capturar cualquier excepción de ValueError que ocurra al intentar convertir la entrada del usuario a un entero.

    Aquí tienes una versión actualizada del código que incorpora estos cambios:

    from random import random, randint
    import random
    
    # Juego de adivinanzas
    attempts = 5
    
    print("=== ADIVINA EL NÚMERO ===")
    print(f"OBJETIVO DEL JUEGO: Adivina el número de la computadora en {attempts} intentos")
    
    running = True
    
    computerNum = random.randint(1, 15)
    
    while running == True:
    
        try:
            guess = int(input("Adivina el número:\n>"))
            print("\n")
        except ValueError:
            print("No es un número\n")
            continue
    
        if guess > computerNum:
            print("Más bajo...")
            attempts -= 1
            print(f"[Te quedan {attempts} intentos]")
    
        if guess < computerNum:
            print("Más alto...")
            attempts -= 1
            print(f"[Te quedan {attempts} intentos]")
    
        if attempts == 0:
            print("¡¡¡FIN DEL JUEGO!!!")
            print(f"El número de la computadora es {computerNum}")
            play_again = input("¿Quieres seguir jugando (S/N):\n")
            if play_again in ("N", "n"):
                break
            attempts = 5
            computerNum = random.randint(1, 15)
            print("=== ADIVINA EL NÚMERO ===")
            print(f"OBJETIVO DEL JUEGO: Adivina el número de la computadora en {attempts} intentos")
    
        if guess == computerNum:
            print("¡Has adivinado el número!")
            print("¡GANASTE!")
            break
    
        print("\n")
    

    Aquí, el bloque try-except captura cualquier excepción de ValueError que ocurra al intentar convertir la entrada del usuario a un entero. Si se captura una excepción, imprime “No es un número” y continúa con la siguiente iteración del bucle.

    La instrucción que pregunta si el usuario quiere continuar jugando se mueve dentro del bloque de código que verifica si attempts == 0. De esta manera, solo aparece cuando el usuario ha agotado todos sus intentos. Si el usuario elige continuar jugando, el número de intentos se restablece a 5 y se genera un nuevo número aleatorio para que el juego continúe.

Comments are closed.