J'ai une question liée à un extrait de Python pour débutant que j'ai écrit pour me présenter à la langue. C'est un premier effort certes trivial, mais je me demande toujours comment j'aurais pu l'écrire plus élégamment. Le programme affiche les versions lisible phoenetic de l'OTAN d'un argument, tel que "H2O" -> "Hotel 2 Oscar", ou (sans argument) sort tout l'alphabet. Je l'utilise principalement pour appeler des adresses MAC et des IQN, mais c'est utile pour d'autres types de support téléphonique.Mappage Pythonic d'un tableau (Débutant)
est ici le corps de la partie pertinente du programme:
#!/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,
Comme je l'ai mentionné, je veux juste voir des suggestions pour un moyen de code plus élégant cela. Ma première supposition était d'utiliser une compréhension de liste le long des lignes de [nato[x] for x in sys.argv[1].lower() if x in nato]
, mais cela ne me permet pas de sortir des caractères non-alphabétiques. Ma prochaine estimation était d'utiliser map
, mais je ne pouvais pas mettre en forme de lambdas qui ne souffraient pas du même cas.
Des suggestions? Peut-être quelque chose avec des fonctions de première classe? Messing avec les tripes de Array?
Cela semble être presque une question de Code Golf, mais je pense que je suis juste en train de réfléchir :)
+1 pour tout espaçant – thetaiko
Upvoted, mais je devais donner crédit à Extraneon. Merci! :) –