Olá, Cairo, como vai?
Sua solução está funcional e bem direta ao ponto. A ideia de concatenar as escolhas do jogador e do computador para validar os cenários de vitória e derrota deixou a lógica enxuta e fácil de manter. A utilização do choice para gerar a jogada do computador também está aplicada corretamente dentro do contexto da atividade.
Um ponto que pode gerar inconsistência é a dependência de o usuário digitar exatamente com a mesma capitalização das opções definidas na lista. Caso ele digite “pedra”, “PEDRA” ou com espaços, a verificação não funcionará como esperado. Uma forma de tornar o código mais robusto é normalizar a entrada.
from random import choice
opcao = input('Digite uma opção: Pedra, Papel ou Tesoura? ').strip().capitalize()
computador = choice(['Pedra', 'Papel', 'Tesoura'])
if opcao + computador in ['PedraTesoura', 'PapelPedra', 'TesouraPapel']:
print(f'\nVocê venceu! Você escolheu {opcao} que ganha de {computador}\n')
elif opcao + computador in ['TesouraPedra', 'PedraPapel', 'PapelTesoura']:
print(f'\nVocê perdeu! Computador escolheu {computador} que ganha de {opcao}\n')
else:
print(f'\nEmpate! Você escolheu {opcao} e o computador também escolheu {computador}\n')
Como melhoria opcional, também seria possível trabalhar com tudo em minúsculo (lower()) para simplificar comparações ou até mapear as regras em dicionários, caso quisesse escalar a lógica para mais opções no futuro.
Obrigado por compartilhar sua solução com a comunidade. O fórum segue à disposição para novas dúvidas e evoluções no código.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!