把单词转换成莫尔斯码,反之亦然,使用字典,仅此而已。
morse_code = {'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': '--..', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....',
'6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----', ' ': ' '}
def convert_to_morse_code(word):
string = ''
for letternum in word:
if letternum.isalnum():
string += f'{morse_code[letternum.upper()]} '
else:
string += ' '
return string
def convert_to_word(word):
string = ''
if ' ' in word:
word = word.replace(' ', '</<')
if ' ' in word:
word = word.replace(' ', '<')
for code in word:
if code == '/':
word = word.replace(code, ' ')
word = word.split('<')
for code in word:
for key in morse_code.keys():
if morse_code[key] == code:
string += key
return string
print(convert_to_morse_code('HI MICHAEL'))
print(convert_to_word('.... .. -- .. -.-. .... .- . .-..'))发布于 2019-08-28 17:40:29
这个问题可以从某种背景中受益。您不需要回答以下每一个问题,但这对评审人员是有帮助的。
def convert_to_morse_code(word):
...
def convert_to_word(word):
...这看起来有点滑稽,因为他们都用了一个“词”,但两者都没有。一个是包含完整句子的字符串,另一个是包含摩尔斯码的字符串。我建议为这些函数添加一个docstring,它简要地解释了预期的输入。
if letternum.isalnum():
string += f'{morse_code[letternum.upper()]} '
else:
string += ' '如果有人加入了一些国际莫尔斯码符号,比如"?“,会发生什么?还是字典里的"+“?这段代码将忽略这些。我认为字典应该是真理的源泉,而不是伊莎勒姆。
if letternum.upper() in morse_code:
string += morse_code[letternum.upper()] + ' '
else:
string += ' '上述可能性表明生菜不再是一个合适的名称。让它将名称更新为c或char (字符的缩写),这就是它的本质。我在这里提议的另一个改变是使用字典方法.get,因为它有一个方便的参数‘默认值’。如果我们将默认值设置为‘’(因为当字符不是一个符号时,我们知道如何用morse代码编写),这就取代了else分支。
for char in word:
string += morse_code.get(char, ' ') + ' '我认为值得注意的是,这个函数的docstring中跳过了未识别的字符,这是负责的行。
for code in word:
if code == '/':
word = word.replace(code, ' ')一般来说,修改正在循环的东西是个坏主意。它会导致很难发现错误。另一件要注意的事情是,第一次遇到'/‘时,所有的事件都会被替换。这不需要在循环中。
for key in morse_code.keys():
if morse_code[key] == code:
string += key这个循环所做的工作比所需的要多一些。每次在字典中添加一个新的符号时,它都会变得越来越慢。实际上,性能损失并不明显,但如果您认为解决方案听起来更好,可以尝试实现它。
解决方案是构建一个与morse_code相反的新映射,其中所有的键都变成值,所有的值都变成键。
morse_code = {...}
code_to_char = {code: char for char, code in morse_code.items()}
...
if code in code_to_char:
string += code_to_char[code]有一些小问题,你需要决定答案。
convert_to_word(convert_to_morse_code("Hello, world!"))输出'HELLO WORLD '。这样可以吗?输出应该与输入更紧密地匹配吗?为什么有后面的空间?convert_to_morse_code("HI LOW")输出'.... .. .-.. --- .-- '。存在一些变化,例如使用斜杠表示空格('.... .. / .-.. --- .--')或七个点(.... .. ....... .-.. --- .--)。您的代码可以将其作为可选功能吗?convert_to_word在一些奇怪的输入上工作,而对其他输入则不起作用。但是它永远不会告诉用户什么时候出了问题。我更希望convert_to_word('--- -, .')在某种程度上失败,而不是返回'OE'。发布于 2019-08-28 21:09:01
if __name__ == '__main__':使用此保护程序可以在不运行代码的情况下从此脚本导入。
if __name__ == '__main__':
print(convert_to_morse_code('HI MICHAEL'))
print(convert_to_word('.... .. -- .. -.-. .... .- . .-..'))请查看正式的Python样式指南PEP0008 https://www.python.org/dev/peps/pep-0008/,下面是一些评论:

代码看起来是:
def get_translation(translate_to):
"""
Return a dictionary from to (Morse code-text)
assuming translate_to a string:
m for translation to Morse
t for translation to text.
"""
morse_code = {
'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': '--..',
'á': '.--.-', 'ä': '.-.-', 'é': '..-..', 'ñ': '--.--', 'ö': '---.', 'ü': '..--', "'": '·----·',
'1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....',
'6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----', '!': '-·-·--',
'.': '.-.-.-', ',': '--..--', '?': '..--..', ':': '---...', "\"": '.-..-.',
'-': '-....-', '/': '-..-.', '(': '-.--.', ')': '-.--.-', ' ': '\t', '\n': '\t', '_': '··--·-'
}
morse_to_letter = {code: letter for letter, code in morse_code.items()}
if translate_to == 'm':
return morse_code
if translate_to == 't':
return morse_to_letter
else:
raise ValueError(f'Invalid input{translate_to} expected m or t')
def convert_to_morse_code(text):
"""Translate text to Morse code."""
morse_code = get_translation('m')
return ' '.join([morse_code[letter] for letter in text.lower()])
def convert_morse_code_to_text(morse_code):
"""Translate from Morse code to text."""
morse_to_letter = get_translation('t')
text = []
words = morse_code.split('\t')
for word in words:
letters = word.split()
to_text = [morse_to_letter[letter] for letter in letters]
text.append(''.join(to_text))
return ' '.join(text)
if __name__ == '__main__':
print(convert_to_morse_code('Hello Michael! How are you doing today?'))
print(convert_morse_code_to_text('·· ·----· -- ..-. ·· -· . - ···· ·- -· -.- ... .-.-.-'))https://codereview.stackexchange.com/questions/227021
复制相似问题