python - 摩尔斯电码到英语 python3

标签 python dictionary morse-code

我想使用 Python 3+ 将摩尔斯电码转换为英语 我已经设法使用这个将英语转换为莫尔斯电码 http://code.activestate.com/recipes/578407-simple-morse-code-translator-in-python/

但我想将摩尔斯电码转换成英文

我试图一次一个字符,但问题是莫尔斯电码字母不像英文字母那样长 1 个字符,所以 E 是“.” S 是“...”,我遇到的问题是字典循环会找到“。”并将其与 E 匹配,所以我得到的不是 S,而是“E E E” 我试图通过检测空格并一次做一个单词来解决这个问题,但它不是在单词中查找字母,而是在字典中搜索整个单词 我是 Python 和字典的新手,我不知道如何区分 E“。”和一个 S “...” 在搜索我的字典时

这是我的代码

# defines the dictionary to convert morse to english
CODE_reversed = {'..-.': 'F', '-..-': 'X',
                 '.--.': 'P', '-': 'T', '..---': '2',
                 '....-': '4', '-----': '0', '--...': '7',
                 '...-': 'V', '-.-.': 'C', '.': 'E', '.---': 'J',
                 '---': 'O', '-.-': 'K', '----.': '9', '..': 'I',
                 '.-..': 'L', '.....': '5', '...--': '3', '-.--': 'Y',
                 '-....': '6', '.--': 'W', '....': 'H', '-.': 'N', '.-.': 'R',
                 '-...': 'B', '---..': '8', '--..': 'Z', '-..': 'D', '--.-': 'Q',
                 '--.': 'G', '--': 'M', '..-': 'U', '.-': 'A', '...': 'S', '.----': '1'}


    def main():
        #takes user message and makes it upper case
        msg = input('MESSAGE: ')
        msg = msg.upper()

    addtolist = "" # creates blank string
    message = [] # creates blank list
    for i in msg:
        addtolist = addtolist + i # adds every letter in MSG into a string until it finds a space
        addtolist.upper() # makes every letter uppercase

        if i == " ": # if it detects a space
            message.extend(addtolist)
            # adds the previously created addtolist to a list, this makes one word
            addtolist = "" # clears previous variable

    for i in message:
        # for every word in the list
        str(i) # make it into a string
    print(CODE_reversed[i()]) # search the dictionary for that word


if __name__ == "__main__":
    main()

此代码接受一个词,并尝试在字典中查找它,但它不起作用 我也试过在字典中搜索每个单独的莫尔斯电码字母,但问题是你无法分辨字母何时开始和结束,所以“...”以“EEE”而不是“S”的形式出现,我不知道'知道如何解决这个问题

我也尝试过寻找解决方案,但只在 Java 中找到它们,而且我不懂 Java

最佳答案

一旦你定义了一个方向的映射,你就可以使用字典推导式将它映射到另一个方向

CODE = {'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': '----.' 
        }

CODE_REVERSED = {value:key for key,value in CODE.items()}

然后您可以使用带有生成器表达式的join 来执行翻译。

def to_morse(s):
    return ' '.join(CODE.get(i.upper()) for i in s)

def from_morse(s):
    return ''.join(CODE_REVERSED.get(i) for i in s.split())

>>> to_morse('hello')
'.... . .-.. .-.. ---'
>>> from_morse('.... . .-.. .-.. ---')
'HELLO'

关于python - 摩尔斯电码到英语 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32094525/

相关文章:

algorithm - 没有分隔符的莫尔斯 - 最佳算法

python - 启动 playonlinux 时出现错误 "No module named wxversion"

javascript - Python 到 JavaScript 转换器

python - 根据两个字典对列表进行排序

java - 递归填充树

c# - 索引超出了数组的范围 C#,莫尔斯转换器

python - 如何解决django HayStack、elasticsearch update_index错误?

python - Django 监听器听不到信号

Python将字典中的负值更改为正值

C++删除指针映射: free() invalid size