我编写了一个使用字典将莫尔斯电码转换为文本的函数。斜杠'/'相当于空格,分隔两个单词。因此,我使用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("/")
)