问题描述
我不知道为什么第一个星号不打印,有没有人有任何想法?顺便说一句,我正在使用字典。
输入
error
' ****'
预期输出
'*****'
MORSE_CODES={'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':'--..'}
def encode_Morse(my_msg):
my_msg_Morse=" "
for letter in my_msg:
if letter!=" " and letter not in MORSE_CODES:
my_msg_Morse+="*"
elif letter!=" ":
my_msg_Morse+= MORSE_CODES[letter]+" "
else:
my_msg_Morse+=" "
my_msg_Morse = my_msg_Morse[:-1]
return my_msg_Morse
解决方法
问题是您没有返回完整的字符串,并且最后一个 星号没有打印出来。您可以通过修改分配 my_msg_Morse = my_msg_Morse[:-1]
来解决此问题
到
my_msg_Morse = my_msg_Morse
。
如果您没有在此条件下添加空格(用于与您的字典匹配的字符 - 即大写字母)
elif letter!=" ":
my_msg_Morse+= MORSE_CODES[letter]+" "
更清楚的是,您通常会遇到此问题。考虑不添加空格的测试用例:
输入:ERROR
预期输出: ..-..-.---.-.
实际输出: ..-..-.---.-
但是,您每次将大写字母渲染为莫尔斯电码后都会添加空格。所以最后一个字符(一个空格)的丢失大部分是无法观察到的。
我不知道您的要求是什么,但如果通过返回没有尾随空格的字符串来满足它们,您可以返回 my_msg_Morse.rstrip()
。字符串对象的 rstrip()
方法删除所有尾随空格。这样,您可以保留字符串内空白,同时消除尾随空白。我也喜欢 Tim Robert 的建议(在对您原始问题的评论中)使用列表并加入它。