当两个变量之和大于或等于12时减去12

时间:2016-06-04 08:50:29

标签: python set theory music-notation

我来自音乐背景,因此我有兴趣将音乐集理论应用到Python脚本中。

基本上,音符的变量被分配给数字(C = 0,C sharp = 1等)。然而,音乐集理论只能达到数字11,因为B = 11,而下一个C将再次= 0。

我已经分配了一些变量,它们看起来像这样。

# pitch classes
Bs = C = 0
Cs = Db = 1
D = 2
Ds = Eb = 3
E = Fb = 4
F = Es = 5
Fs = Gb = 6
G = 7
Gs = Ab = 8
A = 9
As = Bb = 10
B = Cb = 11

# intervals
m2 = 1 
mj2 = 2 
m3 = 3 
mj3 = 4
P4 = 5 
T = 6
P5 = 7
m6 = 8
mj6 = 9
m7 = 10
mj7 = 11

我希望能够一起添加音符和音程,例如B加上完美音乐5.这通常是11 + 7 = 18,但我希望它等于6(因为6 = F锐利,B和F sharp是完美的第5名。)

我想我需要这样的东西,但我不知道如何实现它。

if answer >= 12:
    answer - 12

有没有人有任何想法?是否有更好的方法来实现这一目标?

3 个答案:

答案 0 :(得分:4)

有一个modulo operator%就是这样做的(另见here):

print((11 + 7) % 12)

或更一般地说:

def add_wrap_overflow(x,y):
    return (x+y) % 12

答案 1 :(得分:0)

你的解决方案几乎是正确的;但是,answer - 12只是一个表达式,即它的值为answer - 12而没有任何额外的影响。

您需要创建一个声明,将该值赋给某个​​变量(在本例中为同一个变量):

answer = answer - 12

Python提供了一种简短的写法(虽然你应该避免它,因为它可能会让初学者感到困惑):

answer -= 12

但是在你的情况下,模运算符可能更有用:

answer = answer % 12 要么 answer %= 12

简而言之,模运算符减去或添加12 直到答案在range(0, 12)中(0到11之间的数字之一)。

答案 2 :(得分:0)

我会将您的代码更正为

if (answer >= 12):
    answer = answer - 12