web-dev-qa-db-fra.com

impossible de multiplier la séquence par un non-int de type 'float'

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

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

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

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

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.

2
nmichaels

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.

1
Daniel Stutzbach

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?

0
user395760