您可以通过以下两种方式之一:
- 使用
enumerate() 跟踪迭代中每个字母的索引。检查这是否是my_msg 中的最后一个字母。如果是,请不要添加第二个空格。
def encode_Morse(my_msg):
my_msg=my_msg.upper()
my_msg_Morse=" "
for index, letter in enumerate(my_msg):
if letter!=" " and letter not in MORSE_CODES:
my_msg_Morse+=" * "
elif letter!=" ":
my_msg_Morse+= MORSE_CODES[letter] + " "
if index < len(my_msg) - 1:
my_msg_Morse += " "
else:
my_msg_Morse+=" "
return my_msg_Morse
- 建立一个列表,然后使用
str.join() 将其与空格连接起来。我们还必须在 join() 的结果前后添加一个空格。
def encode_Morse(my_msg):
my_msg=my_msg.upper()
my_msg_Morse_list = []
for letter in my_msg:
if letter=" " and letter not in MORSE_CODES:
my_msg_Morse_list.append("*")
elif letter!=" ":
my_msg_Morse_list.append(MORSE_CODES[letter])
else:
my_msg_Morse_list.append(" ")
# Add the leading and trailing space
return " " + " ".join(my_msg_Morse_list) + " "
我将重写你的函数以使 if-else 阶梯更清晰一些。首先,我要为MORSE_CODES 字典中的空格添加一个值。这消除了检查letter 是否为空格的需要。然后,我将使用dict.get() 函数从MORSE_CODES 中获取键letter 的值。 get() 让我们指定在字典中不存在给定键时要返回的默认值。
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=my_msg.upper()
my_msg_Morse_list = []
for letter in my_msg:
morse_letter = MORSE_CODES.get(letter, "*")
my_msg_Morse_list.append(morse_letter)
# Add the leading and trailing space
return " " + " ".join(my_msg_Morse_list) + " "
当您完成所有这些操作时,如果您想使用生成器表达式代替循环,可以在一行中编写整个函数:
def encode_Morse(my_msg):
return " " + " ".join(MORSE_CODES.get(letter, "*") for letter in my_msg.upper()) + " "
对于每个函数,您可以通过检查以下代码是否提供True来检查它是否提供了预期的输出
' .... . .-.. .-.. --- ' == encode_Morse("hello")