我只得到一个单词作为使用字典的输出,而它应该是两个



我编写了一个使用字典将莫尔斯电码转换为文本的函数。斜杠'/'相当于空格,分隔两个单词。因此,我使用strip函数制作了一个列表。我还使用了一个循环将列表中的每个元素转换为文本,但没有成功。

dicti = {'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': '----.', '.': '.-.-.-', ',': '--..--', '?': '..--..', '-': '-....-', '/': '-..-.', ':': '---...', "'": '.----.', ')': '-.--.-', ';': '-.-.-', '(': '-.--.', '=': '-...-', '@': '.--.-.'}
decode = {v: k for k, v in dicti.items()}
def morse_to_text(morse):
l = morse.split("/")
for element in l:
new_element = element.split()
result = "".join(decode[symbol] for symbol in new_element)
return result
print(morse_to_text('... --- .../.--. .. . -'))

这个函数没有给我正确的输出。它应该给我"SOS PIET",但它只给我"SOS"。我尝试将返回赋值置于循环之外,但输出仅更改为第二个单词:'PIET'。有人愿意解释如何解决这个问题吗?提前谢谢。

在循环中间返回并退出函数。固定:

def morse_to_text(morse):
l = morse.split("/")
results = []
for element in l:
new_element = element.split()
result = "".join(decode[symbol] for symbol in new_element)
results.append(result)
return " ".join(results)

您还可以将其转换为相当可理解的单行代码:

def morse_to_text(morse):
return " ".join(["".join(decode[symbol] for symbol in word.split())
for word in morse.split("/")])

在循环内部返回结果,因此它只返回第一个元素("SOS")。

您需要将所有解码结果放入一个列表中。然后,您可以将结果连接成一个由空格分隔的单个字符串。

dicti = {'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': '----.', '.': '.-.-.-', ',': '--..--', '?': '..--..', '-': '-....-', '/': '-..-.', ':': '---...', "'": '.----.', ')': '-.--.-', ';': '-.-.-', '(': '-.--.', '=': '-...-', '@': '.--.-.'}
decode = {v: k for k, v in dicti.items()}
def morse_to_text(morse):
l = morse.split("/")

results = []

for element in l:
new_element = element.split()

result = "".join(decode[symbol] for symbol in new_element)
results.append(result)

return " ".join(results)

问题是您在循环中使用了return,这意味着您只返回第一个单词。

下面是一个简单地嵌套两个join调用来解码整个字符串的实现:

def morse_to_text(morse):
return " ".join(
"".join(decode[char] for char in word.split())
for word in morse.split("/")
)

最新更新