1

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

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 一样。我可能在这里很愚蠢,但任何帮助将不胜感激,谢谢。

4

2 回答 2

10

useManKey == 'Y' or 'y'不像你认为的那样工作。你想要的是useManKey in ('Y', 'y'). 您首先评估的内容useManKey == 'Y',然后,如果该检查失败,则测试字符串'y'的真实性。由于非空字符串始终为真,因此您的if语句始终计算为True. 正如评论中所指出的,如果需要,您还可以使用upper()orlower()首先将输入转换为固定大小写。

于 2012-12-07T13:11:51.207 回答
2
useManKey == 'Y' or 'y'

实际上并不检查useManKey值是“Y”还是“y”,请使用 sr2222 的答案来完成您需要做的事情。IE。

useManKey in ('Y', 'y')

前面的表达式计算为

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

无论“y”的值为useManKey非假(非无),这始终为真,这些的“或”总是评估为真,

于 2012-12-07T13:17:24.617 回答