2017-05-23 308 views
-3

我必須寫一個函數(「高清stackHeights」),您是想採取一個參數一批杯子,並返回一個可以與數杯建成一個堆棧的最大高度。例如,如果你有7杯,你可以建立高度3的堆棧,但你沒有足夠的身高4的堆棧,因爲你只能有一個杯底部行,你需要4Python - 堆疊杯?

「提示:從上使用,同時建立上下

輸出:

>>> stackHeight (7) 
3 
>>> stackHeight (3) 
2 
>>> stackHeight (12) 
4 

這就是我現在所擁有的:

def stackHeight(nCups): 
    nCups = int(input()) 
    cups = {} 
    for i in range(nCups): 
     line = input().split() 
     if line[0].isnumeric(): 
      cups[int(line[0])/2] = line[1] 
     else: 
      cups[int(line[1])] = line[0] 
      print("\n".join([cups[k] for k in sorted(cups.keys())])) 

我在做什麼錯誤的代碼沒有按」 t似乎跑f或某種原因。請記住,我對編程還很陌生,所以對羣集感到抱歉。

+1

只要到達input(),程序就會停止並等待輸入。你不應該有任何調用'input()'_inside_你的函數。 –

+0

你的函數中有兩個'input'語句。第一個只會覆蓋你的輸入參數,因此是毫無意義和多餘的。你有另一個循環。我沒有看到你的函數描述中需要輸入文字的任何東西,爲什麼呢? –

回答

0

有相當我與你的代碼,發現了一些問題。首先,你有太多的時間input(),並且input()會在等待用戶輸入的同時凍結程序。您可能需要input("string that tells the user what to put here")。此外,你有一個變量nCups,但nCups被設置爲input(),所以它完全使得變量無用。另外,如果你想要它如何在你的例子中,你不想在循環中print()。另一件事是,當你做cups={}時,你將它作爲一個字典,但你稍後使用一個整數作爲索引,所以你需要一個list []。

0

你指的是被稱爲Triangular Numbers數字的序列,它有一個公式來計算n個數字:

T(n) = n(n+1)/2

使用二次公式,你可以反轉這:

T'(n) = (sqrt(8n+1)-1)/2

就這樣你的代碼將是:

def stackHeight(nCups): 
    return ((8*nCups+1)**0.5-1) // 2 

和測試:

>>> def stackHeight(nCups): 
...  return ((8*nCups+1)**0.5-1)//2 
... 
>>> stackHeight(7) 
3.0 
>>> stackHeight(3) 
2.0 
>>> stackHeight(12) 
4.0