我制作了一個使用字典將莫爾斯電碼轉換為文本的函式。斜杠 '/' 相當于一個空格,用于分割兩個單詞。因此,我使用 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'。有人愿意解釋如何解決這個問題嗎?提前致謝。
uj5u.com熱心網友回復:
您在回圈中間回傳并退出函式。固定的:
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("/")])
uj5u.com熱心網友回復:
您在回圈內回傳結果,因此它只回傳第一個元素(“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)
uj5u.com熱心網友回復:
問題是你return在你的回圈中,這意味著你只回傳第一個單詞。
這是一個簡單地嵌套兩個join呼叫來解碼整個字串的實作:
def morse_to_text(morse):
return " ".join(
"".join(decode[char] for char in word.split())
for word in morse.split("/")
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478269.html
下一篇:用串列中的字串替換部分字串
