这是我正在制作的Caesar密码。我在使用' substrings'时遇到了一些麻烦。错误代码表示第22行没有找到子字符串,我也不知道如何修复它。请帮忙。
alphabet = 'abcdefghijklmnopqrstuvwxyz'
La = len(alphabet)
message = input("Insert your message: ")
key = int(input("Insert your key: "))
cipher = ''
for A in message:
if A in alphabet:
cipher += alphabet[(alphabet.index(A)+key)%La]
else:
print ("Error")
print(cipher)
cipher2 = ''
question = input("Do you wish to decrypt?: ")
if question == "Y" or "y":
for A in message:
if A in alphabet:
print(cipher.index(A))
cipher2 += cipher[(cipher.index(A)+key)%La]
else:
print ("Error")
print(cipher)
else:
print("Thank you")
答案 0 :(得分:2)
程序中有很多错误。当前的问题是你的第二个循环遍历原始消息,而不是密码。将第19行更改为:
for A in cipher:
当您尝试解密单个字母时,这将使您转到下一个错误,索引超出范围。
这不是推测性调试的地方。我建议您在自己的级别找到自己的调试教程,也许使用搜索短语"如何调试我的程序?"
对于初学者来说,当您遇到执行错误时,您无法理解,解构问题陈述并且问患者疼痛的位置。"例如您的原始代码
for A in message:
if A in alphabet:
print(cipher.index(A))
......变成......
for A in message:
print "CHECKPOINT 1", message, A
if A in alphabet:
print "CHECKPOINT 2", cipher
A_pos = cipher.index(A)
print "CHECKPOINT 3", A_pos
print(cipher.index(A))
尝试使用您的解密声明:
decode_pos = A_pos + key
print "CHECKPOINT 4", decode_pos
decode_pos %= La
print "CHECKPOINT 5", decode_pos, len(cipher)
clear_char = cipher[decode_pos]
print "CHECKPOINT 6", clear_char
cipher2 += clear_char
print "CHECKPOINT 7", cipher2
这会让你感动吗?它很苛刻,但很有效。