Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-消息加密返回'NoneType'错误_Python_Typeerror_Nonetype - Fatal编程技术网

Python-消息加密返回'NoneType'错误

Python-消息加密返回'NoneType'错误,python,typeerror,nonetype,Python,Typeerror,Nonetype,我试图使用偶数和奇数定义来加密我的消息。 功能def swap_letters(message)正是我使用的功能: 我用“message=message+x”循环遍历奇偶字母列表 然后,我将下一个奇数字母添加到最后一条消息中,其中包含范围(0,int(len(message)/2))内计数器的:… 最后,我使用“letter\u 1.append(偶数字母[counter])… 我通过加入字母1来创建我的新消息,然后将其返回 我会犯什么错误?我应该如何修复此代码以使其正确运行 import

我试图使用偶数和奇数定义来加密我的消息。 功能
def swap_letters(message)
正是我使用的功能:

  • 我用“message=message+x”循环遍历奇偶字母列表
  • 然后,我将下一个奇数字母添加到最后一条消息中,其中包含范围(0,int(len(message)/2))内计数器的
    :…
  • 最后,我使用
    “letter\u 1.append(偶数字母[counter])…
我通过加入
字母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;]`
回溯(最近一次呼叫最后一次):
文件“T:\Sublime Text 3\shhhh.py”,第47行,在
加密=交换字母(消息)
文件“T:\Sublime Text 3\shhhh.py”,第29行,交换字母
字母1.附加(偶数字母[计数器])
TypeError:“非类型”对象不可下标
[在21.2s中完成,退出代码为1]
[shell\u cmd:python-u“T:\Sublime Text 3\shhhh.py”]
[目录:T:\升华文本3]
[路径: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\IncredBuild;C:\Users\mwliv\AppData\Local\Microsoft\WindowsApps;]`

您的
get\u even\u 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!

只需修改代码,如下所示:-

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])

非常感谢,这是非常有帮助的,非常简单,我竖起大拇指!(老实说,这是多么愚蠢的疏忽……)