Olá, Lucas. Como vai?
Muito bacana a sua iniciativa de compartilhar a sua resolução do projeto aqui com a comunidade! O seu código está excelente, especialmente pela forma como você separou as responsabilidades, criando funções distintas para validar a escolha, gerar a jogada do computador e avaliar o vencedor. Outro ponto fortíssimo do seu script foi a utilização encadeada dos métodos lower() e strip() no input, uma ótima prática de tratamento de dados que impede o programa de quebrar caso o usuário digite espaços acidentais ou letras maiúsculas.
Notei que, no momento de colar o código aqui no fórum, algumas quebras de linha acabaram se perdendo (juntando partes do texto com a palavra reservada def). Abaixo, deixo o seu código organizado e formatado para que outros alunos possam copiá-lo e executá-lo sem erros de sintaxe:
import random
opcoes = ['pedra', 'papel', 'tesoura']
def verificar_escolha(jogada):
if jogada not in opcoes:
return False
return True
def gerador_escolha():
escolha = random.choice(opcoes)
return escolha
def ver_resultado(escolha_usu, escolha_computador):
if escolha_usu == escolha_computador:
return "empate"
elif (
(escolha_usu == 'pedra' and escolha_computador == 'tesoura') or
(escolha_usu == 'tesoura' and escolha_computador == 'papel') or
(escolha_usu == 'papel' and escolha_computador == 'pedra')
):
return "Você venceu"
else:
return "Você perdeu"
def jogo():
# Corrigi um pequeno erro de digitação no texto do input (estava "pedra, pedra")
usuario = input("pedra, papel, tesoura....: ").lower().strip()
if not verificar_escolha(usuario):
print("Jogada inválida")
return
jogada_computador = gerador_escolha()
print(f"o computador escolheu: {jogada_computador}")
print(ver_resultado(usuario, jogada_computador))
jogo()
Para agregar ainda mais valor ao seu aprendizado, deixo uma sugestão de melhoria focada em deixar o seu código mais "Pythonico" (escrito da forma ideal para a linguagem):
- Simplificação de validação booleana: Na sua função principal, você utilizou a instrução
if verificar_escolha(usuario) == False:. Como a sua função de verificação já retorna nativamente um dado do tipo booleano (True ou False), você não precisa comparar explicitamente com o termo False. Você pode utilizar o operador lógico not, deixando a leitura muito mais fluida. Basta alterar para if not verificar_escolha(usuario):. O resultado prático será exatamente o mesmo.
Para dar um próximo passo e deixar esse seu jogo ainda mais dinâmico, você já pensou em como poderia envolver essa lógica principal em um laço de repetição while para que o usuário possa jogar várias rodadas consecutivas sem que o programa se encerre?
Espero que possa ter lhe ajudado!