Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python 3制作莫尔斯到英语翻译器的困难_Python_Morse Code - Fatal编程技术网

通过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的“很好用”一样,英文对摩尔斯电码每行打印一个摩尔斯字母。这似乎不是目前的目标。