Python加密解密代码触发IndexError,请求故障排查与修复
问题分析与修复方案
核心错误原因
- 函数返回位置错误:
gevenl和goddl里的return语句写在了for循环内部,导致循环只跑一次就直接返回结果。这会让evenl和oddl列表最多只有一个元素,后续swap函数里循环访问列表元素时,必然触发IndexError(索引超出列表范围)。 - 拼写错误:解密分支里的
decrpyt、dycrypted都是拼写错误,应该是decrypt、decrypted,会导致无法正确触发解密逻辑。
修复后的完整代码
from tkinter import messagebox, simpledialog, Tk def even(number): return number % 2 == 0 def gevenl(message): evenl = [] for c in range(len(message)): if even(c): evenl.append(message[c]) # 把return移到循环外,确保遍历完所有字符 return evenl def goddl(message): oddl = [] for c in range(len(message)): if not even(c): oddl.append(message[c]) # 把return移到循环外,确保遍历完所有字符 return oddl def swap(message): letter = [] if not even(len(message)): message = message + "." evenl = gevenl(message) oddl = goddl(message) for c in range(int(len(message)/2)): letter.append(oddl[c]) letter.append(evenl[c]) newm = "".join(letter) return newm def gettask(): task = simpledialog.askstring("", "Encrypt or Decrypt?") return task def getm(): message = simpledialog.askstring("Message", "Enter your secret message: ") return message root = Tk() while True: task = gettask() if task == "encrypt": message = getm() encrypted = swap(message) messagebox.showinfo("", f"Encrypted message is: {encrypted}") elif task == "decrypt": # 修正拼写错误 message = getm() decrypted = swap(message) # 修正拼写错误 messagebox.showinfo("", f"Decrypted message is: {decrypted}") # 修正拼写错误 else: messagebox.showinfo("Idiot", "Ayo stupid baka, No breaking in hahaha") break root.mainloop()
额外优化点
- 去掉
range(0, len(message))里的0,range默认从0开始,写法更简洁。 - 修正
getm函数提示文本的语法错误(Enter is改成Enter your)。 - 调整消息框的标题参数,显示更规范。
内容的提问来源于stack exchange,提问作者PythonBasicsDev
相关产品推荐
相关产品推荐

