У меня есть вопрос, связанный с начинающим фрагментом Python, который я написал, чтобы познакомиться с языком. Это, по общему признанию, тривиальное раннее усилие, но мне все еще интересно, как я мог бы написать это более элегантно.
Программа выводит аргументированные для чтения НАТО версии аргумента, например, "H2O" -> "Отель 2 Оскар", или (без аргумента) выводит весь алфавит. Я в основном использую его для вызовов по MAC-адресам и IQN, но это также полезно для поддержки других телефонов.
Вот тело соответствующей части программы:
#!/usr/bin/env python
import sys
nato = {
"a": 'Alfa',
"b": 'Bravo',
"c": 'Charlie',
"d": 'Delta',
"e": 'Echo',
"f": 'Foxtrot',
"g": 'Golf',
"h": 'Hotel',
"i": 'India',
"j": 'Juliet',
"k": 'Kilo',
"l": 'Lima',
"m": 'Mike',
"n": 'November',
"o": 'Oscar',
"p": 'Papa',
"q": 'Quebec',
"r": 'Romeo',
"s": 'Sierra',
"t": 'Tango',
"u": 'Uniform',
"v": 'Victor',
"w": 'Whiskey',
"x": 'Xray',
"y": 'Yankee',
"z": 'Zulu',
}
if len(sys.argv) < 2:
for n in nato.keys():
print nato[n]
else:
# if sys.argv[1] == "-i" # TODO
for char in sys.argv[1].lower():
if char in nato:
print nato[char],
else: print char,
Как я уже говорил, я просто хочу увидеть предложения по более элегантному способу кодирования этого.
Моим первым предположением было использование списка со списком [nato[x] for x in sys.argv[1].lower() if x in nato]
, но это не позволяет мне выводить неалфавитные символы.
Следующим моим предположением было использование map
, но я не смог отформатировать лямбды, которые не страдали от того же углового случая.
Есть предложения? Может быть, что-то с первоклассными функциями? Возиться с кишками массива?
Кажется, что это может быть почти вопрос Code Golf, но я чувствую, что просто переосмысливаю :)