kan de reeks niet vermenigvuldigen met non-int van het type ‘float’

niveau: beginner

waarom krijg ik de foutmelding “kan de reeks niet vermenigvuldigen met niet-int van het type ‘float'”?

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])

bedankt
Baba


Antwoord 1, autoriteit 100%

for i in growthRates:  
    fund = fund * (1 + 0.01 * growthRates) + depositPerYear

zou moeten zijn:

for i in growthRates:  
    fund = fund * (1 + 0.01 * i) + depositPerYear

U vermenigvuldigt 0,01 met het lijstobject growthRates. Het vermenigvuldigen van een lijst met een geheel getal is geldig (het is overbelaste syntactische suiker waarmee je een uitgebreide lijst kunt maken met kopieën van de elementreferenties).

Voorbeeld:

>>> 2 * [1,2]
[1, 2, 1, 2]

Antwoord 2, autoriteit 68%

Met Python kun je reeksen vermenigvuldigen om hun waarden te herhalen. Hier is een visueel voorbeeld:

>>> [1] * 5
[1, 1, 1, 1, 1]

Maar u kunt het niet doen met getallen met drijvende komma:

>>> [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'

Antwoord 3, autoriteit 12%

U vermenigvuldigt uw “1 + 0,01” maal de groeipercentagelijst, niet het item in de lijst waar u doorheen gaat. Ik heb i hernoemd naar rate en gebruik dat in plaats daarvan. Zie de bijgewerkte code hieronder:

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])

Antwoord 4, autoriteit 8%

In deze regel:

fund = fund * (1 + 0.01 * growthRates) + depositPerYear

growthRates is een reeks ([3,4,5,0,3]). Je kunt die reeks niet vermenigvuldigen met een float (0,1). Het lijkt erop dat wat je daar wilde plaatsen was i.

Overigens is i geen geweldige naam voor die variabele. Overweeg iets meer beschrijvends, zoals growthRate of rate.


Antwoord 5, autoriteit 4%

In deze regel:

fund = fund * (1 + 0.01 * growthRates) + depositPerYear

Ik denk dat je dit bedoelt:

fund = fund * (1 + 0.01 * i) + depositPerYear

Als je een float probeert te vermenigvuldigen met growthRates (wat een lijst is), krijg je die foutmelding.


Antwoord 6

Omdat growthRates een reeks is (je herhaalt het zelfs!) en je vermenigvuldigt het met (1 + 0.01), wat duidelijk een float is (1.01). Ik neem aan dat je for growthRate in growthRates: ... * growthrate?

LEAVE A REPLY

Please enter your comment!
Please enter your name here

3 × five =

Other episodes