niveau: Anfänger
warum erhalte ich die Fehlermeldung "Sequenz kann nicht mit Nicht-Int vom Typ 'float' multipliziert werden"?
def nestEgVariable(salary, save, growthRates):
SavingsRecord = []
fund = 0
depositPerYear = salary * save * 0.01
for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
SavingsRecord += [fund,]
return SavingsRecord
print nestEgVariable(10000,10,[3,4,5,0,3])
danke Baba
for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
sollte sein:
for i in growthRates:
fund = fund * (1 + 0.01 * i) + depositPerYear
Sie multiplizieren 0,01 mit dem Listenobjekt growthRates. Das Multiplizieren einer Liste mit einer Ganzzahl ist gültig (es ist ein überladener syntaktischer Zucker, mit dem Sie eine erweiterte Liste mit Kopien ihrer Elementreferenzen erstellen können).
Beispiel:
>>> 2 * [1,2]
[1, 2, 1, 2]
Mit Python können Sie Sequenzen multiplizieren, um ihre Werte zu wiederholen. Hier ist ein visuelles Beispiel:
>>> [1] * 5
[1, 1, 1, 1, 1]
Mit Gleitkommazahlen ist dies jedoch nicht möglich:
>>> [1] * 5.1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'
Sie multiplizieren Ihre "1 + 0,01" mit der GrowthRate-Liste und nicht mit dem Element in der Liste, durch die Sie iterieren. Ich habe i
in rate
umbenannt und benutze das stattdessen. Siehe den aktualisierten Code unten:
def nestEgVariable(salary, save, growthRates):
SavingsRecord = []
fund = 0
depositPerYear = salary * save * 0.01
# V-- rate is a clearer name than i here, since you're iterating through the rates contained in the growthRates list
for rate in growthRates:
# V-- Use the `rate` item in the growthRate list you're iterating through rather than multiplying by the `growthRate` list itself.
fund = fund * (1 + 0.01 * rate) + depositPerYear
SavingsRecord += [fund,]
return SavingsRecord
print nestEgVariable(10000,10,[3,4,5,0,3])
In dieser Zeile:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
growthRates ist eine Sequenz ([3,4,5,0,3]
). Sie können diese Sequenz nicht mit einem Float (0.1) multiplizieren. Es sieht so aus, als ob Sie i
dort ablegen wollten.
Übrigens ist i
kein großartiger Name für diese Variable. Betrachten Sie etwas Beschreibenderes wie growthRate
oder rate
.
In dieser Zeile:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
Ich denke du meinst das:
fund = fund * (1 + 0.01 * i) + depositPerYear
Wenn Sie versuchen, einen Float mit growthRates (einer Liste) zu multiplizieren, wird dieser Fehler angezeigt.
Denn growthRates ist eine Sequenz (Sie iterieren sie sogar!) Und Sie multiplizieren sie mit (1 + 0,01), was offensichtlich ein Float (1,01) ist. Ich denke du meinst for growthRate in growthRates: ... * growthrate
?