2016-11-24 31 views
0

對於我的編程任務的一部分,我想執行以下操作。 在級別1中,我有一個輸入數字(N),我除以另一個數字(X)。在下一級別,相同的輸入數字(N)除以X * 2。同樣,我想繼續計算,直到最終結果變得小於或等於1.在Python中按級別迭代

例如,如果在第一次運行中X = 8和N = 2,我將除以8/2 = 4 在下一次運行中,I將劃分8/4這是2 在最後一輪我將劃分8/8這是1

我想在Python中實現這個。我有代碼的基本思想如下:

def myFunc(n, x): 

     first_level=n/ x 
     next_level = n /x * 2 
     ............ 

     if result <=1: 
      break 

    myFunc(8, 2) 

但我不明白如何迭代計算可能的下一個級別。請幫忙。

+0

創建一個循環。每次你用'(x * i)'劃分'n',其中'i'開始爲'1'等。添加你的條件來退出循環。 – qxz

+0

第一級之後,使用while循環保持除以x * 2且條件結果大於1 – Skycc

回答

1

可以使用遞歸函數:添加打印顯示的結果是等於1

def myFunc(n, x): 

    result=n/ x 
    if result <=1: 
     print result 
    else: 
     myFunc(n,x*2) 

myFunc(8, 2) 

或者讓你可以使用全局變量水平:

count = 1 
def myFunc(n, x): 
    global count 
    count = count + 1 
    result=n/ x 


    if result <=1: 
     print result 
    else: 
     myFunc(n,x*2) 
myFunc(8, 2) 
print count 
+1

遞歸對此並不是必需的,並且通常應避免,因爲它會產生開銷。國際海事組織,一個簡單的循環會更好。 – qxz

+0

非常感謝您介紹全局變量。它可以更輕鬆地捕獲關卡的數量。 – Ann

1

這是一個示例函數,它通過迭代來實現這個功能!

這裏的關鍵是設置一個臨時變量,它跟蹤循環的當前值,從而允許您進行除法。

def myFunc(n, x): 

    i = 1 
    interim_result = n 

    while interim_result > 1: 
     interim_result = n/float(x**i) # I guess you're working with integers, but just in case 
     print "This is loop number: " + str(i) + " with result: " + str(interim_result) 

     i = i + 1 

myFunc(8, 2) 

希望這是明確的。

+0

是的,這很清楚。我想到了添加interim_result的想法。非常感謝。 – Ann