2016-08-07 18 views
0

Python Schleifen finden n als 101 statt 100, ich bekomme den Durchschnitt von 5050 als 50 statt 50,50, Was könnte das Problem sein? Wie soll ich es durchmachen? Hier ist meine Funktion.Python gefunden n als 101 statt 100

def sum_and_average(n): 
    total = 0 
    for i in range(1, n+1): 
     total += i 
    average = float(total/n) 
    print "the sum is %d and the average is %f" %(total, average) 

sum_and_average(100) 

Es gibt:

the sum is 5050 and the average is 50.000000 
+0

@ayhan okay Lass mich das versuchen .. danke. –

Antwort

1

float(total)/n tun.

In Python 2, wenn eines der Argumente float ist, wird die Berechnung in float ausgeführt.

Aber funktioniert float(total/n) wird nicht funktionieren, da total/n wurde bereits in ganzen Zahlen berechnet, und float ing das Ergebnis ist bereits zu spät.

+1

Ich schätze deine ausführliche Hilfe, jetzt verstehe ich es besser. –

1

Um den Durchschnitt erhalten Sie dies wünschen:

average = float(total)/n 

Einige Beispiele:

>>> float(101/2) 
50.0 
>>> 101/2 
50 
>>> float(101)/2 
50.5 
+0

Vielen Dank, ich habe mich gefragt, wo das Problem lag. –

+1

FWIW, '1.0 * a/b' ist besser als 'float (a)/b'. Es ist schneller, da es einen Funktionsaufruf vermeidet, und es ist allgemeiner (es behandelt komplexe Zahlen richtig). Aber eigentlich ist es besser, 'from __future__ import division' zu verwenden, es sei denn, Sie verwenden eine sehr alte Version von Python, die diesen Import nicht unterstützt. –

+0

@ PM2Ring Ich habe noch nie viel in Python geschrieben, aber ich werde mich daran erinnern! Danke für deinen Beitrag. –