簡體   English   中英

在Python中創建一個函數,該函數會一直划分到一定范圍內

[英]Creating a function in Python that gets divided until it is in a certain range

我正在嘗試創建一個函數,該函數將接受輸入並將其划分為一定范圍。

假設輸入是“ 2600”,我想嘗試將其除以直到它在500和1000之間,然后返回該數字。 所以它會做到這一點

嘗試2600/1,發現它不在范圍內,然后重試

然后2600/2並查看它不在范圍內,然后重試

然后2600/3看到它在范圍內並返回866

無論如何,我正在Python 2中執行此操作,並且我認為我的想法是朝正確的方向發展,但是語法使我感到困惑。

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(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()

順便說一句,您不應將input用作變量名,因為它是內置函數的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM