2016-03-20 15 views
2

Ich versuche gerade, ein Programm zu machen, das Noten für Violine nimmt und die gegebenen Noten in eine Position auf einer Schnur übersetzt, aber mein Problem ist, dass wenn ich frage, ob ein Schlüssel ist if/then Aussagen wie scharf oder flach, und wie viele scharfe Gegenstände oder wohnungen sind in dieser Tonart finde ich, dass ich ein paar langweilige mache:Wie man eine langweilige if-Anweisung wiederholt

if keysig == sharp and signum == 2: 
    note['LE'] == 'D4' 
    note['SC'] == 'A4' 

elif keysig == sharp and signum == 3: 
    note['LE'] == 'D5' 
    note['SC'] == 'G2' 

Sie werden sehen, dass es super ärgerlich wird zu Geh zurück und mache eine weitere Aussage mit leichten Änderungen. Wie kann ich das beheben?

Für diejenigen von euch, die Noten nicht lesen: Grundsätzlich, was ich versuche zu sagen ist, dass dieser Algorithmus Notizen macht, dass die Benutzereingaben wie A, G oder D und machen sie in genaue Standorte auf dem Geigengriffbrett, so dass Sie nicht manuell nach den Noten suchen müssen. Dieses Programm richtet sich an Geigenneulinge, die keine Erfahrung im Notenlesen haben.

+1

Für diejenigen von uns, die Noten nicht lesen, können Sie bitte den Algorithmus hier erklären? – Mureinik

+2

Probieren Sie '{(scharf, 3): {'LE': 'D5', 'SC': 'G2'}} [keysig, signum]' – jonrsharpe

Antwort

10

könnten Sie ein Wörterbuch verwenden:

transpositions = { 
    (sharp, 2): {'LE': 'D4', 'SC': 'A4'}, 
    (sharp, 3): {'LE': 'D5', 'SC': 'G2'}, 
    # etc. 
} 

note.update(transpositions.get((keysig, signum), {})) 

Dies ein Tupel von (keysig, signum) als Schlüssel verwendet, Zuordnung zu bestimmten Noten Umstellungen. Wenn keine solche Signatur gefunden wird, werden keine Aktualisierungen vorgenommen (Aktualisieren mit einem leeren Wörterbuch).

+0

Elegante Lösung! Ich werde das für die weitere Verwendung behalten. :) – pixis