当两个变量之和大于或等于12时减去12
Subtracting 12 when the sum of two variables is greater or equal to 12
我有音乐背景,所以我对将音乐集理论应用到 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 sharp,并且B 和 F sharp 相差完美的第 5 个)。
我想我需要这样的东西,但我不知道如何实现它。
if answer >= 12:
answer - 12
有人有什么想法吗?有更好的方法吗?
有一个modulo operator, %
which does exactly this (see also here):
print((11 + 7) % 12)
或更一般地说:
def add_wrap_overflow(x,y):
return (x+y) % 12
您的解决方案几乎是正确的;但是,answer - 12
只是一个表达式,即它的计算结果为值 answer - 12
而没有任何附加效果。
您需要编写一条语句将该值赋给某个变量(在本例中为同一变量):
answer = answer - 12
.
Python 提供了一种简短的写法(尽管你应该避免它,因为它可能会让初学者感到困惑):
answer -= 12
.
但是在您的情况下,模运算符可能更有用:
answer = answer % 12
要么
answer %= 12
简而言之,模运算符减去或加12 直到答案在range(0, 12)
(0到11的其中一个数)中。
我会将您的代码更正为
if (answer >= 12):
answer = answer - 12
我有音乐背景,所以我对将音乐集理论应用到 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 sharp,并且B 和 F sharp 相差完美的第 5 个)。
我想我需要这样的东西,但我不知道如何实现它。
if answer >= 12:
answer - 12
有人有什么想法吗?有更好的方法吗?
有一个modulo operator, %
which does exactly this (see also here):
print((11 + 7) % 12)
或更一般地说:
def add_wrap_overflow(x,y):
return (x+y) % 12
您的解决方案几乎是正确的;但是,answer - 12
只是一个表达式,即它的计算结果为值 answer - 12
而没有任何附加效果。
您需要编写一条语句将该值赋给某个变量(在本例中为同一变量):
answer = answer - 12
.
Python 提供了一种简短的写法(尽管你应该避免它,因为它可能会让初学者感到困惑):
answer -= 12
.
但是在您的情况下,模运算符可能更有用:
answer = answer % 12
要么
answer %= 12
简而言之,模运算符减去或加12 直到答案在range(0, 12)
(0到11的其中一个数)中。
我会将您的代码更正为
if (answer >= 12):
answer = answer - 12