在摩尔斯电码转换器中允许多个字符

时间:2013-05-03 01:05:30

标签: python dictionary morse-code

我正在制作一个程序,它接受输入并以计算机蜂鸣声的形式将其转换为莫尔斯代码,但我无法弄清楚如何制作它所以我可以在输入中放入多个字母而不会出现错误

这是我的代码:

import winsound
import time

morseDict = {
'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': '--..'
}
while True: 
    inp = raw_input("Message: ")
    a = morseDict[inp] 
    morseStr =  a
    for c in morseStr:
        print c
        if c == '-':
            winsound.Beep(800, 500)
        elif c == '.':
            winsound.Beep(800, 100)
        else:
            time.sleep(0.4)  
        time.sleep(0.2)

现在它一次需要一个字母,但我希望它能用短语。

5 个答案:

答案 0 :(得分:2)

尝试将循环更改为以下内容:

while True:
    inp = raw_input("Message: ")
    for char in inp:
        for x in morseDict[char]:
            print x
            if x == "-":
                winsound.Beep(800, 500)
            elif x == ".":
                winsound.Beep(800, 100)
            else:
                time.sleep(0.4)
            time.sleep(0.2)

这样你首先在输入中的字符上进行迭代,然后在morseDict中查找字符并迭代morseDict[char]的值。

答案 1 :(得分:1)

只需添加一个额外的for循环并循环输入中的字符即可获取消息!但是不要忘记在必要时结束循环!

在下面的代码中我做了这样的话,在消息被解码后,它询问你是否想要发送另一个,如果你输入“n”它会退出循环!

going = True
while going: 
    inp = raw_input("Message: ")
    for i in inp:
        a = morseDict[i] 
        morseStr =  a
        for c in morseStr:
            print c
            if c == '-':
                winsound.Beep(800, 500)
            elif c == '.':
                winsound.Beep(800, 100)
            else:
                time.sleep(0.4)  
            time.sleep(0.2)
    again = raw_input("would you like to send another message? (y)/(n) ")
    if again.lower() == "n":
         going = False

现在你还有一个问题......你还没有考虑到空间!所以你仍然只能发送文字!如果我是正确的,话语之间的空格是摩尔斯电码中固定的定时静音,所以我想你应该做的就是添加:

" ": 'x'

这样,在尝试查找空格实例时它不会返回错误,它将在else语句中运行,并在下一个单词前添加额外的.4秒!

答案 2 :(得分:1)

我相信你需要迭代输入中的字母。

while True: 
    inp = raw_input("Message: ")
    for letter in inp:          # <- Edit in this line
        a = morseDict[letter]   # <- and this one, rest have increased indent
        morseStr =  a
        for c in morseStr:
            print c
            if c == '-':
                winsound.Beep(800, 500)
            elif c == '.':
                winsound.Beep(800, 100)
            else:
                time.sleep(0.4)  
            time.sleep(0.2)
        time.sleep(0.4)        # Or desired time between letters

答案 3 :(得分:1)

替换此行:

a = morseDict[inp]

这一行:

a = ' '.join([morseDict[c] for c in inp])

它接受输入字符串中的每个字符,查找莫尔斯等效字符,并将结果与​​空格分隔符连接起来(假设您希望字母之间有额外的0.4秒延迟)。

答案 4 :(得分:0)

尝试第一个循环,同时消息最后有三个空格以结束循环。或者a / n字符。这只是一个想法。抱歉我的英语不好。