2016-04-20 11 views
0

Ich schreibe einen Morsecode zu Text/Text zu Morse-Code-Programm in Python 3, und es scheint gut zu funktionieren, bis ich einen Buchstaben gebe, dann bekomme ich die folgende Fehlermeldung:KeyError in Python Morse-Code-Übersetzer

Traceback (most recent call last): 
    File "X:\GCU\CST-110\Week 5 Projects\Python Projects\Chapter 9 Exercise 21.py", line 79, in <module> 
    print(words_to_morse(morse_dict)) 
    File "X:\GCU\CST-110\Week 5 Projects\Python Projects\Chapter 9 Exercise 21.py", line 45, in words_to_morse 
    print(morse_dict[ch],end="") 
KeyError: 'J' 

Wo fehlt mir das Problem? Code ist unten. Danke für die Hilfe.

import string 
def process_line(fileObj): 
    morse_dict={} 
    reverse_morse_dict={} 
    for line in fileObj: 
     line.strip() 
     line=line.split() 
     morse_dict[line[0]]=line[1] 
     for key,value in list(morse_dict.items()): 
      reverse_morse_dict[value]=key 
      return morse_dict,reverse_morse_dict 
def words_to_morse(morse_dict): 
    words_str=input("\nEnter text to translate: ") 
    words_str.strip() 
    words_list=words_str.split() 
    for word in words_list: 
     for ch in word: 
      if ch in string.ascii_letters: 
       ch=ch.upper() 
       print(morse_dict[ch],end="") 
       if word!=words_list[-1]: 
        print("/",end="\n") 
def morse_to_words(reverse_morse_dict): 
    morse_str=input("\nEnter morse code to translate: ") 
    print("") 
    morse_str.strip() 
    morse_str=morse_str.replace("/",".-.-..-.-.") 
    morse_list=morse_str.split() 
    words_list=[] 
    for code in morse_list: 
     words_list.append(reverse_morse_dict[code]) 
     lower_words_list=[] 
     for ch in words_list: 
      if ch in string.ascii_letters: 
       ch=ch.lower() 
       lower_words_list.append(ch) 
      else: 
       lower_words_list.append(ch) 
       lower_words_str="".join(lower_words_list) 
       lower_words_str=lower_words_str.replace("++","") 
       print(lower_words_str) 
fileObj=open("morse.txt","r") 
morse_dict,reverse_morse_dict=process_line(fileObj) 
print("\nHi, this program is used to translate text into morse code or translate morse code to text") 
choice_str=input("\nEnter input translate code - 't' for text to morse code or 'm' for morse code to text: ") 
choice_list=choice_str.split() 
while True: 
    if choice_list[0]=="t": 
     print(words_to_morse(morse_dict)) 
     break 
    if choice_list[0]=="m": 
     print() 
     print(morse_to_words(reverse_morse_dict)) 
     break 
    else: 
     print("\nThat is an invalid input command") 
     choice_str=input("\nEnter input code again, 't' for text or 'm' for morse code: ") 
     choice_list=choice_str.split() 
     continue 
print() 
print("\nThanks for using Morse-text converter") 
+1

Das 'return' in der Funktion' process_line' ist zu stark eingerückt. Das gleiche Problem ist mit der zweiten 'for'-Schleife in dieser Funktion. – Matthias

Antwort

0

1) process_line() kehrt nicht morse_dict richtig war es eine lokale Variable, kehren sie zur Schleife der Außenseite und auch

2) die unten Stück nicht als Schlüsselspeicher Charakter, sie speichert Wort als Schlüssel

for line in fileObj: 
    line.strip() 
    line=line.split()