Задача с расшифровкой азбуки морзе, помогите исправить код

rowta

Новичок
Пользователь
Ноя 7, 2022
7
0
1
Провозился с кодом несколько дней. Все равно не могу выполнить одно из условий задачи.

Задача:

Напиши функцию decode_morse, которая принимает строку message (закодированную азбукой Морзе) и возвращает раскодированную строку. Буквы в message разделены пробелом. Неправильные коды нужно заменить на -. Регистр не имеет значения в результате.

Примеры:
Код:
decode_morse('... --- ...') == 'SOS'
decode_morse('') == ''
decode_morse('... .----. ...') == 'S-S'

Сама Азбука морзе:
Код:
symbols = ['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']
morse_codes = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.', '-----']



Мое код выглядит довольно таки нелепо, но выполняет все условия, кроме одного ("Function 'decode_morse' should return an empty string when message is empty")

Код:
def decode_morse(message: str) -> str:
    # write your code here
    
    if message == 0:
        return ' '
        
    message = message.upper()
    message = message.split(" ")
    text = ''
    
    morse_codes = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.',
                   '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..', '.----',
                   '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.', '-----']

    for symb in message:

        if symb == '.-':
            text += 'A'
        if symb == '-...':
            text += 'B'
        if symb == '-.-.':
            text += 'C'
        if symb == '-..':
            text += 'D'
        if symb == '.':
            text += "E"
        if symb == '..-.':
            text += 'F'
        if symb == '--.':
            text += 'G'
        if symb == '....':
            text += 'H'
        if symb == '..':
            text += 'I'
        if symb == '.---':
            text += 'J'
        if symb == '-.-':
            text += 'K'
        if symb == '.-..':
            text += 'L'
        if symb == '--':
            text += 'M'
        if symb == '-.':
            text += 'N'
        if symb == '---':
            text += 'O'
        if symb == '.--.':
            text += 'P'
        if symb == '--.-':
            text += 'Q'
        if symb == '.-.':
            text += 'R'
        if symb == '...':
            text += 'S'
        if symb == '-':
            text += 'T'
        if symb == '..-':
            text += 'U'
        if symb == '...-':
            text += 'V'
        if symb == '.--':
            text += 'W'
        if symb == '-..-':
            text += 'X'
        if symb == '-.--':
            text += 'Y'
        if symb == '--..':
            text += 'Z'
        if symb == '.----':
            text += '1'
        if symb == '..---' :
            text += '2'
        if symb == '...--':
            text += '3'
        if symb == '....-':
            text += '4'
        if symb == '.....':
            text += '5'
        if symb == '-....':
            text += '6'
        if symb == '--...':
            text += '7'
        if symb == '---..':
            text += '8'
        if symb == '----.':
            text += '9'
        if symb == '-----':
            text += '0'
        if symb not in morse_codes:
            text += '-'

    return text

Подскажите, в чем ошибка. Почему возвращает " - " , когда в сообщении ничего нет?
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
Почему возвращает " - " , когда в сообщении ничего нет?
Потому что ты сам в условии так указал:ROFLMAO:
if symb not in morse_codes: text += '-'

А так уже сработает как надо:
Python:
symbols = ['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']
morse_codes = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.', '-----']


def decode_morse(message: str) -> str:
    # write your code here
    if not message:
        return ''
    message = message.split(" ")
    text = ''

    for i in message:
        if i in morse_codes:
            text += symbols[morse_codes.index(i)]
        else:
            text += '-'

    return text


print(decode_morse('... --- ...'))  # 'SOS'
print(decode_morse(''))  # ''
print(decode_morse('... .----. ...'))  # 'S-S'
 
  • Мне нравится
Реакции: regnor и rowta

Форум IT Специалистов