Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

dúvida no uso do elif

porque quando eu usava if ao invés de elif dava erro no resultado? aparecia Empate! e Você venceu!

import random

def jogo():
   escolhas=['pedra','papel','tesoura']
   pc_escolhas= random.choice(escolhas)
   escolha_do_usuario=input('Escolha uma das opções(Pedra,Papel,Tesoura): ').lower()
   
   print(f'O Computador Escolheu: {pc_escolhas}')

   if escolha_do_usuario not in escolhas:
      print( 'Escolha uma das opções')

   if pc_escolhas==escolha_do_usuario:
      print('Empate!')

   elif((pc_escolhas=='pedra' and escolha_do_usuario =='tesoura')or
       (pc_escolhas=='tesoura' and escolha_do_usuario=='papel')or
       (pc_escolhas=='papel' and escolha_do_usuario=='pedra')):
        print('O Computador Venceu!')
   

   else:
      print('Você Venceu!')

jogo()
1 resposta
solução!

Oii, Andressa.

O problema acontece porque o if, o elif e o else funcionam como uma "corrente" de condições conectadas. Quando você quebra essa corrente usando vários if soltos, o programa se comporta de maneira diferente.

O comportamento com elif (Correto):

Quando você usa a estrutura if -> elif -> else, você está dizendo ao Python: "Verifique a primeira condição. Se for verdadeira, execute e pare de verificar o resto".

  1. Verifica Empate: Se for verdade, imprime "Empate!" e pula todo o resto do código.
  2. Verifica Vitória do PC: Só é testado se não foi empate.
  3. Else: Só é executado se nenhuma das anteriores for verdade.

O comportamento com if (onde gera o erro):

Se você trocar o elif por um if, você quebra a conexão. O código passa a ter dois blocos independentes de verificação. Vamos imaginar que ocorreu um Empate (você e o PC escolheram pedra):

Bloco 1:

if pc_escolhas == escolha_do_usuario:
   print('Empate!')
  • O Python verifica: É empate? Sim.
  • Ação: Imprime "Empate!".
  • O programa continua para a próxima linha.

Bloco 2:

if (... condições de vitória do PC ...):
    print('O Computador Venceu!')
else:
    print('Você Venceu!')
  • O Python verifica: O computador venceu? Não (porque foi empate).
  • Como essa condição é falsa, o código cai imediatamente no else atrelado a este if.
  • Ação: Imprime "Você Venceu!".

Então pra resumir:

O erro acontece porque, ao usar apenas if, o else final fica ligado somente à última verificação (se o computador venceu). Como no empate o computador não venceu, o programa entende que deve executar o else.

O elif serve justamente para garantir que as condições sejam exclusivas: se uma acontecer, as outras são ignoradas.

Espero que essa explicação tenha deixado o fluxo mais claro para você. Conte sempre com o fórum!

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