1
resposta

minha resolução

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():
    usuario = input("pedra, pedra, tesoura....: ").lower().strip()
    

    if verificar_escolha(usuario) == False:
        print("Jogada invalida")
        return

    jogada_computador = gerador_escolha()

    print(f"o computador escolheu: {jogada_computador}")

    print(ver_resultado(usuario,jogada_computador))

jogo()
1 resposta

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!