我试图使用偶数和奇数的定义来加密我的消息。函数def swap_letters(message)就是我所使用的:
"for counter in range(0, int(len(message)/2)): ...的最终消息中;"letter_1.append(even_letters[counter])...将下一个偶数字母添加到最后消息中我通过加入new_message来制作letter_1,然后返回它
我犯了什么错误,应该如何修复这段代码才能让它正确运行?
import tkinter as Tk
from tkinter import messagebox, simpledialog, Tk
def is_even(number):
return number % 2 == 0
def get_even_letters(message):
even_letters = []
for counter in range(0, len(message)):
if is_even(counter):
even_letters.append(message[counter])
def get_odd_letters(message):
odd_letters = []
for counter in range(0, len(message)):
if not is_even(counter):
odd_letters.append(message[counter])
return odd_letters
def swap_letters(message):
letter_1 = []
if not is_even(len(message)):
message = message + 'x'
even_letters = get_even_letters(message)
odd_letters = get_odd_letters(message)
for counter in range(0, int(len(message)/2)):
letter_1.append(odd_letters[counter])
letter_1.append(even_letters[counter])
new_message = ''.join(letter_1)
return new_message
def get_message():
message = simpledialog.askstring('Message', 'Enter the secret here: ')
return message
def get_task():
task = simpledialog.askstring('Task', 'Do you want to encrypt or decrypt?')
return task
root = Tk()
while True:
task = get_task()
if task == 'encrypt':
message = get_message()
encrypted = swap_letters(message)
messagebox.showinfo('Ciphertext of the secret message is:', encrypted)
elif task == 'decrypt':
message = get_message()
decrypted = swap_letters(message)
messagebox.showinfo('Plaintext of the secret message is:', decrypted)
else:
break
root.mainloop(),这是我得到的错误
Traceback (most recent call last):
File "T:\Sublime Text 3\shhhhh.py", line 47, in <module>
encrypted = swap_letters(message)
File "T:\Sublime Text 3\shhhhh.py", line 29, in swap_letters
letter_1.append(even_letters[counter])
TypeError: 'NoneType' object is not subscriptable
[Finished in 21.2s with exit code 1]
[shell_cmd: python -u "T:\Sublime Text 3\shhhhh.py"]
[dir: T:\Sublime Text 3]
[path: C:\Program Files (x86)\Python36-32\Scripts\;C:\Program Files `(x86)\Python36-32\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Xoreax\IncrediBuild;C:\Users\mwliv\AppData\Local\Microsoft\WindowsApps;]`发布于 2017-10-14 17:44:47
您的get_even_letters函数不显式地返回任何内容,因此它隐式地返回None,因此您稍后将看到错误。添加一个return语句应该可以解决这个问题:
def get_even_letters(message):
even_letters = []
for counter in range(0, len(message)):
if is_even(counter):
even_letters.append(message[counter])
return even_letters # Here!发布于 2017-10-14 21:01:22
只需修改代码如下:-
for counter in range(0, int(len(message)/2)):
# You need to verify whether values are None type or not before calling append
if(odd_letters != None):
letter_1.append(odd_letters[counter])
if(even_letters != None):
letter_1.append(even_letters[counter])https://stackoverflow.com/questions/46747494
复制相似问题