如何在每次代码循环时更改局部变量(python)的值?

How to change the value of a local variable (python) each time the code loops?

我必须创建一个 ATM 样式的程序,其中的代码如下所示:

import sys
def ATM():
    bank = 0
    coins = int (input ("Enter coins: "))
    bank = coins+bank
    o = input("would you like to take out 20p? Y or N")
    if o == "Y":
        bank = bank - 20
    else:
        print ("your balance is {0}".format(bank))
    op = input ("would you like to enter more coins? Y or N")
    if op == "Y":
        ATM()
    else:
        print ("goodbye")
        sys.exit()
    ATM()

有没有办法让局部变量库在程序结束时保持它的值?我必须切换 bank = 0 的目的是什么? 编辑:找到了解决方案,感谢所有提供一些建议的人

您可以 pickle 数据,请阅读此处:https://docs.python.org/2/library/pickle.html

或者,由于 pickle 对于复杂的数据结构确实更有帮助,请参阅 SO 上的这个问题:Python, writing an integer to a '.txt' file

使用 Alex 在 link 中给出的示例:

number = 1337

f = open('filename.txt', 'w')
f.write('%d' % number)
f.close()

这意味着您将在每次程序启动时检索该值并在退出时保存它。

您可以使用 pickle 或者您可以将数据保存到 .txt 文件中;

#codes
....
with open("my_database.txt","a+") as f:
    f.write(str(bank))

因此您可以将 bank 数据保存在一个文件中。如您所见,我们以 a+ 模式打开文件,这不会覆盖您的文件。

您有两个主要选择,为您的程序创建一个主循环而不是调用相同的函数,或者您可以传递参数。看来你是编程新手,所以我会为你解释一下:

While 循环基本上是不断重复的代码块,直到某个条件完成。它们看起来像这样:

exit = False
while exit != True:
  print "Hello!"
  exit = True

这个循环实际上只会 运行 一次,因为我们在第一次迭代中将 exit 设置为 True。然而,如果我们把那条线去掉,它将永远 运行 直到程序爆炸或我们手动关闭它。

所以一个解决方案可能是这样的:

def ATM():
  exit = False
  while exit != True:
    normal logic you are doing
    if op = 'N':
      exit = True
  sys.exit()

另一种解决方案是将参数传递给 ATM()。传递参数基本上是一种在 运行 之前为函数设置变量的方法,它使您能够在外部函数中设置内容。例如:

def foo():
    my_var = "test"
    bar("test")
def bar(another_var)
  print another_var

这将打印 "test",即使该变量是在与调用打印的函数分开的函数中定义的。我们实质上是将 my_var 变量传递给 bar() 函数,该函数将其设置为供我们使用。所以你可以这样做:

my_var = 123
def ATM(some_var):
  do stuff
  if exit == False:
    ATM(some_var)
  else:
    sys.exit()

先玩玩,之后如果有任何问题请告诉我。