CheckIO是一个通过闯关游戏学习编程的网站(Python和JavaScript)。通过解题开发新“岛屿”,同时,通过做任务获得Quest Points解锁会员题目。
文章内容:题目、我自己的思路和代码以及优秀代码,如果想看大神解题可以直接跳到“优秀代码”部分。
本题链接:https://py.checkio.org/en/mission/morse-decoder/
这一任务是使用摩斯电码解密机密消息。
每条机密消息都由单词组成,单词之间有3个空格,每个单词的每个字母之间有1个空格。
如果解密后的文本以字母开头,该字母需要转为大写字母。
输入: 机密消息.
输出: 解密文本.
举个栗子:
morse_decoder("... --- -- . - . -..- -") == "Some text"
morse_decoder("..--- ----- .---- ---..") == "2018"
morse_decoder(".. - .-- .- ... .- --. --- --- -.. -.. .- -.--") == "It was a good day"
用处: For cryptography and spy work.(用于加密和间谍工作 )
假设:
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):
# Your code here!
return ''
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!")
难度: Elementary+
code
分割为每个摩斯电码,形成列表;result
字符串用于存放破解出的字母或密码;MORESE
字典,将列表中的每个元素转换为字母或数字,同时添加到 result
字符串里;result
字符串里的首字母大写。def morse_decoder(code):
code = code.replace(' ', ' ').split(' ')
result = ''
for i in code:
if i:
result += MORSE[i]
else:
result += ' '
result = result.capitalize()
return result
import re
def morse_decoder(code):
return re.sub(' ?(\S+) ?', lambda m: MIORSE[m.group(1)], code).capitalize()
将一个前和后 有或没有空格的任意长度字符串替换为 MORESE
字典里对应的值。
def morse_decoder(c):
return "".join(MORSE[i] for i in re.findall("([.-]+| {3})", c)).capitalize()