2

所以这是我的英语莫尔斯翻译器(效果很好):

english = {'.-': '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 ("""


================================================================================
                      English to Morse Code Translator
================================================================================""")
time.sleep(2)
while True:  
    msg = input('''What would you like translated? please use lower-case letters.\n   :''')
    print ("")
    for i in msg:
        print(morse[i])
    userstatus = input('Would you like to go again?(y or n): ').lower().strip(' ')
    if userstatus not in('y', 'yes'):
        print ("Have a nice day!")
        break

现在这工作正常,我遇到的问题是莫尔斯英语翻译:

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 = input('''按 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?

4

2 回答 2

2

在空格上拆分输入消息,然后遍历整个莫尔斯模式。一次迭代一个字符只会读取一个点或一个破折号。

这应该解决它:

for i in msg.split():
    print(english[i])
于 2016-06-03T00:25:25.550 回答
0

你这里有两个问题。第一个问题是,在英语中,您的字母是一个字符宽,因此您的幼稚for letter in message方法有效。

但是,在莫尔斯语中,您的“字母”是任意数量的字符宽。因此,您需要在表示莫尔斯字符点结尾的分隔符周围标记您的输入消息。在这种情况下,这似乎是' '角色。幸运的是,Python 有一个方法,str.split(delimiter). 而默认分隔符恰好是' '. 所以,你会这样做:

tokens = msg.split()
letters = [english[token] if token else '' for token in tokens]

但是您还有另一个问题;翻译后,您必须将字符重新组合成单​​词。幸运的是,Python 有 的倒数split,即str.join. 在这种情况下,你会这样做:

translated = ' '.join(letters)
print(translated)

如果您想变得非常花哨,实际上可以将这两个步骤合二为一,如下所示:

translated = ' '.join(english[token] if token else '' for token in msg.split())
于 2016-06-03T00:55:39.957 回答