2016-11-07 96 views
1

我製作了一個莫爾斯電碼翻譯器,您可以在其中放入一個字母來打印出相應的代碼,反之亦然。但是,該程序一次僅限於接受一個字母。我怎樣才能讓它接受一個字?這裏是我的代碼:將一個字拆分爲字母,這樣字母就會成爲字典中的一個關鍵字。 [Python]

MorseCode = {'.-':'A', 
      '-...':'B', 
      '-.-.':'C', 
      '-..':'D', 
      '.':'E', 
      '..-.':'F', 
      '--.':'G', 
      '....':'H', 
      '..':'I', 
      '.---':'J', 
      '-.-':'K', 
      '.-..':'L', 
      '--':'M', 
      '-.':'N', 
      '---':'O', 
      '.--.':'P', 
      '--.-':'Q', 
      '.-.':'R', 
      '...':'S', 
      '-':'T', 
      '..-':'U', 
      '...-':'V', 
      '.--':'W', 
      '-..-':'X', 
      '-.--':'Y', 
      '--..':'Z', 
      '.----':1, 
      '..---':2, 
      '...--':3, 
      '....-':4, 
      '.....':5, 
      '-....':6, 
      '--...':7, 
      '---..':8, 
      '----.':9, 
      '-----':0 
} 

letters_to_morse = {letter: code for code, letter in MorseCode.items()} 

print "Type 'help' for the morse code." 
print "Type 'end' to exit the program.\n" 
while True: 
    code = raw_input("Enter code:") 
    if code in MorseCode: 
     print MorseCode[code] 
    elif code in letters_to_morse: 
     print letters_to_morse[code] 

的問題是:有沒有把一個詞的方式和分裂這個詞來每個字母所以每個字母將成爲一個關鍵的字典打印出來的價值? 例如:'boy'這個詞會被分成'b','o','y',然後程序會打印出來:-... ----.--

我試過了遠:

MorseCode = {'.-':'A', 
      '-...':'B', 
      '-.-.':'C', 
      '-..':'D', 
      '.':'E', 
      '..-.':'F', 
      '--.':'G', 
      '....':'H', 
      '..':'I', 
      '.---':'J', 
      '-.-':'K', 
      '.-..':'L', 
      '--':'M', 
      '-.':'N', 
      '---':'O', 
      '.--.':'P', 
      '--.-':'Q', 
      '.-.':'R', 
      '...':'S', 
      '-':'T', 
      '..-':'U', 
      '...-':'V', 
      '.--':'W', 
      '-..-':'X', 
      '-.--':'Y', 
      '--..':'Z', 
      '.----':1, 
      '..---':2, 
      '...--':3, 
      '....-':4, 
      '.....':5, 
      '-....':6, 
      '--...':7, 
      '---..':8, 
      '----.':9, 
      '-----':0 
} 

Inverse_Dictionary = {v:k for k,v in Dictionary.iteritems()} 

while True: 
    x = raw_input("Enter:") 
    for letter in list(x): 
     if letter in Dictionary: 
      print (Dictionary[letter]) 
     elif letter in Inverse_Dictionary: 
      print(Inverse_Dictionary[letter]) 
     else: 
      print("Not good") 

它工作。當我輸入'BOY'時,它打印出來:-... --- -.--但是當我試圖輸入-... --- -.--時,它不斷打印出「不好」。

任何人都可以告訴我我哪裏出錯了?

回答

0

變化

for letter in list(x): 

for letter in x.split(): 

而且你有Inverse_Dictionary = {v:k for k,v in Dictionary.iteritems()},但是Dictionary是不確定的,它應該是Inverse_Dictionary = {v:k for k,v in MorseCode.iteritems()}

0

列表(x)返回類型與角色的列表。所以

list(' -... --- -.--,') 

將返回

[' ', '-', '.', '.', '.', ' ', '-', '-', '-', ' ', '-', '.', '-', '-', ','] 

您需要一種方式來分散你的輸入。例如離開每個字母/摩爾斯電碼之間的空間,然後做:

while True: 
    x = raw_input("Enter:") 
    for letter in x.split(' '): 
     if letter in Dictionary: 
      print (Dictionary[letter]) 
     elif letter in Inverse_Dictionary: 
      print(Inverse_Dictionary[letter]) 
     else: 
      print("Not good") 
0

我會嘗試這樣的:

letters_to_morse = {letter: code for code, letter in MorseCode.items()} 

string_to_convert = raw_input('Enter message you want to translate to morse...') 

trans = '' 
for char in string_to_convert: 
    if char.isdigit(): 
     trans = trans + letters_to_morse[int(char)] 
    elif char == ' ': 
     trans = trans + ' ' 
    else: 
     trans = trans + letters_to_morse[str.upper(char)] 


print trans 
0

此代碼pythonically的伎倆:

morse.py

>>> def translate(word): 
... inverse_morse = dict({str(v): k for k, v in MorseCode.items()},**{" ":" "}) 
... return "".join([inverse_morse[letter.upper()] for letter in word]) 
>>> print(translate("boy 123")) 
-...----.-- .----..---...-- 
+1

空格和數字怎麼樣? –

相關問題