【问题标题】:Using mod to replace if else statement使用 mod 替换 if else 语句
【发布时间】:2016-08-03 07:33:12
【问题描述】:

我正在编写一个程序来生成随机的 12 音阶(音乐理论)并将它们存储在一个列表中 numbers[]

我有一个名为invert() 的函数,它获取每个值之间的差异,然后对前一个数字进行运算以反转列表中的间隔。

例如,(1,5,4,7,8,3) 反转将是 (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

我的问题是如何使用模来删除这些 if 语句的使用。 有没有办法使用 mod 来环绕数字,所以如果差值为 -15,它会被重估为 -3?

【问题讨论】:

    标签: python modulo


    【解决方案1】:

    我使用这部分问题“例如,(1,5,4,7,8,3) 反转将是 (1,9,10,7,6,11)”作为指导。

    可以通过首先删除负值然后确保我们的值不会超出我们的 12 个音符范围来反转八度音阶(?...类似于八度音阶,但使用 12 个音调而不是 8 个全音阶)。

    定义反转():

    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
    

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

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多