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

I only get one word as output using dictionaries while it should be two

我制作了一个使用字典将摩尔斯电码转换为文本的函数。斜杠“/”等同于空格并分隔两个单词。因此,我使用 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'。我尝试将 return 赋值放在循环之外,但输出仅更改为第二个单词:'PIET'。有人愿意解释如何解决这个问题吗?提前致谢。

你 return 在循环中间并退出函数。固定:

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)

你也可以把它变成一个相当不稳定的 one-liner:

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

您在循环内返回结果,因此它 returns 只有第一个元素(“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 在你的循环中,这意味着你只是 return 第一个词。

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

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