Muitas vezes, tenho visto esse erro entre meus alunos iniciantes de Python, e quero torná-lo mais conhecido para ajudar quem está começando. Se você é um novo aprendiz de Python e evitar esse erro por causa deste artigo, então eu fiz meu trabalho.
O Erro Muito Comum
if option == 'A' or 'B':
print('algo')
else:
print('outra coisa')
Este código está incorreto.
O que este código está tentando alcançar é o seguinte: se a variável ‘option’ for igual à string ‘A’ ou à string ‘B’, então imprima ‘algo’.
Infelizmente, é bastante intuitivo escrever esse tipo de código devido à linguagem humana, então muitos iniciantes em Python cometem esse erro.
Por Que Isso É Um Erro
A expressão option == ‘A’ or ‘B’ SEMPRE avaliará como verdadeira (True). Isso significa que ‘algo’ será SEMPRE impresso, e ‘outra coisa’ NUNCA será impressa. Mas por quê?
A expressão option == ‘A’ or ‘B’ é avaliada como se fosse (option == ‘A’) or (‘B’). Isso não verifica se ‘option’ é igual a ‘A’ ou igual a ‘B’.
Se escrevermos apenas if ‘B’: # faça algo, a expressão ‘B’ avaliará como verdadeira (True). Isso ocorre porque TODAS as strings com comprimento acima de 0 são consideradas verdadeiras (True) e avaliam como True. E uma string vazia avalia como Falsa (False).
if '':
print('isso nunca será impresso')
if 'a':
print('isso sempre será impresso')
Portanto,
if option == 'A' or 'B':
print('algo')
else:
print('outra coisa')
É equivalente a:
if (option == 'A') or ('B'):
print('algo')
else:
print('outra coisa')
O que é equivalente a:
if (option == 'A') or (True):
print('algo')
else:
print('outra coisa')
Visto que ‘B’ é considerado verdadeiro (True).
Como o Código Deve Ser
O código correto deve ser escrito da seguinte forma:
if option == 'A' or option == 'B':
print('algo')
else:
print('outra coisa')
Desta forma, a expressão verifica se 1) ‘option’ é igual a ‘A’ ou 2) ‘option’ é igual a ‘B’.
Conclusão
Se você não sabia disso, agora você sabe. Evite esse erro comum ao programar em Python e escreva seu código de forma correta para obter resultados precisos.