2016-11-07 58 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

空格和数字怎么样? –

相关问题