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
?