当我尝试运行它时,它会说NameError:name' encrypt'没有定义。
MAX_KEY_SIZE = 26
def getMode():
while True:
print('Do you wish to encrypt or decrypt a message?')
mode = input().lower()
if mode in "encrypt" 'e' 'decrypt' 'd'.split():
return mode
else:
print('Enter either "encrypt" or "e" or "decrypt" or "d".')
答案 0 :(得分:2)
根据我对您的代码的理解,'加密'是一个字符串值。您需要创建一个包含所需字符串值的列表,并检查mode变量是否与该列表中的值匹配。
MAX_KEY_SIZE=26
def getMode():
while True:
mode=input().lower()
if mode in ['encrypt','e','decrypt','d']:
return mode
else:
print('Enter either "encrypt" or "e" or "decrypt" or "d".')
如果要使用.split()方法,可以执行以下操作:
if mode in "encrypt e decrypt d".split()
答案 1 :(得分:1)
疑难杂症! input
试图评估您的输入(因此,它的名称非常误导)。使用raw_input
以字符串格式捕获用户的愿望。
基本上input
所做的是raw_input
并将其传递给eval
:现在您正在尝试评估字符串"加密"作为Python代码,因此它与写入"加密"具有相同的效果。到你的文件。当然,这会导致错误,因为在任何地方都没有引入这样的变量。 eval
和input
都是非常危险的东西,所以尽量不要使用它们,很少有真正的用例。
有关此网站的这种差异的更多信息: https://stackoverflow.com/a/15129556/308668
答案 2 :(得分:0)
MAX_KEY_SIZE = 26
def getMode():
while True:
print ('Do you wish to encrypt or decrypt a message?')
mode = input().lower()
if mode in "encrypt" 'e' 'decrypt' 'd'.split():
return mode
else:
print('Enter either "encrypt" or "e" or "decrypt" or "d".')
希望这是你的代码..如果是,那么它不应该给出任何错误,你试图获得结果的方法也不会解决你的目的,因为"encrypt" 'e' 'decrypt' 'd'.split()
会给你{{ 1}}并且您无法通过正在尝试的“in”方法搜索模式。您可以在列表中搜索模式,如:['encryptedecryptd']
“加密”'e''解密''',然后使用“in”方法匹配用户的输入。
希望有所帮助......
答案 3 :(得分:0)
扩展pogo's answer,这是正确的......
让我感到惊讶的是(显然还有很多其他人),if mode in ...:
行中的字符串群是而不是语法错误。
if mode in "encrypt" 'e' 'decrypt' 'd'.split():
这些字符串都是编译时常量,因此string literal concatenation在执行开始之前将它们粘合到一个字符串中:
>>> "encrypt" 'e' 'decrypt' 'd'
'encryptedecryptd'
然后在该字符串上调用split()
方法,该字符串偶然不包含任何空格。返回值是包含单个字符串的列表:
>>> "encrypt" 'e' 'decrypt' 'd'.split()
['encryptedecryptd']
in
运算符不会抱怨给定字符串(mode
)和字符串列表,但它会为{{1}的每个值返回False
除了一个......没有人可能输入:
mode