我知道有一點點要求讓一羣人瀏覽幾個代碼塊,但我會盡力去嘗試。我正在用tk創建python的克隆(第二次世界大戰中使用的德國加密機器)。邏輯上查看我的代碼,方法encrypt()
要麼返回字符串「警報」,這是極不可能的,或者它返回None
。有人請給它一個快速,但敬業的目光,這樣我可以解決這個問題嗎?謝謝。爲什麼encrypt()返回None?
from Tkinter import *
from string import letters
import tkMessageBox
root = Tk()
root.title("EnigmaTK")
def rank(x, d = dict((letr,n%26+1) for n,letr in enumerate(letters[0:52]))):
return d[x]
def shift(key, array):
counter = range(len(array))
new = counter
for i in counter:
new[i] = array[i-key]
return new
alph = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "]
rotI = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "]
rotII = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "]
rotIII = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "]
ref = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "e", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "]
label = Label(root, text="Input:")
label.pack(side = LEFT)
entry = Entry(root)
entry.pack(side = RIGHT)
input = entry.get()
rotor_set = map(rank, input[:3])
message = input[3:]
def encrypt():
new_message = message
for a in xrange(len(message)):
for e in range(rotor_set[2]):
new_message[a] = alph[rotI.index(rotII[rotIII.index(ref[rotIII.index(rotII[rotI.index(alph[a])])])])]
a = a + 1
rotIII = shift(1, rotIII)
for i in range(rotor_set[1]):
new_message[a] = alph[rotI.index(rotII[rotIII.index(ref[rotIII.index(rotII[rotI.index(alph[a])])])])]
a = a + 1
rotII = shift(1, rotII)
for o in range(rotor_set[0]):
new_message[a] = alph[rotI.index(rotII[rotIII.index(ref[rotIII.index(rotII[rotI.index(alph[a])])])])]
a = a + 1
rotI = shift(1, rotI)
return new_message
def show():
tkMessageBox.showinfo("English to Enigma", encrypt())
e = Button(root, text = "encrypt", command = show)
e.pack()
root.mainloop()
靠近頂部的字母都是一樣的。如果問題解決了,我會改變這一點。謝謝。