1
resposta

[Sugestão] JOGO BULLS AND COWS (BOIS E VACAS), PARA COMPLEMENTAR O LAÇO FOR E WHILE

def clear_screen():
    if os.name == 'nt':  # For Windows
      _ = os.system('cls')
    else:  # For Mac/Linux/Unix
      _ = os.system('clear')
def ValidaNum(Num):
    NumValido = True
    NumValido = False if len(Num) != 4 else NumValido
    NumValido = False if not Num.isnumeric() else NumValido
    if len(Num) == 4:
        NumValido = False if Num[0] == "0" or Num[1] == "0" or Num[2] == "0" or Num[3] == "0" else NumValido
        NumValido = False if Num[0] == Num[1] or Num[0] == Num[2] or Num[0] == Num[3] else NumValido
        NumValido = False if Num[1] == Num[2] or Num[1] == Num[3] else NumValido
        NumValido = False if Num[2] == Num[3] else NumValido
    return NumValido
########
def GeraPalpite():
    NumeroBom = False
    while NumeroBom == False:
        NumeroBom = True
        N0 = random.randint(1,9)
        N1 = random.randint(1,9)
        N2 = random.randint(1,9)
        N3 = random.randint(1,9)
        NumeroBom = False if N0 == N1 or N0 == N2 or N0 == N3 else NumeroBom
        NumeroBom = False if N1 == N2 or N1 == N3 else NumeroBom
        NumeroBom = False if N2 == N3 else NumeroBom
        PalpiteGerado = str(N0) + str(N1) + str(N2) + str(N3)
    return PalpiteGerado
def ContaBOIs():
    QtdBOIs = 0
    QtdBOIs += 1 if Num[0] == Palpite[0] else 0
    QtdBOIs += 1 if Num[1] == Palpite[1] else 0
    QtdBOIs += 1 if Num[2] == Palpite[2] else 0
    QtdBOIs += 1 if Num[3] == Palpite[3] else 0
    return QtdBOIs
def ContaVACAs():
    QtdVACAs = 0
    QtdVACAs += 1 if Num[0] == Palpite[1] or Num[0] == Palpite[2] or Num[0] == Palpite[3] else 0
    QtdVACAs += 1 if Num[1] == Palpite[0] or Num[1] == Palpite[2] or Num[1] == Palpite[3] else 0
    QtdVACAs += 1 if Num[2] == Palpite[0] or Num[2] == Palpite[1] or Num[2] == Palpite[3] else 0
    QtdVACAs += 1 if Num[3] == Palpite[0] or Num[3] == Palpite[1] or Num[3] == Palpite[2] else 0
    return QtdVACAs
#########
import random
import os
Palpite = GeraPalpite()
FimJogo = False
QtdValida = 0
Lista_NUMS = []
Lista_VACAS = []
Lista_BOIs = []
clear_screen()
print("BOIS E VACAS, REGRAS DO JOGO.")
print("1 - Acertar, em até 10 tentativas, um número secreto, composto por 4 dígitos diferenentes, de 1 a 9, sem o zero.")
print("Exemplo: 5639.")
print("2 - BOIS: Quantidade de dígitos certos e nas posições exatas.")
print("Exemplo: 1659. Bois: 2, pois o 6 e o 9 estão nas posições exatas.")
print("3 - VACAS: Quantidade de dígitos certos, mas em posições erradas.")
print("Exemplo: 1659. Vacas: 1, pois o 5 está na posição errada.")
print("")
while FimJogo == False:
    Num = input("Digite um Número de 4 dígitos diferentes de 1 a 9 (por exemplo: 3486): ")
    NumValido = ValidaNum(Num)
    if NumValido == False:
        print(str(Num) + " é inválido, digite novamente.")
        continue
    QtdValida += 1
    BOIs = ContaBOIs()
    VACAs = ContaVACAs()
    Lista_NUMS.append(Num)
    Lista_BOIs.append(BOIs)
    Lista_VACAS.append(VACAs)
    clear_screen()
    for i in range(len(Lista_NUMS)):
        print(str(i+1) + " | " + Lista_NUMS[i] + " | Bois: " + str(Lista_BOIs[i]) + " | Vacas: " + str(Lista_VACAS[i]) )
    if  BOIs == 4:
        print("PARABÉNS! Você acertou! O Número era " + str(Palpite) + ".")
        FimJogo = True
    elif QtdValida == 10:
        print("SINTO MUITO! Você errou! O Número era " + str(Palpite) + ".")
        FimJogo = True
#######
1 resposta

Oi, Josue! Como vai?

Gostei de como você implementou o jogo Bulls and Cows com funções separadas para cada responsabilidade, deixando a lógica mais organizada e fácil de entender.

Se quiser, você pode simplificar a contagem de "bois" e "vacas" usando enumerate e compreensão de listas, tornando o código mais conciso.


def conta_bois(Num, Palpite):
    return sum(1 for i, digito in enumerate(Num) if digito == Palpite[i])

def conta_vacas(Num, Palpite):
    return sum(1 for i, digito in enumerate(Num) if digito in Palpite and digito != Palpite[i])

Este codigo reduz a repeticao de condicoes e aproveita recursos do Python para iterar e comparar de forma mais limpa.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!