Помоги разобраться с задачкой на словари

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
Здравствуйте! Есть такая задачка, решение здесь вижу только словарём:
«Азбука пилотов» (или официально фонетический алфавит ИКАО) - стандартизированный способ прочтения букв алфавита английского языка в авиации. Каждая буква кодируется словом, которое при плохой связи позволяет с высокой вероятностью распознать букву которая передаётся. Ваша задача, написать скрипт, который будет переводить буквенно-цифровую комбинацию в набор слов из «азбуки пилотов». Например: пользователь вводит комбинацию буквенно-цифровую, (буквы только латинские) (например: KL1386), а скрипт выдает «расшифровку» в соответствии с алфавитом (например: Kilo Lima One Three Eight Six). Регистр вводимой комбинации не должен влиять на результат (т.е. большие и маленькие буквы дают один и тот же результат)
Python:
decoding = list(str(input().lower()))
IKAO = {
    '1': 'One', '2': 'Two', '3': 'Three', '4': 'Four', '5': 'Five', '6': 'Six', '7': 'Seven', '8': 'Eight', '9': 'Nine',
    'a': 'Alpha', 'b': 'Bravo', 'c': 'Charlie', 'd': 'Delta', 'f': 'Foxtrot', 'g': 'Golf', 'h': 'Hotel', 'i': 'India',
    'k': 'Kilo', 'l': 'Limo', 'm': 'Mike', 'n': 'November', 'o': 'Oscar', 'p': 'Papa', 'q': 'Quebec', 'r': 'Romeo',
    's': 'Sierra', 't': 'Tango', 'u': 'Uniform', 'v': 'Victor', 'w': 'Whiskey', 'x': 'X-ray', 'y': 'Yankee', 'z': 'Zulu',
    }
for key, value in IKAO.items():
    for i in decoding:
        if key in i:
            print(value, end=' ')
Код работает немного не так как я хочу,при вводе "KL1386" чтоб выводило "Kilo Limo One Three Six Eight", а вывод выдает "One Three Six Eight Kilo Limo"
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Код работает немного не так как я хочу,при вводе "KL1386" чтоб выводило "Kilo Limo One Three Six Eight", а вывод выдает "One Three Six Eight Kilo Limo"
Вот пример:
Python:
decoding = list(str(input().lower()))
IKAO = {
    '1': 'One', '2': 'Two', '3': 'Three', '4': 'Four', '5': 'Five', '6': 'Six', '7': 'Seven', '8': 'Eight', '9': 'Nine',
    'a': 'Alpha', 'b': 'Bravo', 'c': 'Charlie', 'd': 'Delta', 'f': 'Foxtrot', 'g': 'Golf', 'h': 'Hotel', 'i': 'India',
    'k': 'Kilo', 'l': 'Limo', 'm': 'Mike', 'n': 'November', 'o': 'Oscar', 'p': 'Papa', 'q': 'Quebec', 'r': 'Romeo',
    's': 'Sierra', 't': 'Tango', 'u': 'Uniform', 'v': 'Victor', 'w': 'Whiskey', 'x': 'X-ray', 'y': 'Yankee', 'z': 'Zulu',
    }
print(" ".join([IKAO[s] for s in decoding]))
 
  • Мне нравится
Реакции: Flajkey

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
А можете объяснить пожалуйста механизм действия этого кода?
В переменную s по очереди записываются значения из списка decoding, каждый раз когда записываться новое значение (следующая буква) из словаря берётся слово по ключу s (буква), и в результате получается новый список, где вместо каждой буквы стоит соответствующее слово

Python:
mas = [IKAO[s] for s in decoding]

Такая конструкция называется генератор списков.


join соединяет элементы списка в строку, вставляя между ними указанную строку (тут пробел)
Python:
line = " ".join(mas)

P. S. input().lower() и так строка, не надо к ней применять str()

А в нашем случае и в список незачем её преобразовывать, достаточно написать так:

Python:
decoding = input().lower()
 

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
Вот пример:
Python:
decoding = list(str(input().lower()))
IKAO = {
    '1': 'One', '2': 'Two', '3': 'Three', '4': 'Four', '5': 'Five', '6': 'Six', '7': 'Seven', '8': 'Eight', '9': 'Nine',
    'a': 'Alpha', 'b': 'Bravo', 'c': 'Charlie', 'd': 'Delta', 'f': 'Foxtrot', 'g': 'Golf', 'h': 'Hotel', 'i': 'India',
    'k': 'Kilo', 'l': 'Limo', 'm': 'Mike', 'n': 'November', 'o': 'Oscar', 'p': 'Papa', 'q': 'Quebec', 'r': 'Romeo',
    's': 'Sierra', 't': 'Tango', 'u': 'Uniform', 'v': 'Victor', 'w': 'Whiskey', 'x': 'X-ray', 'y': 'Yankee', 'z': 'Zulu',
    }
print(" ".join([IKAO[s] for s in decoding]))
А можете объяснить пожалуйста механизм действия этого кода?
 

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