Stack Overflow em Português Asked by kdz on November 13, 2021
prefixes = "JKLMNOPQ"
suffix = "ack"
for letter in prefixes:
if letter[0] == "Q"or"O":
print(letter+"uack")
continue
print(letter+suffix)
Resposta esperada:
Jack
Kack
Lack
Mack
Nack
Ouack
Pack
Quack
Resposta adquirida:
Juack
Kuack
Luack
Muack
Nuack
Ouack
Puack
Quack
Não entendi o porque de or
quando usado retorna tudo como True
ao em vez de selecionar as variáveis que eu digitei no código.
Outra forma de fazer seria:
prefixes = 'JKLMNOPQ'
for prefix in prefixes:
suffix = 'uack' if prefix in {'Q', 'O'} else 'ack'
print(prefix + suffix)
Veja funcionando no Repl.it | Ideone | GitHub GIST
Basicamente substituindo as duas comparações com ==
pelo operador in
e a verificação por uma condição inline, ou ternário, se preferir. Eu particularmente acho esta forma mais legível para humanos.
Answered by Woss on November 13, 2021
O or
não funciona como imagina, o correto seria:
prefixes = "JKLMNOPQ"
for letter in prefixes:
if letter[0] == "Q" or letter[0] == "O":
print(letter + "uack")
else:
print(letter + "ack")
Veja funcionando no ideone. E no repl.it. Também coloquei no GitHub para referência futura.
Você estava comparando a expressão letter[0] == "Q"
que pode ser verdadeiro ou falso de acordo com o valor de letter[0]
. Como tem um or
a única forma da decisão ser tomada sem avaliar mais nada é quando esta expressão seja verdadeira, porque é certo que o bloco deve ser executado. E até aí está certo. O or
também é o adequado aí. O problema está na segundo expressão do or
que não retorna o que você espera.
Qual o resultado booleano de "O"
? Por definição, todos os valores que não sejam considerados zerados ou vazios são falsos, todos os outros valores são verdadeiros, então "O"
é verdadeiro. Então toda vez que a primeira expressão der falsa e ele vai tentar a segunda esta é sempre verdadeira, e portanto faz tudo ser verdadeiro.
O que de fato você queria fazer é letter[0] == "O"
porque aí a expressão pode dar verdadeira no momento certo, mas dará falsa em grande parte dos casos.
As outras mudanças eu fiz porque é mais legível e óbvio
Answered by Maniero on November 13, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP