1

そのため、このシステムを機能させるのに問題があり、正しい質問をしているかどうか確信が持てませんが、何が起こっているのか、何が起こりたいのかをここに示します.

money = 1
def Stats():
     print
     print "money " + str(money)

def gainM():
     money + 2
     Stats()

if money == 1:
     gainM()

では、お金を印刷するとどうなるでしょうか。値に 2 を加えても、値は 1 のままです。(コードは私の実際のプログラムのコピーではなく、何が起こっているかを示す例です。)

4

2 に答える 2

6

money + 2ノーオペレーションです。実際にmoney新しい値を割り当てる必要があります

money = money + 2
# or
money += 2

しかし、その後、エラーが発生することがわかります-関数スコープ外の変数に代入することはできません. global次のキーワードを使用できます。

global money
money += 2

これにより、関数内での値を変更できますmoney

ただし、推奨される方法はmoneyパラメーターとして渡すことです。

def gainM(money):
    money += 2
    Stats()
    return money

if money == 1:
    money = gainM(money)

2 番目のオプションを使用している場合 (これを使用する必要があります)、Stats関数も変更してmoneyパラメーターを持たせる必要があります。

def Stats(money):
     print
     print "money " + str(money)

それ以外の場合、関数は の1代わりに出力され3ます。

別の推奨事項 - 文字列フォーマットを使用してください。

'money %d' % money  # the old way
'money {}'.format(money)  # the new and recommended way

money次に、関数に渡しStatsます。

def gainM(money):
    money += 2
    Stats(money)
    return money
于 2013-02-23T01:24:52.420 に答える
2

新しい価値をお金に割り当てる必要があります。そのようです:

money = money + 2

または省略形:

money += 2

また、変数が関数の外にある場合は、それをグローバルに宣言する必要があります (そのため、代わりにローカル変数を作成しません)。

したがって、次のようになります。

def gainM():
    global money
    money += 2
    Stats()

編集:明確にするために、グローバル変数を使用する必要があると言っているわけではありません。一般に、それらは悪い考えです (状況によっては役立つかもしれませんが)。ただし、それがこの特定の例が機能するために必要なものです。ただし、おそらく必要なのは、そのクラスのメソッドが変更するインスタンス変数を持つクラスです。ただし、言語の基本をまだ把握していないように思われる場合は、一度に 1 歩ずつ進めてください。今のところ、前の文章で理解できなかった単語について心配する必要はありません :)

于 2013-02-23T01:23:37.923 に答える