0

記憶された値を上書きせずに値を増やすことができる変数のタイプはありますか?例:

def main():
var = 0

  inc = input("Want to increase your variable?")
    if inc == "yes":
      var = var + 1
      main()
      #restart the script from the top
    if inc == "no":
      exit()

コードが再起動すると、varは「var = var + 1」ビットを覚えていなくても、その値「0」に戻ります。スクリプトで行われた変更に一致するように自分自身を更新する変数タイプはありますか?

4

3 に答える 3

1

の値がvar反復間で保持されないことを意味する場合、これはでの再帰の使用と関係がありますmain()。これは完全に不要であり、反復に置き換える方が適切です。

var = 0

while True:
   inc = input("Want to increase your variable?")
   if inc == "yes":
      var = var + 1
   else:
      break
   print(var)

varスクリプト全体の呼び出し全体での値を保持したい場合は、次を使用できますpickle

import os, pickle

PERSIST_FILE = "persist.dat"
if os.path.exists(PERSIST_FILE):
   var = pickle.load(open(PERSIST_FILE, "rb"))
else:
   var = 0

while True:
   print(var)
   inc = input("Want to increase your variable?")
   if inc == "yes":
      var = var + 1
   else:
      break

pickle.dump(var, open(PERSIST_FILE, "wb"))
于 2013-01-21T21:57:26.893 に答える
0

いいえ - 変数の値は、特定の使用法の後置インクリメントを除いて、期待どおりに変更すると変更されます。その場合でも、その変数はその行での評価のために「古い」状態のみを保持します。

「temp」変数を使用する必要があるようです。表示されたコードは実際には何も教えてくれませんが、tbh.

アップデート:

あなたの質問を編集すると...関数呼び出し間の状態を記憶する、関数間のグローバル変数が必要だと思います。

これは、これらのグローバル変数を作成および使用する方法の良いソースです。

http://www.python-course.eu/global_vs_local_variables.php

ダブルアップデート:

プログラムを閉じても、変数にその状態を記憶させたいという意味かもしれません! その場合pickle、別の回答の詳細として使用します。

于 2013-01-21T21:54:57.197 に答える
0

関数 main() を実行すると、var が 0 にリセットされます。関数内にあることに注意してください。したがって、関数内にあるものはすべて実行されます。

ここで var は毎回 0 に変更されません:

var = 0
def main(number):
    print number
    inc = raw_input("Want to increase your variable?") # Or input() if python 3.x
    if inc == "yes":
        number += 1
        return main(number)
    if inc == "no":
        return number

var = main(var)
print var

この場合の var はグローバル変数です。コード全体からアクセスできます。

上記のコードを実行すると、次のようになります。

python file.py
0
Want to increase your variable?yes
1
Want to increase your variable?yes
2
Want to increase your variable?no
2 #result of printing var at the end

これがあなたの問題に答えたことを願っています。他に質問があれば、答えてみます ;)。私はPythonの初心者です。

于 2013-01-21T23:10:10.693 に答える