ne peut pas multiplier la séquence par non-int de type 'float'
niveau: débutant
pourquoi j'obtiens l'erreur "ne peut pas multiplier la séquence par non-int de 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])
merci Baba
6 réponses
for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
devrait être:
for i in growthRates:
fund = fund * (1 + 0.01 * i) + depositPerYear
vous multipliez 0,01 avec l'objet de la liste growthRates. La multiplication d'une liste par un entier est valide (c'est du sucre syntaxique surchargé qui vous permet de créer une liste étendue avec des copies de ses références d'éléments).
Exemple:
>>> 2 * [1,2]
[1, 2, 1, 2]
Python permet de multiplier les séquences de répéter leurs valeurs. Voici un exemple visuel:
>>> [1] * 5
[1, 1, 1, 1, 1]
Mais il ne vous permet pas de le faire avec des nombres à virgule flottante:
>>> [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'
vous multipliez votre" 1 + 0.01 " fois la liste growthRate, pas l'élément de la liste que vous itérez. J'ai renommé i
rate
et en utilisant ça à la place. Consultez la mise à jour de code ci-dessous:
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])
Dans cette ligne:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
growthRates est une séquence ([3,4,5,0,3]
). Vous ne pouvez pas multiplier cette séquence par un flotteur (0.1). Il semble que ce que vous vouliez mettre là était i
.
d'ailleurs, i
n'est pas un bon nom pour cette variable. Envisager quelque chose de plus descriptif, comme growthRate
ou rate
.
Dans cette ligne:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
je pense que tu veux dire ceci:
fund = fund * (1 + 0.01 * i) + depositPerYear
quand vous essayez de multiplier un flottant par des growthRates (qui est une liste), vous obtenez cette erreur.