Juego de Multiplicar en Python

Vamos a elaborar un script que sea un juego de multiplicar en python, propuesto por el libro que estamos repasando y puede servir para que los niños jueguen y repasen a la vez las tablas de multiplicar.

Libro: Intro to Python® for Computer Science and Data Science
Autor: Paul Deitel / Harvey Deitel

4.10 (Play the Multiplication Game) Write a script that lets the user play a multiplica-
tion  game.  To  begin,  the  game  randomly  selects  two  numbers  between  1  and  10.
It displays the selected numbers and asks the player for the product of both numbers. If
the player answers correctly, they are asked if they want to play again. This cycle is contin-
ued until the player makes a mistake or stops the game.

Se nos pide que aleatoriamente se escojan dos números entre 1 y 10, y se le pregunta al usuario el resultado de multiplicar ambos números. Si contesta correctamente se le pregunta si desea volver a jugar. El ciclo continua hasta que el jugador se equivoca o detiene el juego.

A este planteamiento le vamos a modificar para hacer más dinámico y entretenido el juego. Si el jugador contesta correctamente, omitimos la pregunta y continuamos hasta que se equivoque o si desea terminar, debe responder 0.

Código

Primero vamos a crear una función que nos genere los dos números aleatorios. Y como vamos a ocupar las funciones de random, debemos importar la librería para que funcione:

import random

def numbers():
    a = random.randrange(1,10)
    b = random.randrange(1,10)
    return (a,b)

En esta función no le necesitamos pasar argumentos. Como vamos a generar 2 números aleatorios asignamos a las variables a y b un valor aleatorio entre 1 y 10 con la función random.randrange(1,10) y retornamos una tupla con esos valores.

Ahora debemos crear el código para el juego.

Definimos una variable «choice» con el carácter ‘s‘ con la cuál controlaremos si se puede seguir jugando, si el jugador decidió salir, o si se equivocó al responder. También inicializamos una variable «puntos» donde se irán acumulando los ganados en el juego.

La parte principal del juego será un ciclo while donde estaremos comprobando el valor de choice para saber si seguimos jugando (cuando choice sea igual a ‘s‘) o si el juego terminó (cuando choice sea diferente a ‘s‘).

Al iniciar el ciclo, llamamos a la función que hicimos al principio y el resultado de la tupla lo guardamos en num1 y num2, después le preguntamos al usuario el resultado de multiplicar esos números.

Comparamos su respuesta con el resultado:

  • Si es correcta se lo hacemos saber y agregamos 1 punto al marcador
  • si es 0 significa que el jugador decidió terminar el juego
  • si es incorrecta el juego termina.

En los dos últimos casos, el valor de choice cambia a ‘n‘ (o cualquier valor diferente de ‘s‘) y con eso saldremos del ciclo while.

Para finalizar el programa, se muestra el número de puntos que ganó el jugador.

El código quedaría así:

import random

# Función para obtener 2 numeros aleatorios entre 1 y 10
def numbers():
    a = random.randrange(1,10)
    b = random.randrange(1,10)
    return (a,b)

# Inicializamos las variables para control del ciclo y los puntos ganados
choice = 's'
puntos = 0

# comenzamos el ciclo, seguira mientras el valor de choice sea 's'
while choice == 's':
    # Llamamos a la función y guardamos el resultado en 2 variables
    num1,num2 = numbers()
    # Preguntamos al usuario el valor de la multiplicación e indicamos como salir del juego
    print('Digite 0 si desea terminar.')
    ans = int(input(f'¿Cual es el resultado de multiplicar {num1} x {num2}?: '))
    # Comparamos su respuesta con el resultado
    # Si es correcta continua y gana 1 punto
    if ans == (num1 * num2):
        print(f'La respuesta es correcta!!!.\n')
        puntos += 1
    # Si es 0 el jugador termina el juego
    elif ans == 0:
        print('Juego terminado por el usuario')
        choice = 'n'
    # si la respuesta es incorrecta el jugador pierde y no continua
    else:
        print(f'La respuesta no es correcta, debe ser {num1*num2}')
        print('GAME OVER')
        choice = 'n'

# Se muestran los puntos ganados
print(f'Su marcador fue de {puntos} puntos.')

Y al ejecutarlo vemos que cumple con lo que planteamos:

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 2 x 8?: 16
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 4 x 2?: 8
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 3 x 2?: 6
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 2 x 4?: 8
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 3 x 4?: 12
La respuesta es correcta!!!.

Digite 0 si desea terminar. 
¿Cual es el resultado de multiplicar 2 x 4?: 8
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 2 x 1?: 2
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 3 x 1?: 3
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 3 x 5?: 15
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 7 x 5?: 35
La respuesta es correcta!!!.

Digite 0 si desea terminar.
¿Cual es el resultado de multiplicar 5 x 3?: 0
Juego terminado por el usuario
Su marcador fue de 10 puntos.

Como siempre, espero que les sirva este ejercicio, si desean comentar, corregir, optimizar, etc, pueden hacerlo aquí abajo o en nuestra página de facebook.

Te puede interesar: