Python – Juego de vacas y toros

Cows and Bulls es un juego de descifrado de códigos con lápiz y papel que generalmente se juega entre 2 jugadores. En este, un jugador intenta adivinar un número de código secreto elegido por el segundo jugador. Las reglas son las siguientes:

  • Un jugador creará un código secreto, generalmente un número de 4 dígitos. Este número no debe tener dígitos repetidos.
  • Otro jugador adivina (número de 4 dígitos) para descifrar el número secreto. Al hacer una conjetura, se proporcionarán 2 pistas: vacas y toros.
  • Los toros indican el número de dígitos correctos en la posición correcta y las vacas indican el número de dígitos correctos en la posición incorrecta. Por ejemplo, si el código secreto es 1234 y el número adivinado es 1246, entonces tenemos 2 TOROS (para las coincidencias exactas de los dígitos 1 y 2) y 1 VACA (para la coincidencia del dígito 4 en la posición incorrecta)
  • El jugador sigue adivinando hasta que se descifra el código secreto. Gana el jugador que acierta en el mínimo número de intentos.

Explicación:

Veamos una ejecución de muestra para una mejor comprensión.

Secret Code: 3768

Guess: 1234
Response: 0 bulls, 1 cow
Guess: 5678
Response: 1 bull, 2 cows
Guess: 1678
Response: 1 bull, 2 cows
Guess: 3678
Response: 2 bulls, 2 cows
Guess: 3148
Response: 2 bulls, 0 cows
Guess: 3768
You guessed right!

Acercarse:

Para crear este juego en Python, la computadora genera un código secreto y el usuario tendrá que adivinar el código. Divídelo en estos bloques:

  • Genera un código secreto- Genera un número aleatorio de 4 dígitos y verifica que no tenga dígitos repetidos.
  • Generar pista o respuesta: tome el número secreto de 4 dígitos generado y el número adivinado (entrada). Encuentra los dígitos comunes con coincidencias exactas (toros) y los dígitos comunes en la posición incorrecta (vacas). Repita con cada suposición hasta que tenga 4 toros (una coincidencia exacta) o se quede sin intentos.

Restricción: El código secreto y el código adivinado deben ser de 4 dígitos (entre 1000 y 9999) y no tener números repetidos.

Programa:

Python

# Import required module
import random 
  
# Returns list of digits 
# of a number
def getDigits(num):
    return [int(i) for i in str(num)]
      
  
# Returns True if number has 
# no duplicate digits 
# otherwise False      
def noDuplicates(num):
    num_li = getDigits(num)
    if len(num_li) == len(set(num_li)):
        return True
    else:
        return False
  
  
# Generates a 4 digit number 
# with no repeated digits    
def generateNum():
    while True:
        num = random.randint(1000,9999)
        if noDuplicates(num):
            return num
  
  
# Returns common digits with exact 
# matches (bulls) and the common 
# digits in wrong position (cows)
def numOfBullsCows(num,guess):
    bull_cow = [0,0]
    num_li = getDigits(num)
    guess_li = getDigits(guess)
      
    for i,j in zip(num_li,guess_li):
          
        # common digit present
        if j in num_li:
          
            # common digit exact match
            if j == i:
                bull_cow[0] += 1
              
            # common digit match but in wrong position
            else:
                bull_cow[1] += 1
                  
    return bull_cow
      
      
# Secret Code
num = generateNum()
tries =int(input('Enter number of tries: '))
  
# Play game until correct guess 
# or till no tries left
while tries > 0:
    guess = int(input("Enter your guess: "))
      
    if not noDuplicates(guess):
        print("Number should not have repeated digits. Try again.")
        continue
    if guess < 1000 or guess > 9999:
        print("Enter 4 digit number only. Try again.")
        continue
      
    bull_cow = numOfBullsCows(num,guess)
    print(f"{bull_cow[0]} bulls, {bull_cow[1]} cows")
    tries -=1
      
    if bull_cow[0] == 4:
        print("You guessed right!")
        break
else:
    print(f"You ran out of tries. Number was {num}")

Producción:

Publicación traducida automáticamente

Artículo escrito por akshisaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *