如何在每次代码循环时更改局部变量(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()
先玩玩,之后如果有任何问题请告诉我。
我必须创建一个 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()
先玩玩,之后如果有任何问题请告诉我。