nivel: principiante

¿por qué recibo el error «no se puede multiplicar la secuencia de la 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

InformationsquelleAutor | 2010-08-31

6 Comentarios

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

    debe ser:

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

    Que se están multiplicando 0.01 con el growthRates objeto de la lista. La multiplicación de una lista por un número entero es válido (es sobrecargado azúcar sintáctico que permite crear una extendida una lista con las copias de sus referencias de elemento).

    Ejemplo:

    >>> 2 * [1,2]
    [1, 2, 1, 2]
  2. 13

    Python permite multiplicar las secuencias de repetir sus valores. Aquí está un ejemplo visual:

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

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

    >>> [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'
  3. 3

    Estás multipling su «1 + 0.01» los tiempos de la growthRate lista, no el elemento en la lista está la iteración. He cambiado el nombre de i a rate y utilizando en su lugar. Ver la versión actualizada del código de abajo:

    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])
    • ASÍ que es realmente sorprendente… Con sólo 11 puntos de vista, hay 5 respuestas correctas dentro de un minuto.
  4. 2

    En esta línea:

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

    growthRates es una secuencia ([3,4,5,0,3]). Usted no se puede multiplicar esa secuencia por un flotador (0.1). Esto se parece a lo que quería poner allí fue i.

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

    • Gracias por su pronta respuestas. @Nathon: me alegra que te hizo el comentario sobre el nombre de la variable. Es importante conseguir que la sintaxis de la disciplina desde el principio, cuando el aprendizaje de la programación.
  5. 1

    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 intenta multiplicar un flotador por growthRates (que es una lista), se obtiene que el error.

  6. 0

    Porque growthRates es una secuencia (que incluso la iteración es!) y se multiplica por (1 + 0.01), lo cual es, obviamente, un flotador (1.01). Supongo que te refieres for growthRate in growthRates: ... * growthrate?

Dejar respuesta

Please enter your comment!
Please enter your name here