Emballage autour sur une liste lors de l'indice de la liste est hors de portée
Je suis à la recherche de quelques améliorations de code, ou d'une pré-version construite de ce que j'ai mis en place moi-même que je pense qu'il y a peut-être, ou devrait être, d'une façon plus propre à atteindre ce que je veux.
Je suis en train d'écrire un morceau de logiciel pour convertir les onglets de guitare en notation classique, j'ai besoin de convertir le nombre sur un onglet à la note correspondante, et il serait utile pour la construction d'une liste de chaque chaîne de caractères remarque depuis le début de la chaîne.
J'ai une liste de notes, (a - g#) et une liste de frettes (0, 21).
Notes[frette] fonctionne très bien pour les onze premières notes, mais après cela, j'ai évidemment obtenir un indice d'erreur.
Le code je dois le faire, c'est ici:
notes = ["a", "a#", "b", "c", "c#", "d", "e", "f", "f#", "g", "g#"]
note = 21
while note >= len(notes):
note -= 11
try:
print notes[note]
except:
continue
Cela fonctionne, mais il semble un peu long, est-il une meilleure façon de le faire?
- N'êtes-vous pas oublier "d#" ? Si donc, à l'aide de '%' comme "notes[note % len(notes)]" est une bonne façon d'aller, comme il va automatiquement corriger pour la modification de la liste des tailles.
Vous devez vous connecter pour publier un commentaire.
Utiliser le
%
de l'opérateur pour produire un module:Démo:
ou dans une boucle:
Autres options est d'utiliser itertools.cycle
Utiliser l'opérateur modulo: