2012-03-26 34 views
1

このコードを実行しようとすると、不正な最大値と最小値が返されます。私はそれを修正する方法を教えてもらえますか?私は '最大'と '最小'を使用することはできません。Pythonコードの最大値と最小値が正しくない

更新:コードを更新しましたが、それでも正しく動作しません。 更新2:コードは今動作します!大変ありがとうございました! minimummaximumため

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

+0

私はこれが宿題であると仮定しています。「私は 'max'と 'min'を使用することはできません。将来、宿題の質問に「宿題」タグを追加してください。 – agf

+0

はい、申し訳ありません。 – user1292009

答えて

4

あなたの初期値と条件が間違っています。

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

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

countNoneに1の代わりに、アイデンティティと等しい場合にも、チェックすることにより、この問題を解決することができます。

+0

これを変更しましたが、最大値と最小値は依然として正しくありません。 – user1292009

+0

@ user1292009、あなたは[mVChr](http://stackoverflow.com/a/9865781/577088)の答えをお読みになりましたか? – senderle

+0

はい、私はそれを変更しました。最大値は現在問題なく動作していますが、最小値は 'None'です。 – user1292009

0

特別な値の処理を最低限必要とするソリューションは、両方の変数を+/-無限大に初期化することです。

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

Pythonには、妥当な最高(または最低)の整数がありません。 –

+0

100%編集した後、私の答えを思い出させるようになりました:) –

+0

ああ、 '-inf'に' minimum'を 'inf'と' maximum'に設定しなければなりません。あなたの答えは常に '-inf'、' inf'を回答として与えます –

1

これはあなたが学ぶはずの宿題です。ここでは、問題を解決するためにどのようにいくつかのアイデアがあります:

一つのエラーは、プログラムの起動時に0maximumminimumを初期化していることです。もしあなたが正の数で入力した場合、最小値は0にとどまりますが、実際の最小値にはなりません。このケースを解決するには、リストを調べるか、両方の変数を、計算に漏れない無効な初期値を一意に識別する値に初期化する必要があります(私はNoneを提案します)。最初の反復では、minimummaximumの両方を最初に入力した値に設定します。

raw_inputは数字ではなく文字列を返すので、文字列を比較しています。 intを使用してこれらの文字列を整数値に変換する必要があります(例:int(raw_input(...)))。さらに、インデントを修正したひどくインデントされたbreakがありました。

その他のアイデア:あなたはminを使用することを許可されmaxていないので、あなただけの

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

を使用する場合がありますが、私は推測する、これはあなたの割り当て:)イグナシオが言ったことに加えて

3

を破りますループを早く抜け出しすぎています。中断する前に入力した最後の数値を処理したいので、最小/最大設定ブロックの後にif count == number: breakブロックを移動します。あなたはこれがあなたの宿題のために役に立つかもしれません

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

print minimum, maximum 

によって無限大または負の無限大に番号を設定することができ

1

注;あなたがそのような場合を考慮したい場合)

イグナシオの答えが好ましいだろうユーザはnumberの場合0と入力します(None-infより数字のない季節の最大値になります)。

編集:

mVChrの正しい発見に備考:

for count in xrange(number): 

代わりbreakwhile Trueループを使用しての

while count < number: 

を書いたり、使用しない理由は、forループ

関連する問題