“”.join()方法省略单词之间的空格

2024-04-28 17:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个简单的摩尔斯电码转换器,以应对挑战。基本上,给我一个句子,我必须用字典把它转换成摩尔斯电码。我使用了一个基本的for循环,但是一旦我尝试将列表转换为字符串,我发现''.join()方法完全忽略了morse转换之间的空格

这是我的代码:

def encode_morse(message):
    char_to_dots = {
  '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': '----.',
  '&': '.-...', "'": '.----.', '@': '.--.-.', ')': '-.--.-', '(': '-.--.',
  ':': '---...', ',': '--..--', '=': '-...-', '!': '-.-.--', '.': '.-.-.-',
  '-': '-....-', '+': '.-.-.', '"': '.-..-.', '?': '..--..', '/': '-..-.'
}
    print(message)
    message_list = list(message)
    morse_output = []

    for i in message_list:
        if i != ' ':
            morse_output.append(char_to_dots.get(str(i)))
        else:
            morse_output.append(' ')

    return ''.join(morse_output)

这是输出:

EDABBIT CHALLENGE
FAILED: Test 1: '.-...--...-.....- -.-......-.-...-...-.--..' should equal '. -.. .- -... -... .. -   -.-. .... .- .-.. .-.. . -. --. .'
ERROR: Traceback:
   in <module>
  File "./frameworks/python/cw-2.py", line 28, in assert_equals
    expect(actual == expected, message, allow_raise)
  File "./frameworks/python/cw-2.py", line 18, in expect
    raise AssertException(message)
cw-2.AssertException: Test 1: '.-...--...-.....- -.-......-.-...-...-.--..' should equal '. -.. .- -... -... .. -   -.-. .... .- .-.. .-.. . -. --. .'

Tags: tointestmessageforoutputmorse电码
3条回答

正如您所说,您的代码不会生成输出

更换零件

message_list = list(message)
morse_output = []

for i in message_list:
    if i != ' ':
        morse_output.append(char_to_dots.get(str(i)))
    else:
        morse_output.append(' ')

return ''.join(morse_output)

morse_output = []

for i in message:
    if i != ' ':
        morse_output.append(char_to_dots[i.upper()])
    else:
        morse_output.append('  ')

return ' '.join(morse_output)

解释:

  1. 如果您想在字符串(message_list = list(message))的字符上进行迭代,则无需从字符串(message_list = list(message))生成列表

  2. 您需要将字母转换为大写字母(^{),因为您的字典只包含大写字母键

  3. 使用dictionary为给定键赋值非常简单,只需将该键添加到dictionary名称(char_to_dots[i.upper()])后面的方括号中即可

  4. 您需要在转换后的输出中分离单个字母和单个单词-我为字母分隔符(' '.join(morse_output))选择了1个空格,为单词分隔符(morse_output.append(' '))选择了2个空格

您可以在字典中插入“”:“”来处理空格(因此不需要“if i!=””条件)

char_to_dots = {
'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': '  .',
'&': '.-...', "'": '.  .', '@': '. .-.', ')': '-. .-', '(': '-. .',
':': ' -...', ',': ' .. ', '=': '-...-', '!': '-.-. ', '.': '.-.-.-',
'-': '-....-', '+': '.-.-.', '"': '.-..-.', '?': '.. ..', '/': '-..-.',
' ': ' '
}

message ="HI THERE"
a = [char_to_dots[c] for c in message]
print(' '.join(a))

输出:

.... ..   - .... . .-. .

您应该指定要通过空格(' ')进行连接。你有没有说' '.join(morse_output)而不是''.join(morse_output)

相关问题 更多 >