-4

很抱歉这个模糊的问题。我正在重写它,所以我希望这会有所帮助。我正在尝试编辑两个属性(它们是字典):a 和 b。b 与 a (.8) 直接相关。

class Fun:
    def __init__(self, name):
        self.name = name
        self.a = {1: ["a", 10]}
        self.b = {2: ["b", 8]}
    def change(self):
        for i in self.a:
            self.a[i][1] = math.floor(random.gauss(self.a[i][1]), 5)
        self.b = copy.deepcopy(self.a)
        for i in self.b:
            self.b[i][1] = math.floor(self.a[i][1] * 0.8)

当我运行一个改变 a 和 b 的循环时,它工作一次然后崩溃

"str" object has no attribute "a" 

如果是调用它的函数(可能是),请告诉我。这是否应该根据当前值在每次迭代中更改 a 和 b ?

我希望这更清楚我的要求。

4

1 回答 1

2

您正在创建局部变量sell_price,这不会影响函数之外的 sell_price cahnge_price

返回sell_pricechange_price。将返回值明确分配change_price给外部。sell_price

def change_prices():
    for i in price:
        price[i][1] = math.floor(random.gauss(price[i][1], 5))
    sell_price = copy.deepcopy(price)
    for i in sell_price:
        sell_price[i][1] = math.floor(price[i][1] * .8)
    return sell_price

price = {1: ["Spices", 43], 2: ["Something else",50]}
sell_price = change_prices()

或将 sell_price 声明为全局变量

def change_prices():
    global sell_price
    for i in price:
        price[i][1] = math.floor(random.gauss(price[i][1], 5))
    sell_price = copy.deepcopy(price)
    for i in sell_price:
        sell_price[i][1] = math.floor(price[i][1] * .8)

price = {1: ["Spices", 43], 2: ["Something else",50]}
sell_price = change_prices()
于 2013-07-21T03:44:58.153 回答