-4

漠然とした質問で申し訳ありません。書き直しましたので参考になれば幸いです。a と b の 2 つの属性 (辞書) を編集しようとしています。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_priceで戻りchange_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 に答える