2017-10-14 4 views
1

私のメッセージを暗号化するために偶数と奇数の定義を使用しようとしています。 機能def swap_letters(message)は、私がそのために使用していますものです: `「メッセージ=メッセージ+『X』」 'と奇数と偶数の文字のリストを通じPython - メッセージ暗号化は `NoneType`エラーを返します

  • Iループ。
  • 次に、最後のメッセージに次の奇数文字を"for counter in range(0, int(len(message)/2)): ...で追加します。
  • 最後に、私は"letter_1.append(even_letters[counter])...

を使用して、最終的なメッセージに次の偶数の文字を追加し、私はletter_1に参加して、私のnew_messageを行い、その後、

何を間違え私が作るんし、私はこれをどのように修正する必要があり、それを返しますコードを正しく実行させるには?

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;]` 

答えて

1

あなた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! 
+1

はどうもありがとうございました、これは、アップ私から親指超便利、非常に簡単でした! (そして、正直なところ、愚かな監督...) –

0

ただ、下記のようにコードを変更します -

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]) 
関連する問題