从其他文件导入变量后值被还原的技术问题求助
Python模块导入后变量值回退问题
我用Python写了一套程序,通过父程序menu.py使用exec调用子文件。其中input_data.py从accuracy.py导入变量,修改后再写回accuracy.py。但遇到以下问题:运行父程序进入input_data.py修改变量,返回父程序后再次进入,变量会变回修改前的值。我排查发现变量还原发生在导入环节——导入前打印accuracy.py内容是修改后的正确值,但导入后变量就变回旧值。尝试添加f.flush()无效,另有类似程序可正常运行。
父程序(menu.py)代码
while True: print() print("----------------------------------------------------------") print("菜单:") print() print("输入1进行自我测试") print() print("输入2修改或查看配对项") print() print("输入3录入解题数据") print() print("输入.退出") while True: choice = input() if choice in ["1", "2", "3", "."]: break else: print("请输入1、2、3或.") if choice == "1": print() print("----------------------------------------------------------") print("测试:") print() exec(open("quiz.py").read()) elif choice == "2": print() print("----------------------------------------------------------") print("配对项:") print() exec(open("pairs.py").read()) elif choice == "3": print() print("----------------------------------------------------------") print("录入数据:") print() exec(open("input_data.py").read()) elif choice == ".": break
问题文件(input_data.py)代码
print(open("accuracy.py").read()) from accuracy import attempts, DNF, solves, current_streak, longest_streak print(open("accuracy.py").read()) print("按.返回菜单") while True: print() print("尝试次数: ", attempts) print("未完成次数(DNF): ", DNF) print("完成次数: ", solves) print("正确率: {}".format( 100 * solves / attempts)) print("当前连续完成次数: ", current_streak) print("最长连续完成次数: ", longest_streak) print() print("你完成解题了吗?") foo = input("是或否: ").upper() if foo == "YES": print(":(") DNF += 1 attempts += 1 current_streak = 0 elif foo == "NO": print(":)") solves += 1 attempts += 1 current_streak += 1 if current_streak > longest_streak: longest_streak = current_streak elif foo == ".": break # 奇怪的是,不结束menu.py的话,写入操作好像没生效 # 比如,启动menu后进入input_data修改数据,返回menu再重新进入input_data, # 数据会变回最开始的初始值。 with open("accuracy.py", "w") as f: f.write("attempts = {}\nDNF = {}\nsolves = {}\ncurrent_streak = {}\nlongest_streak = {}".format(attempts, DNF, solves, current_streak, longest_streak)) f.flush()
变量存储文件(accuracy.py)代码
attempts = 251 DNF = 104 solves = 147 current_streak = 0 longest_streak = 9
内容的提问来源于stack exchange,提问作者Hhadley
相关产品推荐
相关产品推荐

