0

我正在尝试编写自己的 python 代码来暴力破解凯撒密码,我需要一些帮助。我在函数代码的末尾特别需要帮助。我想知道如何专门打印,以便在每个键尝试后都有一个间隙。我正在使用 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 循环,但我认为它并不能真正有效地工作。

4

1 回答 1

2

根据您发布的错误,我认为这应该会有所帮助。

在 Python 中,您可以拥有同名的局部变量和全局变量。函数中的freq是局部的,因此全局的​​初始化freq不会触及局部的。要使用 global freq,您必须通过global 语句告诉函数这样做。这在Python FAQs中有更多解释。

这应该足以让你回到正轨。

编辑: 下面是您的decrypt函数的编辑,对更改进行了一些解释

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)
于 2013-10-28T22:26:54.420 回答