2016-04-12 6 views
2

ich ein Programm schreibt zufällige 12-Ton-Skalen (Musiktheorie) zu erzeugen und speichern sie in einer Liste numbers[]mod verwenden zu ersetzen, wenn else-Anweisung

Ich habe eine Funktion invert() genannt, die zwischen jedem Wert der Differenz nimmt und dann wird das auf der vorherigen Nummer ausgeführt, um die Intervalle in der Liste zu invertieren.

zum Beispiel (1,5,4,7,8,3) invertiert wäre (1,9,10,7,6,11)

def invert(): 

    diff = [b - a for (a, b) in zip(numbers[:-1], numbers[1:])] 

    for a in range(11): 

     if numbers[a] - diff[a] > 11: 

      numbers[a+1] = numbers[a] - diff[a] - 12 

     elif numbers[a] - diff[a] < -11: 

      numbers[a+1] = numbers[a] - diff[a] + 12 

     else: 

      numbers[a+1] = numbers[a] - diff[a] 

    return numbers 

Meine Frage ist, wie ich verwende modulo, um die Verwendung dieser if-Anweisungen zu entfernen. Gibt es eine Möglichkeit, Mod zu verwenden, um Zahlen zu umbrechen, wenn also der Unterschied -15 ist, würde er auf -3 aufgewertet werden?

Antwort

0

Ich habe diesen Teil der Frage "zum Beispiel (1,5,4,7,8,3) invertiert wäre (1,9,10,7,6,11)" als Leitfaden verwendet.

Das Dectave (? ... wie Oktave, aber mit 12 Tönen anstelle von 8 für eine diatonische Skala) kann invertiert werden, indem zuerst die negativen Werte entfernt werden und dann sichergestellt wird, dass unser Wert nicht außerhalb unseres 12 Notenbereichs liegt.

def invertieren():

numbers = [1, 5, 4, 7, 8, 3, 2, 6, 9, 10, 11, 12] 

diff = [b - a for (a, b) in zip(numbers[:-1], numbers[1:])] 

for a in range(11): 

     if numbers[a] - diff[a] % -12 < 12: 
      numbers[a + 1] = numbers[a] - diff[a] % -12 

     else: 
      numbers[a + 1] = numbers[a] - diff[a] % 12 

     if numbers[a] - diff[a] % 12 is 0: 
      numbers[a + 1] = 12 

return numbers 

Output - [1, 9, 10, 7, 6, 11, 12, 8, 5, 4, 3, 2]