为什么我的elif会回到我的if?

时间:2012-12-07 13:09:20

标签: python if-statement python-3.x

我已经写了一个非常基本的加密程序,在为它编写解密算法时,我遇到了一些循环问题。

from re import *

cipher = open('cipher.txt')
ciphertext = cipher.read()
keyfile = open('key.txt')
key = keyfile.read()
decoded = []
chardec = ''
inval = 1

print("Decoder for encrypt1.py")
while inval == 1:
    useManKey = input("Use a manual key? Y or N\n> ")
    if useManKey == 'Y' or 'y':
        key = input("Please enter the key you wish to use to decrypt\n> ")
        inval = 0
    elif useManKey == 'N' or 'n':
        inval = 0
        print("OK, decrypting")
    else:
        print("That wasn't a valid option/nPlease re-enter")

当我运行它,并将useManKey声明为N或n时,它似乎运行循环的if部分,就好像我已将其声明为Y或y一样。我可能在这里很蠢,但是非常感谢任何帮助。

2 个答案:

答案 0 :(得分:10)

useManKey == 'Y' or 'y'无法按照您的想法行事。你想要的是useManKey in ('Y', 'y')。您首先评估useManKey == 'Y',然后,如果该检查失败,则测试字符串'y'是否真实。由于非空字符串总是很完整,因此if语句的结果始终为True。正如评论中指出的那样,如果需要,您还可以使用upper()lower()首先将输入转换为固定大小写。

答案 1 :(得分:2)

useManKey == 'Y' or 'y'

实际上并未检查useManKey值是否为' Y'或者' y使用sr2222的答案来完成你需要做的事情。即

useManKey in ('Y', 'y')

早期的表达式评估为

(useManKey == 'Y') or 'y'

无论useManKey作为' y'是非虚假的(非 - 无)'或'其中总是评估为True,