2012-03-26 131 views
1

當我嘗試運行此代碼時,出現不正確的最大值和最小值。有誰能告訴我如何解決它?我不允許使用'max'和'min'。Python代碼中的最大值和最小值不正確

更新:我更新了代碼,它仍然無法正常工作。 更新2:代碼現在可用!十分感謝大家!

minimum=float('inf') 
maximum=None 
count=0 
total=0 
number=input ("Please enter the amount of numbers you wish to categorize: ") 
while True: 

    num = input("Enter a number: ") 
    count+=1 
    total+=num 

    if num is None or num < minimum: 
     minimum = num 

    if num is None or num > maximum: 
     maximum = num 
    if count == number: 
     break   

print "The average of your numbers is ", round ((total/count),2),"." 
print 'The largest number is:', maximum,"." 
print 'The smallest number is:', minimum,"." 
+1

這是功課嗎? – hochl 2012-03-26 01:50:33

+0

我假設這是作業,正如你所說的:「我不允許使用'max'和'min'」。將來,請將「家庭作業」標籤添加到任何作業問題中。 – agf 2012-03-26 01:51:22

+0

是的,抱歉。 – user1292009 2012-03-26 01:52:58

回答

4

你的初始值和條件minimummaximum是不正確的。

minimum = None 
maximum = None 
... 
    if minimum is None or num < minimum: 
     minimum = num 

    if maximum is None or num > maximum: 
     maximum = num 
... 

你可以通過檢查count等於1,而不是身份None也解決此問題。

+0

我改變了這一點,最大值和最小值仍然不正確。 – user1292009 2012-03-26 01:58:19

+0

@ user1292009,你讀過[mVChr](http://stackoverflow.com/a/9865781/577088)的答案嗎? – senderle 2012-03-26 02:04:18

+0

是的,我只是改變了這一點。現在最大值工作正常,但無論如何,最小值是'無'。 – user1292009 2012-03-26 02:07:10

0

需要最少處理特殊值的解決方案是將兩個變量初始化爲+/-無窮大。

minimum=float("-inf") 
maximum=float("inf") 
+0

Python沒有合理的最高(或最低)整數。 – 2012-03-26 01:55:54

+0

經過100%編輯後,現在讓我想起了我的答案:) – 2012-03-26 02:21:18

+0

哦,你必須設置'最小'爲'inf'和'最大'爲'-inf';你的答案總是給出'-inf','inf'作爲答案 – 2012-03-26 02:41:43

1

因爲這是你應該學習的功課。下面是一些想法如何解決問題:

一個錯誤是,您正在初始化maximumminimum0程序啓動。如果您只輸入陽性數字,最小值將保持在0,但不會是真正的最小值。要解決這種情況,你應該查看列表或將這兩個變量初始化爲某些值,這些值唯一標識了不會泄漏到計算中的無效初始值(我建議None)。在第一次迭代中,將minimummaximum設置爲第一個輸入值。

修改後:您正在比較字符串,因爲raw_input返回字符串,而不是數字。您必須使用int將這些字符串轉換爲整數值,例如int(raw_input(...))。此外,你有一個嚴重縮進break其中我固定縮進。

其他想法:既然你不能使用minmax你可能只是使用

tmp=sorted([int(raw_input('Number: ')) for x in xrange(number)]) 
minimum, maximum = tmp[0], tmp[-1] 

,但我想這違揹你的任務:)

3

除了什麼伊格納西奧說,你太早打破你的循環。你想處理你在輸入之前輸入的最後一個數字,所以在最小/最大設置模塊之後移動if count == number: break模塊。

1

注意,您可以通過

maximum=float('-inf') 
minimum=float('inf') 

print minimum, maximum 

這可能是你的功課有用設置了許多爲無窮大或負無窮大;)

,如果你要考慮的情況下伊格納西奧的答案將是最好用戶爲number輸入0(因爲None將是比-inf更適合無數的最大時間)。

編輯:

備註到mVChr的正確結論:

而不是使用while True循環與break爲什麼不寫

while count < number: 

,甚至使用一個for循環:

for count in xrange(number): 
相關問題