2017-03-25 34 views
1

當一個男人爬上一個斜坡時,他會衝出來,直到他耗盡能量而不是停下來休息一下,該函數會返回他爬上斜坡的次數,直到他爬到頂部。每次他再次衝擊時,他都輸掉5%。但是,當我運行這個程序時,它需要很長時間,並且不會返回任何內容。它應該返回19如何減少5%的變量?

def num_rushes(slope_height, rush_height_gain, back_sliding): 
     current_height = 0 
     rushes = 0 
     while current_height < slope_height: 
      current_height += rush_height_gain 
      if current_height < slope_height: 
       current_height -= back_sliding 
      rushes += 1 
      rush_height_gain = rush_height_gain * 0.95 
     return rushes 

    ans = num_rushes(100, 15, 7) 
    print(ans) 
+0

我會推薦向循環中添加一些打印語句,以查看每次迭代後值的變化情況,並瞭解發生了什麼問題。你沒有對'back_sliding'變量做任何事情,所以你可能忘了做一些問題。 –

+0

你確定這是你正在運行的代碼嗎?我複製並粘貼它,幾乎立即得到8作爲輸出。 – GreenMatt

+0

當我在Python 3.5.3中運行它時,它非常快速地結束並打印'8'。當然,在我運行之前我已經修好了縮進。你真的有每條線前面的所有空間嗎? –

回答

0

請告訴我發生的事情是,你的身高增長是恆定的(15),並在循環過程您可以通過一些固定滑回(7),只要你不是在頂部。所以你會認爲你只是緩慢地爬坡到頂部,因爲增益大於滑動回退

但是,循環的每次迭代都會將高度增加的值減小到95%價值(即你每次迭代越來越少)。這很好,你會繼續攀登,但只要高度增加值小於滑動返回值,你就會繼續滑動到當前高度的負值,並且循環將永不退出

+1

我甚至會添加那個日誌(7/15)/ log(0.95)= 14.86 ...所以在14次匆匆之後,你會開始走下坡路:) – Anis