niveau: débutant
pourquoi est-ce que j'obtiens l'erreur "impossible de multiplier la séquence par un 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
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 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ément).
Exemple:
>>> 2 * [1,2]
[1, 2, 1, 2]
Python vous permet de multiplier les séquences pour répéter leurs valeurs. Voici un exemple visuel:
>>> [1] * 5
[1, 1, 1, 1, 1]
Mais cela 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 parcourez. J'ai renommé i
en rate
et je l'ai utilisé à la place. Voir le code mis à jour 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 flottant (0,1). Il semble que ce que vous vouliez y mettre soit i
.
Par ailleurs, i
n'est pas un grand nom pour cette variable. Considérez quelque chose de plus descriptif, comme growthRate
ou rate
.
Dans cette ligne:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
Je pense que vous voulez dire ceci:
fund = fund * (1 + 0.01 * i) + depositPerYear
Lorsque vous essayez de multiplier un flottant par GrowthRates (qui est une liste), vous obtenez cette erreur.
Parce que GrowthRates est une séquence (vous l'itérez même!) Et vous la multipliez par (1 + 0,01), qui est évidemment un flottant (1,01). Je suppose que tu veux dire for growthRate in growthRates: ... * growthrate
?