我用python做了一个caesar密码解算器,但是没有错误,只是没有打印任何东西。我也做过类似的事情,但这以前从来没有发生过。在
with open("C:\\Users\\Rajive\\AppData\\Local\\Programs\\Python\\Python3.4.3\\brit-a-z.txt", 'r') as f:
check_list = [x.strip() for x in f.readlines()]
def crackcaesar(encrypted):
for i in range(26):
totalwords = 0
numright = 0
answer = []
if i != 0:
for symbol in encrypted:
if symbol.isalpha():
neword = (ord(symbol) + i)
if symbol.isupper():
if neword > ord('Z'):
neword -= 26
elif neword < ord('A'):
neword += 26
elif symbol.islower():
if neword > ord('z'):
neword -= 26
elif neword < ord('a'):
neword += 26
newletter = chr(neword)
answer.append(newletter)
for word in str(answer):
totalwords += 1
for line in check_list:
if line == word:
numright += 1
if (numright // 2) > (totalwords // 2):
print(str(answer))
print("Type your encoded caesar cipher message")
while True:
crackcaesar(input())
问题是
numright
永远不会大于totalwords
。试试看另外,}。您需要使用
answer
是一个字符列表。str(answer)
会给你{"".join(answer)
。在首先,您有一个3级嵌套循环,而不是实际实现密码。其次,您没有密码密钥(请参见下面的编辑)。此for循环:
不应嵌套在此已嵌套的for循环中:
^{pr2}$另外,循环中
i
来自0-25
的循环中的if i != 0:
似乎没有意义。您似乎在尝试匹配字母范围,但是如果您将范围限制在0-26之间,那么实现Caeser密码就不会有太大的运气,因为第一个可打印字符从32(空格)开始,小写'z'
是122。你应该一起删除这个循环-它会破坏密码。只需使用for symbol in encrypted:
循环。在另外,循环
for word in str(answer):
正在逐字符计算answer
字符,因此名为totalwords
的变量实际上正在计算字符数,这可以通过获取字符串的长度来完成。如果您试图做单词,那么应该对answer
变量调用str.split(' ')
,假设space
字符是删除字符。希望这有帮助。在编辑
你的钥匙在哪里?(完全正确)。您的密码的主要问题是,当您需要添加(或减去)密钥量时,您将在每个序数值上添加一个计数器变量。由于您没有实现密钥移位,因此只需要添加一个值,否则您可以使用密钥数组来实现caeser密码。在
相关问题 更多 >
编程相关推荐