no se puede multiplicar la secuencia por no-int del tipo ‘float’

nivel: principiante

¿por qué me aparece el error “no se puede multiplicar la secuencia por un no-int del tipo ‘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]) 

gracias Baba

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

debiera ser:

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

Estás multiplicando 0.01 con el objeto de lista growthRates. La multiplicación de una lista por un entero es válida (es un azúcar sintáctico sobrecargado que le permite crear una lista ampliada con copias de sus referencias de elementos).

Ejemplo:

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

Python te permite multiplicar secuencias para repetir sus valores. Aquí hay un ejemplo visual:

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

Pero no te permite hacerlo con números de punto flotante:

 >>> [1] * 5.1 Traceback (most recent call last): File "", line 1, in  TypeError: can't multiply sequence by non-int of type 'float' 

Estás multiplicando tu “1 + 0.01” por la lista de tasa de crecimiento, no por el elemento en la lista que estás iterando. He cambiado el nombre de i para rate y usar eso en su lugar. Vea el código actualizado a continuación:

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

En esta línea:

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

growthRates es una secuencia ( [3,4,5,0,3] ). No puedes multiplicar esa secuencia por un flotador (0.1). Parece que lo que querías poner allí era i .

Por cierto, i no es un gran nombre para esa variable. Considere algo más descriptivo, como la rate growthRate o la rate .

En esta línea:

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

Creo que te refieres a esto:

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

Cuando intentas multiplicar un float por growthRates (que es una lista), obtienes ese error.

Porque growthRates es una secuencia (¡incluso lo estás iterando!) Y lo multiplicas por (1 + 0.01), que obviamente es un flotador (1.01). Supongo que te refieres for growthRate in growthRates: ... * growthrate ¿la for growthRate in growthRates: ... * growthrate ?

Obtuve este error al leer una columna con%. Por ejemplo, tuve una columna que tiene porcentajes, como 60%, etc. y cuando se leyó el archivo .csv con el valor anterior, obtuve el error exacto “no se puede multiplicar la secuencia por un no-int del tipo ‘float'”.

Quité el símbolo% de esa columna y reprocesé el mismo código (ya que esa columna ahora solo tiene el número 60), el error desapareció, sin ningún cambio en el código.