首页 > 解决方案 > 莫尔斯到文本和组合词的递归搜索

问题描述

嗨,我编写了一个代码,它有两个函数,第一个函数可以简单地从莫尔斯语转换为文本,第二个函数如果之间没有空格,它会得到所有可能的单词组合,并且它会递归地找到。

问题是第二个函数递归地获取可能的组合工作正常,但第一个函数不是简单的将莫尔斯转换为纯文本,它会抛出错误。

这是我的代码:

import re
morseFile="""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   --.."""

#simple function from moorse to text

def decodeMorse(morseCode):
    split_morse_code = morseCode.strip().split(' ')
    return ''.join([morseFile[code] for code in split_morse_code]).replace('  ',  ' ')



#this is getting all the possible combination of words works fine

morse = {code:letter for line in morseFile.split("\n") for letter,code in [line.split()]}
def decode(coded,maxLen=10):
    if not maxLen: return
    for size in range(1,min(4,len(coded))+1):
        code = coded[:size]
        if code not in morse: continue
        remaining = coded[size:]
        if not remaining: yield morse[code]
        for rest in decode(remaining,maxLen-1):
            yield morse[code] + rest

print(sum(1 for _ in decode("-.-.-.--")))
for string in decode("-.-.-.--"):
    if len(string)<9: print(string)

print(decodeMorse('.'))

运行程序时抛出的错误是这样的:

100
TETETETT
TETETEM
TETETAT
TETETW
TETENTT
TETENM
TETEKT
TETEY
TETAETT
TETAEM
TETAAT
TETAW
TETRTT
TETRM
TENTETT
TENTEM
TENTAT
TENTW
TENNTT
TENNM
TENKT
TENY
TEKETT
TEKEM
TEKAT
TEKW
TECTT
TECM
TAETETT
TAETEM
TAETAT
TAETW
TAENTT
TAENM
TAEKT
TAEY
TAAETT
TAAEM
TAAAT
TAAW
TARTT
TARM
TRTETT
TRTEM
TRTAT
TRTW
TRNTT
TRNM
TRKT
TRY
NTETETT
NTETEM
NTETAT
NTETW
NTENTT
NTENM
NTEKT
NTEY
NTAETT
NTAEM
NTAAT
NTAW
NTRTT
NTRM
NNTETT
NNTEM
NNTAT
NNTW
NNNTT
NNNM
NNKT
NNY
NKETT
NKEM
NKAT
NKW
NCTT
NCM
KETETT
KETEM
KETAT
KETW
KENTT
KENM
KEKT
KEY
KAETT
KAEM
KAAT
KAW
KRTT
KRM
CTETT
CTEM
CTAT
CTW
CNTT
CNM
CKT
CY
Traceback (most recent call last):
  File "/root/PycharmProjects/taimoor/dala.py", line 54, in <module>
    print(decodeMorse('.'))
  File "/root/PycharmProjects/taimoor/dala.py", line 33, in decodeMorse
    return ''.join([morseFile[code] for code in split_morse_code]).replace('  ',  ' ')
  File "/root/PycharmProjects/taimoor/dala.py", line 33, in <listcomp>
    return ''.join([morseFile[code] for code in split_morse_code]).replace('  ',  ' ')
TypeError: string indices must be integers

Process finished with exit code 1

第一个函数 morse 到纯文本的输出应该是 'e' 但它会抛出错误。

标签: python

解决方案


您需要更改此行:

return '.join([morseFile[code] for code in split_morse_code]).replace('  ',  ' ')

对此

return '.join([morse[code] for code in split_morse_code]).replace('  ',  ' ')

也就是说:

莫尔斯文件->莫尔斯


推荐阅读