通过Python 3制作莫尔斯到英语翻译器的困难
下面是我为我的英文莫尔斯翻译器准备的东西(很好用): 现在这很好,我遇到的问题是莫尔斯英语翻译:通过Python 3制作莫尔斯到英语翻译器的困难,python,morse-code,Python,Morse Code,下面是我为我的英文莫尔斯翻译器准备的东西(很好用): 现在这很好,我遇到的问题是莫尔斯英语翻译: morse = {'a': '.-', 'b': '-...', 'c': '-.-.', 'd': '-..', 'e': '.', 'f': '..-.', 'g': '--.', 'h': '....', 'i': '..', 'j': '.---', 'k': '-.-', 'l': '.-..', 'm':
morse = {'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': '--..',
'0': '-----', '1': '.----', '2': '..---',
'3': '...--', '4': '....-', '5': '.....',
'6': '-....', '7': '--...', '8': '---..',
'9': '----.', ' ': ' '}
print ("""
================================================================================
Morse to English Code Translator
================================================================================""")
time.sleep(2)
while True:
msg = input('''What would you like translated?
:''')
print ("")
for i in msg:
print(english[i])
userstatus = input('Would you like to go again?(y or n): ').lower().strip(' ')
if userstatus not in('y', 'ye', 'yes'):
print ("Have a nice day!")
break
ans=输入(''按1将英语转换为摩尔斯\n按2将莫里斯转换为英语
:“”)
我遇到的问题是,一旦我输入一行莫尔斯电码,比如“--.-…”,它就会像这样打印出来:
What would you like translated?
:-- --- .-. ... .
t
t
t
t
t
e
t
e
e
e
e
e
Would you like to go again?(y or n):
有没有人知道我可以用什么方法来解决这个问题,这样它就可以打印出单词,在本例中是morse,而不是只打印t或e?将输入消息拆分为空格,然后遍历整个morse模式。一次迭代一个字符只能读取一个点或一个破折号 这应该可以解决这个问题:
for i in msg.split():
print(english[i])
这里有两个问题。第一个问题是,在英语中,您的字母只有一个字符宽,因此您对消息中字母的天真
方法有效
然而,在莫尔斯电码中,你的“字母”是任意宽度的字符数。因此,您需要在表示莫尔斯字符点结尾的分隔符周围输入消息。在本例中,这似乎是'
字符。幸运的是,Python有一种方法,str.split(delimiter)
。默认的分隔符正好是'
。那么,你应该:
tokens = msg.split()
letters = [english[token] if token else '' for token in tokens]
translated = ' '.join(letters)
print(translated)
但你还有另一个问题;翻译完这些字符后,你必须将它们重新组合成单词。幸运的是,Python具有split
的相反形式,即str.join
。在这种情况下,您需要执行以下操作:
tokens = msg.split()
letters = [english[token] if token else '' for token in tokens]
translated = ' '.join(letters)
print(translated)
如果你真的想变得有趣,你可以将这两个步骤合并为一个步骤,如下所示:
translated = ' '.join(english[token] if token else '' for token in msg.split())
请尝试输入消息中的i。拆分(“”:
而不是输入消息中的i:
莫尔斯是一个4个字母的字母表。有点和破折号;也有长暂停和短暂停。这将修复字典查找,但它仍然只会打印每个字符line@aruisdante当然,就像OP的“很好用”一样,英文对摩尔斯电码每行打印一个摩尔斯字母。这似乎不是目前的目标。