题目背景:
你的任务是用莫尔斯电码解密秘密信息。消息将由单词组成,单词之间有3个空格,每个单词的每个字母之间有1个空格。如果解密后的文本以字母开头,则必须以大写字母打印此字母。
Example:
morse_decoder("… — – . - . -…- -") == “Some text”
morse_decoder("…— ----- .---- —…") == “2018”
morse_decoder("… - .-- .- … .- --. — --- -… -… .- -.–") == “It was a good day”
代码实现:
MORSE = {
".-": "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",
}
def morse_decoder(code):
words=code.split(' ')
result=''
flag=1
for word in words:
if word in MORSE:
result+=MORSE[word]
elif word=='':
if flag==1:
result+=' '
flag*=-1
if result[0].isalpha():
result=result.capitalize()
return result
if __name__ == "__main__":
print("Example:")
print(morse_decoder("... --- ..."))
# These "asserts" using only for self-checking and not necessary for auto-testing
assert morse_decoder("... --- -- . - . -..- -") == "Some text"
assert morse_decoder("..--- ----- .---- ---..") == "2018"
assert (
morse_decoder(".. - .-- .- ... .- --. --- --- -.. -.. .- -.--")
== "It was a good day"
)
print("Coding complete? Click 'Check' to earn cool rewards!")
思路分析:
题目所给的函数参数是字符串,对应的MORSE中是字典。在字符串中,转化后的信息文本里面有空格,不能之间字符串.split()。这时候我们split(’ ‘),切除一个空格后,得到的结果是含有连续两个’’,’‘空字符串的列表,这时候利用flag标签,第一次遇到空字符串’‘时把前面在字典里找到的字符拼接起来再与空格’ ‘相加,同时flag与-1相乘变号得到-1,也就是第二个’'空字符串不执行任何操作。最后判断如果字符串首位为字母则大写就行。
Best Code:
MORSE = {'.-': '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', "+": " "
}
morse_decoder = lambda code: "".join([MORSE[i] for i in code.replace(" ", " + ").split()]).capitalize()