允许多个字符在莫尔斯电码转换器
问题描述:
我正在做一个程序,需要输入并将其转换为莫尔斯电码形式的蜂鸣声,但我无法弄清楚如何制作它,所以我可以把多个字母在输入时不会出现错误。允许多个字符在莫尔斯电码转换器
这里是我的代码:
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)
眼下它需要一个字母在同一时间,但我希望它采取的短语。
答
只需添加一个额外的循环并遍历输入中的字符即可获取消息!但是,不要忘记在必要时结束你的循环!
在下面的代码中,我解释了消息被解码之后,它会询问您是否要发送另一个消息,如果输入“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秒!
答
试着改变你的循环,这样的事情:
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]
值。
答
我相信你需要迭代输入中的字母。
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
答
替换此行:
a = morseDict[inp]
这一行:
a = ' '.join([morseDict[c] for c in inp])
拍摄每一个字符在你输入字符串,查找莫尔斯当量,结果连同串接一个空格分隔符(假设你想在字母之间多出0.4秒的延迟)。
答
尝试第一个循环,同时消息最后有三个空白空间用于结束循环。或一个/ n字符。它只是一个想法。对不起,我的英语不好。
+1已经使用字典,并有一个有趣的问题来解决。我从来没有想过要制作一个莫尔斯电码转换器...... FWIW,如果你想处理短语,你可能还需要在字典中添加一个空格。 – mgilson 2013-05-03 01:14:53
是的,我也修好了,谢谢你! – Serial 2013-05-03 01:16:42