首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当两个变量之和大于或等于12时,减去12

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

Stack Overflow用户
提问于 2016-06-04 08:50:28
回答 3查看 144关注 0票数 4

我来自音乐背景,所以我对将音乐集理论实现到Python脚本中很感兴趣。

基本上,音符的变量被分配给数字(C = 0,C=1等)。然而,音乐集合论只适用于数字11,因为B= 11,下一个C又是=0。

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

代码语言:javascript
复制
# 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= for,而B和F锐利是一个完美的第5间隔)。

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

代码语言:javascript
复制
if answer >= 12:
    answer - 12

有人有什么想法吗?有更好的方法来做这件事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-04 08:52:10

有一个模算子%,它就是这样做的(参见这里):

代码语言:javascript
复制
print((11 + 7) % 12)

或更广泛地说:

代码语言:javascript
复制
def add_wrap_overflow(x,y):
    return (x+y) % 12
票数 5
EN

Stack Overflow用户

发布于 2016-06-04 09:01:17

您的解决方案几乎是正确的;然而,answer - 12只是一个表达式,即它的计算值为answer - 12值,而不产生任何附加效果。

您需要创建一条语句,将该值分配给某个变量(在本例中,相同的变量):

answer = answer - 12

Python提供了编写这篇文章的一种简短方法(尽管您应该避免它,因为它可能会让初学者感到困惑):

answer -= 12

但是,在您的示例中,模运算符可能更有用:

answer = answer % 12answer %= 12

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

票数 0
EN

Stack Overflow用户

发布于 2016-06-04 09:06:22

我会更正你的代码

代码语言:javascript
复制
if (answer >= 12):
    answer = answer - 12
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37628300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档