Can';除了在Python中工作之外,我无法尝试
我有一点凯撒密码,不能让try/except工作。它所做的只是重复第一次输入。它不显示“输入错误”。我能做些什么来解决这个问题Can';除了在Python中工作之外,我无法尝试,python,except,Python,Except,我有一点凯撒密码,不能让try/except工作。它所做的只是重复第一次输入。它不显示“输入错误”。我能做些什么来解决这个问题 while True: try: encrypt = raw_input("Would you like to encrypt or decrypt a message? (E/D) : ").lower() print("") if encrypt == 'e': print("ENCRY
while True:
try:
encrypt = raw_input("Would you like to encrypt or decrypt a message? (E/D) : ").lower()
print("")
if encrypt == 'e':
print("ENCRYPTION: Due to the nature of the Caesar Cipher, Numbers and Symbols will
be removed. Please represent numbers as the word...")
print("I.E. - 7 should be entered as 'seven'. ")
print("")
sentence = raw_input("Please enter a sentence : ").lower()
newString = ''
validLetters = "abcdefghijklmnopqrstuvwxyz "
space = []
for char in sentence:
if char in validLetters or char in space:
newString += char
shift = input("Please enter your shift : ")
resulta = []
for ch in newString:
x = ord(ch)
x = x+shift
resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
print sentence
print("")
print("Your encryption is :")
print("")
print ''.join(resulta)
if encrypt == 'd':
print("DECRYPTION : PUNCTUATION WILL NOT BE DECRYPTED")
print("")
sentence = raw_input("Please enter an encrypted message : ").lower()
newString = ''
validLetters = "abcdefghijklmnopqrstuvwxyz "
for char in sentence:
if char in validLetters:
newString += char
shift = input("Please enter your shift : ")
decryptshift = 26 - shift
resulta = []
for ch in newString:
x = ord(ch)
x = x + decryptshift
resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
print sentence
print("")
print("Your encryption is :")
print("")
print ''.join(resulta)
if encrypt == 'q':
break
except:
print("")
print("INCORRECT INPUT!")
print("")
continue
为True时:
尝试:
encrypt=raw_input(“您想加密还是解密邮件?(E/D):”)。lower()
打印(“”)
如果encrypt==“e”:
打印(“加密:由于凯撒密码的性质,数字和符号将
将被删除。请将数字表示为单词…)
打印(“即-7应输入为“七”。)
打印(“”)
句子=原始输入(“请输入句子:”).lower()
新闻字符串=“”
validLetters=“abcdefghijklmnopqrstuvxyz”
空格=[]
对于句子中的字符:
如果Validleters中的字符或空格中的字符:
newString+=char
班次=输入(“请输入班次:”)
结果=[]
对于CHIN新闻字符串:
x=ord(ch)
x=x+shift
resulta.append(chr(x if 97我已经运行了您的代码,在我修复了不匹配的标识之后,它看起来还可以:
if char in validLetters:
newString += char
为此:
if char in validLetters:
newString += char
我得到了以下输出:
Please enter a sentence : test
Please enter your shift :
INCORRECT INPUT!
try..except
块在您或系统引发异常时使用。如果try
块成功完成,则不会执行except
块。在您的情况下,您的程序不会进入if
块
要获得预期结果,请按如下所示重写if语句:
if encrypt == 'e':
...
elif encrypt == 'd':
...
elif encrypt == 'q':
break
else:
print("")
print("INCORRECT INPUT!")
print("")
通过这种方式,您可以组合所有条件,并有一个“默认”语句。如果之前的elif
s和第一个if
均未输入,则else
elif
s之后的s将输入(基本上就是说没有一个条件是真的)
如果您不使用elif
,并且只使用If
(与您的原始代码一样),则条件链将断开,并且最后的else
将捕获加密!=“q”
,即使它是“e”或“d”。这不是原始问题,但是
result = raw_input("Enter Q, D, or E")
while result.lower() not in ["q","d","e"]:
result = raw_input("Invalid Response! Enter Q,D, or E:")
#now you know result is one of q d or e
可能是一种更好的获取输入的方法哇…不要像这样使用try/except…try块中应该只有一行或两行…这样你就可以知道在哪一点你失败了…而且你的except是空的,所以它会捕获所有错误,包括你可能不想捕获的错误。是否有任何东西会引发异常?所以使用尝试每个IF语句?使用try
处理可能引发异常的事情,或者以不会引发异常的方式编写它们。使用Else更合适吗?