TypeError: объект 'float' не поддерживает назначение элемента - PullRequest
0 голосов
/ 21 марта 2019

Я понимаю сообщение об ошибке, но я заблудился, когда понял, как с этим справиться. Я пытаюсь сделать так, чтобы в цикле for / переменная с именем pancake использовала в качестве входного значения предыдущую итерацию pancake[i - 1] в качестве первого параметра вызова функции exit.

Ошибка, с которой я столкнулся:

TypeError: 'float' object does not support item assignment

Мой код:

   def exit(number):
        def son():
            geometric = (math.exp(2))
            pancake = number * geometric
            return pancake

        return son()

    pancake_ac = exit()()
    pancake_ac[0] = pancake_ac

    for i in range(1, 10):
        pancake_ac[i] = exit(pancake_ac[i - 1])

1 Ответ

1 голос
/ 21 марта 2019

precio_accion - это не list или dict, это число с плавающей запятой, поэтому вам не нужна строка precio_accion[0] = precio_accion. Если вы хотите list:

import math
import random


def funcion_gbm(pi = 100, media = 0.10, volatilidad = 0.05):
    m = media
    v = volatilidad

    def funcion_anidada():
        exponencial = math.exp((m - (1/2) * v**2) * (1/365) +
                               v * math.sqrt(1/365) * random.normalvariate(0, 1))
        precio = pi * exponencial
        return precio

    return funcion_anidada


precio_accion = funcion_gbm()()

# Now precio_accion is a list and your iteration will work
precio_accion = [precio_accion]

Редактировать

Теперь давайте перейдем к вашей петле. Во-первых, ваш target_price не меняется, так зачем продолжать его переопределять? Вы можете определить его один раз за пределами вашего цикла:

target_price = 125

for rueda in range(1,1000):
    # Now you need to append to the list rather than trying to
    # access other elements that aren't in the list yet
    precio_accion.append(funcion_gbm(precio_accion[rueda - 1]))

    # You're comparing the last item in the list every time, so
    # you can just access it with -1
    if precio_accion[-1] == target_price:
        print("reached")

    # No need for else since it's just continuing the loop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...