En esta entrada vamos a revisar la implementación del juego Bagels en Python. Este juego consiste en adivinar un numero de 3 dígitos.
Como funciona:
Bagels es un juego de deducción que puedes jugar con un amigo. Tu amigo piensa en un número aleatorio de 3 dígitos sin dígitos repetidos y tú intentas adivinar cuál es el número. Después de cada intento, tu amigo te da tres tipos de pistas:
- Bagels: Ninguno de los tres dígitos que adivinó está en el número secreto.
- Pico: Uno de los dígitos está en el número secreto, pero su conjetura tiene el dígito en el lugar equivocado.
- Fermi: Tu conjetura tiene un dígito correcto en el lugar correcto.
Nota: En matemáticas, el concepto de conjetura se refiere a una afirmación o una proposición que se supone cierta, pero que no ha sido demostrada ni refutada hasta la fecha.
Ahora vamos con la implementación del código:
import random
NUM_DIGITS = 3 # Numero de digitos del número a adivinar
MAX_GUESSES = 10 # Número de intentos
def main():
print('''Implementación del juego bagels
Estoy pensando en un número de {} digitos, cuyos digitos no se repiten
Cuando diga:
Pico Uno de los dígitos está en el número secreto, pero su conjetura tiene el dígito en el lugar equivocado.
Fermi Tu conjetura tiene un dígito correcto en el lugar correcto.
Bagels Ninguno de los tres dígitos que adivinó está en el número secreto.
'''.format(NUM_DIGITS))
while True: # Bucle principal del juego
#Almacenar el número secreto generado de manera aleatoria
secretNum = getSecretNum()
print('He pensado un número.')
print('Tienes {} intentos para conseguirlo.'.format(MAX_GUESSES))
numGuesses = 1
while numGuesses <= MAX_GUESSES:
guess = ''
#Se mantiene el bucle hasta que se ingrese una conjetura valida
while len(guess) != NUM_DIGITS or not guess.isdecimal():
print('Conjetura #{}: '.format(numGuesses))
#Tomar la conjetura ingresada por el usuario
guess = input('> ')
#Obtenemos las pistas
clues = getClues(guess, secretNum)
print(clues)
numGuesses += 1
if guess == secretNum:
break #Si es correctos sale del bucle
if numGuesses > MAX_GUESSES:
print('Número de conjeturas consumidas')
print('La respuesta era {}.'.format(secretNum))
#Preguntar si el jugador quiere volver a jugar
print('Deseas volver a jugar? (si o no)')
if not input('> ').lower().startswith('s'):
break
print ('Gracias por jugar')
def getSecretNum():
"""Devuelme una cadena formada por un número aleatorio de digitos"""
numbers = list('0123456789') #Creamos una lista de digitos del 0 al 9
random.shuffle(numbers) #Barajamos la lista en orden aleatorio
#Obtenemos los primeros números de la lista que seran utilizados para el juego
secretNum = ''
for i in range(NUM_DIGITS):
secretNum += str(numbers[i])
return secretNum
def getClues(guess, secretNum):
""" Devuelve una cadena con las pistas: Pico, Fermi y Bagels """
if guess == secretNum:
return "Acertaste!"
clues = []
for i in range(len(guess)):
if guess[i] == secretNum[i]:
#Una conjetura correcta en el lugar correcto
clues.append('Fermi')
print(clues)
elif guess[i] in secretNum:
#Una conjetura correcta en el lugar incorrecto
clues.append('Pico')
print(clues)
#No existe ningúna conjetura correcta
if len(clues) == 0:
return 'Bagels'
else:
#Clasifica las pistas en orden alfabetico para que su orden original no revele información
clues.sort()
#Regresamos una sola cadena
return ' '.join(clues)
#Ejecutar el juego
if __name__=='__main__':
main()