2012-03-26 8 views
1

Wenn ich versuche, diesen Code auszuführen, erhalte ich falsche Maxima und Minima. Kann mir jemand sagen, wie ich das beheben kann? Ich darf nicht 'max' und 'min' verwenden.Falsches Max und Min in Python-Code

UPDATE: Ich habe den Code aktualisiert und es funktioniert immer noch nicht richtig. UPDATE 2: Der Code funktioniert jetzt! Vielen Dank Jungs!

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

Ist das Hausaufgaben? – hochl

+0

Ich gehe davon aus, dass es sich um Hausaufgaben handelt, wie du gesagt hast: "Ich darf 'max' und 'min' nicht verwenden." Fügen Sie in Zukunft den Hausaufgaben-Tag zu Hausaufgabenfragen hinzu. – agf

+0

Ja, es tut mir leid. – user1292009

Antwort

4

Ihre Anfangswerte und Bedingungen für minimum und maximum sind falsch.

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

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

Sie können dieses Problem beheben, indem geprüft wird, ob count gleich 1 statt Identität None.

+0

Ich habe das geändert, und die maximalen und minimalen Werte sind immer noch falsch. – user1292009

+0

@ user1292009, hast du die Antwort von [mVChr] (http://Stackoverflow.com/a/9865781/577088) gelesen? – senderle

+0

Ja, das habe ich gerade geändert. Der Maximalwert funktioniert jetzt einwandfrei, aber egal, der Mindestwert ist 'Keine'. – user1292009

0

Die Lösung, die die geringste Behandlung spezieller Werte erfordert, wäre, beide Variablen auf +/- unendlich zu initialisieren.

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

Python hat keine vernünftige höchste (oder niedrigste) Ganzzahl. –

+0

nach der 100% Bearbeitung es erinnert mich jetzt an meine Antwort :) –

+0

oh, und Sie müssen 'Minimum' zu' inf' und 'Maximum' zu' -inf'; Ihre Antwort gibt immer "-inf", "inf" als Antworten –

1

Da dies Hausaufgaben sind, sollten Sie lernen. Hier sind einige Ideen, wie Sie das Problem lösen können:

Ein Fehler ist, dass Sie und minimum zu beim Programmstart initialisieren. Wenn Sie nur positive Zahlen eingeben, bleibt das Minimum bei 0, ist aber nicht das wirkliche Minimum. Um diesen Fall zu lösen, sollten Sie in Listen suchen oder beide Variablen auf einige Werte initialisieren, die einen ungültigen Anfangswert eindeutig identifizieren, der nicht in Ihre Berechnung eindringt (ich empfehle None). In der ersten Iteration setzen Sie sowohl minimum als auch maximum auf den ersten eingegebenen Wert.

Nach Änderungen: Sie sind Strings Vergleich seit raw_input gibt Strings, keine Zahlen. Sie müssen diese Zeichenfolgen unter Verwendung von int in ganze Zahlen konvertieren, zum Beispiel int(raw_input(...)). Außerdem hattest du eine stark eingezogene break, von der ich den Einzug behoben habe.

Andere Idee: Da Sie nicht erlaubt sind min zu verwenden und max Sie nur

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

verwenden könnte, aber ich denke, das ist Ihre Aufgabe besiegt :)

3

Zusätzlich zu dem, was sagte Ignacio , du brichst zu früh aus deiner Schleife aus. Sie möchten die letzte Zahl bearbeiten, die Sie eingeben, bevor Sie brechen, also verschieben Sie den Block if count == number: break nach den Min/Max-Einstellungsblöcken.

1

Beachten Sie, dass Sie eine Reihe an positive oder negative Unendlichkeit von

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

print minimum, maximum 

Diese für Ihre Hausaufgaben könnte nützlich sein, festlegen;)

Ignacio Antwort wäre besser, wenn Sie den Fall betrachten möchten, dass der Benutzer gibt 0 für number ein (da None ein saisonaleres Maximum für keine Nummern als -inf wäre).

Edit:

Bemerkung, um eine korrekte Feststellung des mVChr: ​​

Statt eine while True Schleife mit einem break verwenden, warum nicht

while count < number: 

schreiben oder sogar eine for-Schleife verwenden:

for count in xrange(number):