2013-07-21 34 views
-4

对于模糊的问题抱歉。我正在重写它,所以我希望这有助于。 我想编辑两个属性(这是词典):a和b。 b与(.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每次迭代基于它们的当前值吗?

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

+1

哪一部分是应该改变什么,你可以访问? –

+0

和你的问题是什么? –

+0

@Faller,你为什么急剧改变这个问题。这使我的回答过时了。 :( – falsetru

回答

2

您正在创建本地变量sell_price,它不影响cahnge_price函数以外的sell_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() 

或宣布出售价格为全局变量

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