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

时间:2015-01-21 22:49:59

标签: python local-variables

我必须创建一个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? 编辑:找到一个解决方案,谢谢所有提出一些建议的人

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

或者,由于pickle对复杂数据结构更有帮助,请在SO上查看此问题:Python, writing an integer to a '.txt' file

使用Alex链接中给出的示例:

number = 1337

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

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

答案 2 :(得分:-1)

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

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",即使该变量是在与调用print的函数分开的函数中定义的。我们基本上将my_var变量传递给bar()函数,该函数将其设置为供我们使用。所以你可以这样做:

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

首先使用它,如果您有任何问题,请告诉我。