Sie versuchen, in Ganzzahl Schleife über; len()
gibt eins zurück.
Wenn Sie eine Schleife über eine Folge von ganzen Zahlen produzieren müssen, verwenden Sie eine range()
object:
for i in range(len(str_list)):
# ...
Durch im len(str_list)
Ergebnis range()
vorbei, erhalten Sie eine Sequenz von Null auf die Länge von str_list
, minus eins (da der Endwert nicht enthalten ist).
Beachten Sie, dass Sie jetzt Ihr i
Wert wird der falsche Wert zu verwenden, um einen Mittelwert zu berechnen, weil es eine kleinen als die tatsächliche Listenlänge ist! Sie wollen teilen, indem er len(str_list)
:
return str_sum/len(str_list)
Allerdings gibt besteht keine Notwendigkeit dies in Python zu tun. Sie durchlaufen die Elemente der Liste selbst. Das beseitigt die Notwendigkeit, einen Index zu erstellen, zuerst:
for elem in str_list
str_sum += len(elem)
return str_sum/len(str_list)
All dies kann mit den sum()
function in einer Zeile ausgedrückt werden, übrigens:
def str_avg(s):
str_list = s.split()
return sum(len(w) for w in str_list)/len(str_list)
I ersetzt den Namen str
mit s
; besser nicht den Namen des eingebauten Typs maskieren, was später zu verwirrenden Fehlern führen könnte.
"len (str_list)" eine Integer geben, können Sie nur durch die "Iterale" durchlaufen. Vielleicht willst du 'range (len (str_list))'. –
Warum nicht einfach 'für elem in str_list:' und 'str_sum + = len (elem)' benutzen? Python 'for' Schleifen sind * für jedes * Konstrukt, so dass Sie direkt über die beleuchteten Elemente schleifen können. –