在Python中创建一个函数,该函数将被分割,直到它位于某个范围内

在Python中创建一个函数,该函数将被分割,直到它位于某个范围内,python,if-statement,Python,If Statement,我正在尝试创建一个函数,该函数将接受一个输入并将其分割,直到它在某个范围内 假设输入为“2600”,我想尝试将其除以,直到它在500和1000之间,然后返回该数字。所以它会这样做 试试2600/1,看看它不在范围内,然后再试一次 然后2600/2,看到它不在范围内,再试一次 然后是2600/3,看看它在射程内,然后返回866 无论如何,我在Python2中这样做,我认为我的想法是正确的,但是语法让我绊倒了 def octavesort(input,counter1): if in

我正在尝试创建一个函数,该函数将接受一个输入并将其分割,直到它在某个范围内

假设输入为“2600”,我想尝试将其除以,直到它在500和1000之间,然后返回该数字。所以它会这样做

试试2600/1,看看它不在范围内,然后再试一次

然后2600/2,看到它不在范围内,再试一次

然后是2600/3,看看它在射程内,然后返回866

无论如何,我在Python2中这样做,我认为我的想法是正确的,但是语法让我绊倒了

def octavesort(input,counter1):    
    if input > (frequency * 2):
        test = input / counter1

        if test > (frequency * 2):
            octavesort(input,counter1+1)

        else:
            return test
    else:
        return test

您忘记返回下一个测试的值

return octavesort(input,counter1+1)
此外,您不需要这两个
else
子句;只需返回
test

是否确实要将输入数除以每个正整数,直到它在范围内?根据函数的名称,我猜想你想除以2的幂,把频率调到所需的倍频程。无论如何,我已经写了两个版本

#/usr/bin/env python
def octavesort0(数字、低、高):
i=2.0
x=num

虽然你不是对的,但我想除以2,但一开始我不明白你在说什么。我一直在为更难的问题绞尽脑汁,结果却监督着一件超级简单的事情。当我的其他公式不能正常工作时,我最终意识到了这一点,并最终自己解决了这个问题。
#! /usr/bin/env python

def octavesort0(num, lo, hi):
    i = 2.0
    x = num
    while not lo <= x <= hi:
        x = num / i
        #print i, x
        i += 1.0
    return x

def octavesort1(num, lo, hi):
    i = 2.0
    x = num
    while not lo <= x <= hi:
        x = num / i
        #print i, x
        i *= 2.0
    return x


octavesort = octavesort1

def main():
    lo, hi = 500, 1000
    print octavesort(23456, lo, hi)

if __name__ == '__main__':
    main()