我正在尝试编写自己的python代码以强制使用caesar密码,我需要一些帮助。我在函数代码的末尾附近特别需要帮助。我想知道如何专门打印,以便在每个键尝试后有一个间隙。我使用python 3.3并且刚刚开始编码3周前。
print ("The plaintext will be stripped of any formatting such as spaces.")
freqlist = []
maxkey = 26
if key > maxkey:
raise Exception("Enter a key between 0 and 26: ")
elif key < 0:
raise Exception("Enter a key between 0 and 26: ")
freq = []
inpt=input("Please enter the cipher text:")
inpt = inpt.upper()
inpt = inpt.replace(" ", "")
inpt = inpt.replace(",", "")
inpt = inpt.replace(".", "")
for i in range(0,27):
key = i
def decrypt():
for i in range(0,27):
for a in inpt:
b=ord(a)
b-= i
if b > ord("Z"):
b -= 26
elif b < ord("A"):
b+=26
freqlist.append(b)
for a in freqlist:
d=chr(a)
freq.append(d)
freq="".join(freq)
print(freq.lower(),"\n")
decrypt()
我正在尝试使用for循环,我不认为它真的有效。
答案 0 :(得分:2)
根据您发布的错误,我认为这应该会有所帮助。
在Python中,您可以使用同名的本地和全局变量。函数中的freq
是本地的,因此全局freq
的初始化不会触及本地freq
。要使用全局decrypt
,您必须通过global statement告诉函数执行此操作。 Python FAQs中对此进行了解释。
这应该足以让你回到正轨。
修改强>
以下是def decrypt():
# we don't need the zero start value, that's the default
# test all possible shifts
for i in range(27):
# initialize the array
freqlist = []
# shift all the letters in the input
for a in inpt:
b = ord(a)
b -= i
if b > ord("Z"):
b -= 26
elif b < ord("A"):
b+=26
freqlist.append(b)
# now put the shifted letters back together
shifted = ""
for a in freqlist:
d = chr(a)
# append the shifted letter onto our output
shifted += d
# after we put the decrypted string back together, print it
# note this is outside the letter loops,
# but still inside the possible shifts loop
# thus printing all possible shifts for the given message
print(d)
功能的修改,以及对更改的一些解释
{{1}}