2014-06-11 4 views
0

Итак, проблема, с которой я в настоящее время сталкиваюсь, заключается в том, что моя программа всегда вызывает класс md5cypher, который я определил, даже если в этом списке нет ввода:Всегда верно при тестировании, если строка == различные OR'ed альтернативы

def enc(): 
    global toe 
    if toe=='md5' or 'M' or 'm' or 'Md5' or 'MD5': 
     print("Md5 Encryption Cypher") 
     md5cypher() 
    else: 
     print("Sha1 Encryption Cypher") 
     shacypher() 

Что я делаю неправильно?

ответ

0

Это потому, что проверка символа всегда будет возвращать True, поэтому выполнение инструкции if будет выполняться.

+0

Я не совсем понимаю; Как мне это исправить? – user3556962

+0

Как указано выше: «если вы входите в (« md5 »,« M »,« m »,« Md5 »,« MD5 »),' следует проверить, является ли палец ни одним из этих значений. – MrAlias

3

В действительности вы проверяете:

if (toe=='md5') or 'M' or 'm' or.... 

А поскольку bool('M') является True, вы всегда будете иметь успех, что чек. Попробуйте вместо этого:

if toe.lower() in ('md5', 'm'): 
+0

Последнее не является точным эквивалентом, так как это позволит также «mD5». – BartoszKP

+0

Спасибо всем! Решила мою проблему! – user3556962

2

if toe=='md5' or 'M' or 'm' or 'Md5' or 'MD5':

всегда будет оцениваться по

if toe=='md5' or True or True or True or True :

Что вы хотите:

if toe in ('md5', 'M', 'm', 'Md5', 'MD5'): 
    print("Md5 Encryption Cypher") 
    md5cypher() 
. 
. 
. 
0

Буквально, что вы хотите сделать, это :

if toe=='md5' or toe=='M' or toe=='m' or toe=='Md5' or toe=='MD5' 

- каждая часть составного состояния должна быть автономной.

Но в Python вы можете сделать это в более изящным способом, как указано в других ответах:

if toe in ('md5', 'M', 'm', 'Md5', 'MD5') 
0

У вас есть фундаментальное непонимание того, как логические операторы работы в питона.

Вы должны учитывать старшинство оператора, а затем ваше состояние становится

if (toe=='md5') or ('M') or ('m') or ('Md5') or ('MD5'): 

что эквивалентно

if (toe=='md5') or True: 

, который, конечно, всегда правда. Решение проблемы будет

if toe.lower() in ('m', 'md5'): 
Смежные вопросы