Esta actividad, al igual que la actividad obligatoria previa, consiste en realizar la programación literaria de un nuevo código, que se había había llevado a cabo en la materia de Programación, aplicaciones, herramientas y soportes por algún grupo de nuestros compañeros.
A continuación se muestra el código y se explica con programación literaria, como indica la actividad:
import random
intentosRealizados = 0
numero = random.randint(1, 100)
print("Juego del Calamar. Adivina el número secreto o morirás.")
print("Quiero saber quién eres. Escribe tu nombre.")
nombre = input()
print("Jugador", nombre, "," " tienes diez intentos para salvar tu vida. ¿Quieres continuar? Responde si o no.")
resp = input ()
while (resp == "si","no"):
if (resp == "si"):
print("Muy bien. Eres valiente. Escribe tu primer intento")
if (resp == "no"):
print("Te jodiste. Igual debes continuar o morirás. Escribe tu primer intento.")
break
while intentosRealizados < 10:
estimacion = input()
estimacion = int(estimacion)
intentosRealizados = intentosRealizados + 1
if estimacion < numero:
print("Tu estimación es muy baja. Te quedan", 10-intentosRealizados, "intentos")
if estimacion > numero:
print('Tu estimación es muy alta. Te quedan', 10-intentosRealizados,"intentos")
if estimacion == numero:
break;
if estimacion == numero:
print('¡Has adivinado el número secreto en ' , intentosRealizados , 'intentos! Te salvaste')
if estimacion != numero:
print('El número era', numero,"; Vas a morir.")
Este código, denominado Juego del Calamar, es un código básico empleado en muchas ocasiones para el aprendizaje de programación. Se trata de un juego en el que el usuario/jugador debe adivinar en menos de 10 intentos el número aleatorio que ha pensado la máquina para ganar.
En el caso de esta actividad, tan solo empleamos la librería random
, que no es necesario instalar, ya que se trata de un módulo propio de Python, que permite generar números aleatorios.
import random
A continuación, vamos a realizar una serie de objetos o variables:
intentosRealizados
al que le daremos un valor inicial de 0.intentosRealizados = 0
numero
, que consiste en la selección de un número aleatorio a través de la librería previamente creada. Para ello, se le indica que queremos que el número seleccionado sea un valor entre 0 y 100. El código para ello es numero = random.randint(1, 100)
.numero = random.randint(1, 100)
print
.print("Juego del Calamar. Adivina el número secreto o morirás.")
print("Quiero saber quién eres. Escribe tu nombre.")
Juego del Calamar. Adivina el número secreto o morirás.
Quiero saber quién eres. Escribe tu nombre.
nombre = input()
con valor de entrada de texto. El usuario/jugador deberá escribir su nombre y pulsar enter para que este se registre y continúe el juego.nombre = input()
Iria
print
.print("Jugador", nombre, "," " tienes diez intentos para salvar tu vida. ¿Quieres continuar? Responde si o no.")
Jugador Iria , tienes diez intentos para salvar tu vida. ¿Quieres continuar? Responde si o no.
resp
. El usuario/jugador deberá responder si o no. Se añade posteriormente un bucle while
cuyas respuestas posibles son si
y no
. Mientras el resultado sea igual a si
se imprimirá el texto Muy bien. Eres valiente. Escribe tu primer intento. Si la respuesta es no
se imprimirá el texto Te jodiste. Igual debes continuar o morirás. Escribe tu primer intento. Esto obligará al jugador a continuar con el juego. Al no existir otras opciones, si la respuesta es otra no habrá ninguna impresión.resp = input ()
while (resp == "si","no"):
if (resp == "si"):
print("Muy bien. Eres valiente. Escribe tu primer intento")
if (resp == "no"):
print("Te jodiste. Igual debes continuar o morirás. Escribe tu primer intento.")
break
si
Muy bien. Eres valiente. Escribe tu primer intento
while
, pero en este caso el condicional es el número de intentos, que mientras es inferior a 10 estará en funcionamiento.estimación
, que deberá ser obligatoriamente un entero, por ello se añade el siguiente código estimacion = int(estimacion)
.intentosRealizados
.while intentosRealizados < 10:
estimacion = input()
estimacion = int(estimacion)
intentosRealizados = intentosRealizados + 1
if estimacion < numero:
print("Tu estimación es muy baja. Te quedan", 10-intentosRealizados, "intentos")
if estimacion > numero:
print('Tu estimación es muy alta. Te quedan', 10-intentosRealizados,"intentos")
if estimacion == numero:
break;
if estimacion == numero:
print('¡Has adivinado el número secreto en ' , intentosRealizados , 'intentos! Te salvaste')
if estimacion != numero:
print('El número era', numero,"; Vas a morir.")
10
Tu estimación es muy baja. Te quedan 9 intentos
90
Tu estimación es muy alta. Te quedan 8 intentos
50
Tu estimación es muy baja. Te quedan 7 intentos
70
Tu estimación es muy baja. Te quedan 6 intentos
80
Tu estimación es muy alta. Te quedan 5 intentos
77
Tu estimación es muy alta. Te quedan 4 intentos
74
Tu estimación es muy baja. Te quedan 3 intentos
76
Tu estimación es muy alta. Te quedan 2 intentos
75
¡Has adivinado el número secreto en 9 intentos! Te salvaste
Un código fuente alternativo para un juego similar sería el que sigue:
import random
import os
ganadores = []
while True:
intentosRealizados = 0
numero = random.randint(1, 100)
#print(numero) #DEBUG
print ('Dame tu nombre')
nombre = input()
os.system('clear')
print(nombre + ', adivina el número que estoy pensando entre 1 y 100 en menos de 20 intentos')
while intentosRealizados < 20:
print('Intenta adivinar')
estimacion = input()
estimacion = int(estimacion)
intentosRealizados = intentosRealizados+1
if estimacion < numero:
print('Tu estimacion es muy baja')
if estimacion > numero:
print('Tu estimacion es muy alta')
if estimacion == numero:
break
if estimacion == numero:
if intentosRealizados < 20:
ganadores.append([intentosRealizados, nombre])
intentosRealizados = str(intentosRealizados)
print('Has adivinado mi numero en ' + intentosRealizados + ' intentos!')
if estimacion != numero:
print('Pues no. El número que estaba pensando era el ' + numero)
print('¿Nueva partida? ([Si]/No)')
seguir = input()
seguir = seguir.lower()
os.system('clear')
if seguir == 'no':
break
os.system('clear')
print ('Ranking:\n')
ganadores.sort()
for i in range(len(ganadores)):
pos = str(i + 1)
print (pos + '. ' + ganadores[i][1] + ', ' + str(ganadores[i][0]) + ' intentos')
Ya que se trata de un código bastante similar, se comentarán las diferencias en el mismo:
Además del módulo random
, también se importa el módulo os
, que ya habíamos visto en la Actividad 3 y que se trata de un módulo que permite el uso de código perteneciente al sistema operativo. Al igual que en esa actividad previa, este código sería el empleado para limpiar la pantalla con os.system('clear')
y aquí tendría que hacerse con cls()
para emplear con Jupyter.
import os
Se inicia con una variable de tipo lista vacía, también vista en la Actividad 3, pero en este caso de nombre ganadores
.
ganadores = []
A continuación se inicia un bucle de valor booleano con el valor True, ya que en todo caso será cierto para que se inicie el juego. Dentro de este bucle se añadin diferentes objetos o variables:
intentosRealizados = 0
y numero = random.randint(1, 100)
se añade #print(numero) #DEBUG
, que al tener el #
estará comentado y no tendrá valor, pero que en caso de quitarle esta almuadilla mostrará el valor de la máquina. Se trata de una trampa, que se comenta a la hora de mostrar el programa al usuario/jugador, pero que al estar destapado ayudará al programador a tener que dar menos vueltas para revisar los errores que pueda haber en el código.while True:
intentosRealizados = 0
numero = random.randint(1, 100)
#print(numero) #DEBUG
print ('Dame tu nombre')
nombre = input()
os.system('clear')
print(nombre + ', adivina el número que estoy pensando entre 1 y 100 en menos de 20 intentos')
while intentosRealizados < 20:
print('Intenta adivinar')
estimacion = input()
estimacion = int(estimacion)
intentosRealizados = intentosRealizados+1
if estimacion < numero:
print('Tu estimacion es muy baja')
if estimacion > numero:
print('Tu estimacion es muy alta')
if estimacion == numero:
break
seguir
con un valor de entrada de texto. Al escribir la respuesta se añade a la variable la respuesta.no
finalizará el juego.if estimacion == numero:
if intentosRealizados < 20:
ganadores.append([intentosRealizados, nombre])
intentosRealizados = str(intentosRealizados)
print('Has adivinado mi numero en ' + intentosRealizados + ' intentos!')
if estimacion != numero:
print('Pues no. El número que estaba pensando era el ' + numero)
print('¿Nueva partida? ([Si]/No)')
seguir = input()
seguir = seguir.lower()
os.system('clear')
if seguir == 'no':
break
6.a. De ser así se limpiará la pantalla y se imprimirá el ranking con el nombre de los jugadores que hayan conseguido adivinar el número en menos de 20 intentos.
6.b. El siguiente bucle for
indica que la lista ganadores
estará ordenada por la posición de los jugadores en el ranking, dónde a menor número de intentos antes aparecerá en el listado el nombre. Se imprimirá de esta forma la posición, el nombre y el número de intentos realizados.
os.system('clear')
print ('Ranking:\n')
ganadores.sort()
for i in range(len(ganadores)):
pos = str(i + 1)
print (pos + '. ' + ganadores[i][1] + ', ' + str(ganadores[i][0]) + ' intentos')