2017-02-21 159 views
2

我在完成此代碼時遇到問題。我最初的計劃是接受一個長字符串作爲輸入,例如'... --- .. - 。 - .. .... ...-。'然後能夠使用morse_code = [code_input.split('')]來分離它們並單獨運行它們,但是我要麼從索引返回第一個字符,要麼沒有返回,所以任何人都可以幫助我修補或幫助以更簡單的解決方案帶領我? 感謝所有的幫助!Python莫爾斯碼:S.O.S

#morse code converter 
def main(): 

    code_input = get_input() 
    morse_code(code_input) 

def get_input(): 

    return input('Enter morse code: ') 

def morse_code(code_input): 

    morse_code = [code_input] 

    convert = ['--..--', '.-.-.-', '..--..', '-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', 
       '----.', '.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---' ,'-.-', '.-..', '--', '-.', '---', 
       '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.-', '--..'] 
    new = [',', '.', '?', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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',] 
    print(morse_code) 
    length = len(morse_code) 
    for x in range(length): 
     for value in range(39): 
      if morse_code[x] == convert[value]: 
       print(new[value]) 

main() 

回答

2

這應該爲你工作:

def morse_code(code_input): 
    morse_codes = code_input.split(' ') 
    convert = ['--..--', '.-.-.-', '..--..', '-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', 
       '----.', '.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---' ,'-.-', '.-..', '--', '-.', '---', 
       '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.-', '--..'] 
    new = [',', '.', '?', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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',] 
    print(morse_codes) 
    code = '' 
    for x in morse_codes: 
     index = convert.index(x) 
     code+=new[index] 
    return code 

print morse_code('... ---.. -. -.. .... . .-.. .--.') 

輸出:

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

如雷蒙德提到的傳奇,字典類型是一個更好的選擇。

嘗試dict(zip(convert,new))來製作轉換字典。

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

要使用字典:

translation = '' 
for c in morse_codes: 
    translation += d[c] 
+0

這看起來很乾淨。謝謝你的建議! – ccbrantley

+0

@ccbrantley歡迎您! –

+0

@ccbrantley請記住接受答案! –

4

你的主意,用分裂應該只是罰款:

>>> '... ---.. -. -.. .... . .-.. .--.'.split() 
['...', '---..', '-.', '-..', '....', '.', '.-..', '.--.'] 

對於翻譯,我會用,而不是一個列表的字典:

morse2text = {'...': 's', '---': 'o'} 

爲了避免關鍵錯誤,我會做一個「安全查找」使用字典get()方法:

print(morse2text.get(m, m)) 

這裏是情況放在一起(儘管不完全字典)的所有代碼,你想建立過一個工作實例:

morse2text = { 
    '.-': 'a', 
    '-..': 'd', 
    '.': 'e', 
    '....': 'h', 
    '..': 'i', 
    '-.': 'n', 
    '---': 'o', 
    '...': 's', 
    '-': 't', 
} 

s = '... ---.. -. -.. .... . .-.. .--.' 
for m in s.split(): 
    print(morse2text.get(m, m)) 
+0

而.split()的作品分割字符串除了有似乎是,當因爲沒有返回值,它是通過跑了問題? – ccbrantley

+0

從來沒有... morse_code = code_input.split()的作品。這不起作用,morse_code = [code_input.split()]。我一直試圖彌補這個小時謝謝你! – ccbrantley