1
resposta

[Sugestão] Pedra, papel e tesoura

import random
opcoes = ['pedra', 'papel', 'tesoura']

def escolha_computador():
    return random.choice(opcoes)

def jogada():
    while True:

        usuario = input('Escolha: pedra, papel ou tesoura? ').lower()
        if usuario in opcoes:
            return usuario
        else:
            print('Opção inválida! Digite apenas pedra, papel ou tesoura.\n')
            
def verificar_vendedor(usuario, computador):
    if usuario == computador:
        print(f'Computador escolheu: {computador}\n Empate !')
    elif(
        (usuario == 'pedra' and computador == 'tesoura') or
        (usuario == 'papel' and computador == 'pedra') or
        (usuario == 'tesoura' and computador == 'papel')
    ):
        print(f'Computador escolheu: {computador}\n Voce Venceu !')
    else:
        print(f'Computador escolheu: {computador}\n Voce perdeu !')

def jogar():
    computador = escolha_computador()
    usuario = jogada()
    verificar_vendedor(usuario, computador)

jogar()
1 resposta

Olá, Apollo. Como vai?

Muito legal a sua iniciativa de compartilhar o seu código aqui no fórum! Desenvolver o jogo de Pedra, Papel e Tesoura é um excelente exercício para praticar condicionais, loops e a importação de bibliotecas como a random. A sua lógica para definir as regras de vitória através do condicional elif ficou perfeita e muito legível.

Analisando o seu script, notei que provavelmente houve um pequeno problema de formatação na hora de copiar e colar o texto aqui na plataforma. Algumas quebras de linha sumiram (juntando blocos como na parte ]def e !')def) e a indentação acabou ficando bagunçada, colocando a definição de uma função dentro da outra. Além disso, há um pequeno erro de digitação no nome da função de verificação: você escreveu verificar_vendedor em vez de verificar_vencedor.

Abaixo, deixo o seu código organizado com a indentação, quebras de linha e o nome da função corrigidos, garantindo que ele rode sem erros de sintaxe caso outros alunos queiram testar:

import random

opcoes = ['pedra', 'papel', 'tesoura']

def escolha_computador():
    return random.choice(opcoes)

def jogada():
    while True:
        usuario = input('Escolha: pedra, papel ou tesoura? ').lower()
        if usuario in opcoes:
            return usuario
        else:
            print('Opção inválida! Digite apenas pedra, papel ou tesoura.\n')

def verificar_vencedor(usuario, computador):
    if usuario == computador:
        print(f'Computador escolheu: {computador}\n Empate!')
    elif(
        (usuario == 'pedra' and computador == 'tesoura') or
        (usuario == 'papel' and computador == 'pedra') or
        (usuario == 'tesoura' and computador == 'papel')
    ):
        print(f'Computador escolheu: {computador}\n Você Venceu!')
    else:
        print(f'Computador escolheu: {computador}\n Você perdeu!')

def jogar():
    computador = escolha_computador()
    usuario = jogada()
    verificar_vencedor(usuario, computador)

jogar()

Como sugestão de melhoria para você continuar aprimorando esse projeto, que tal adicionar a opção de jogar várias rodadas seguidas?

Você pode envolver as chamadas dentro da função jogar() em um laço de repetição while True, e ao final verificar se o jogador deseja continuar. Exemplo prático de como essa função ficaria:

def jogar():
    while True:
        computador = escolha_computador()
        usuario = jogada()
        verificar_vencedor(usuario, computador)
        
        continuar = input('\nDeseja jogar novamente? (s/n): ').lower()
        if continuar != 's':
            print('Obrigado por jogar! Até a próxima.')
            break

Dessa forma o seu jogo fica muito mais dinâmico, pois o usuário não precisará executar o script novamente toda vez que quiser uma revanche contra o computador.

Espero que possa ter lhe ajudado!