wake-up-neo.com

Sequenz kann nicht mit Nicht-Int vom Typ 'float' multipliziert werden

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

31
user425727
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]
19
Jeremy Brown

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'
13
jathanism

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])
3
Sam Dolan

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.

2
nmichaels

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.

1

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?

0
user395760