Подтвердить что ты не робот

Не может умножить последовательность на non-int типа 'float'

Уровень: новичок

почему я получаю ошибку "не может умножить последовательность на non-int типа '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])

спасибо Баба

4b9b3361

Ответ 1

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

должен быть:

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

Вы умножаете 0.01 на объект списка growthRates. Умножение списка на целое допустимо (это перегруженный синтаксический сахар, который позволяет вам создать расширенный список с копиями его ссылок на элементы).

Пример:

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

Ответ 2

Python позволяет вам умножать последовательности, чтобы повторять их значения. Вот наглядный пример:

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

Но это не позволяет делать это с номерами с плавающей запятой:

>>> [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

Вы умножаете свой "1 + 0,01" раз на список growthRate, а не на элемент в списке, который вы выполняете. Я переименовал i в rate и использовал это вместо этого. См. Обновленный код ниже:

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

Ответ 4

В этой строке:

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

growthRates - это последовательность ([3,4,5,0,3]). Вы не можете умножить эту последовательность на float (0.1). Похоже, что вы хотели поставить там i.

Кстати, i не является отличным именем для этой переменной. Рассмотрим что-то более описательное, например growthRate или rate.

Ответ 5

В этой строке:

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

Я думаю, вы имеете в виду это:

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

Когда вы пытаетесь умножить float на growthRates (это список), вы получите эту ошибку.

Ответ 6

Поскольку growthRates - это последовательность (вы даже повторяете ее!), и вы умножаете ее на (1 + 0,01), что, очевидно, является float (1.01). Наверное, вы имеете в виду for growthRate in growthRates: ... * growthrate?

Ответ 7

Я встретил ту же проблему и решил ее сейчас. Вполне возможно, что значение включает в себя что-то вроде "1,234.56", если это так, удалите ',' используя str.replace(',', '')