编辑列表中的变量(不能使用字典)
Edit a variable from list (Cannot use dictionary)
a = 10
b = 20
ls = [a, b]
如何将变量 a 更改为例如20 使用 ls[0]
作为参数?
我记得有一些方法可以编写代码,您可以在其中输入字符串和变量,它会变成一行代码 运行 它。
我依稀记得是这样的,大概是这样的:
run(ls[0], "= 20")
显示整个代码,而不是压缩版本,我想做的是从文本文件加载和保存变量。 (代码是关于制作毒品的终端游戏。)
money = 11000
growtime = 45
growreward = 50
gramsweed = 0
growing = False
pots = 1
seeds = 0
cooktime = 90
cookreward = 20
gramsmeth = 0
cooking = False
tanks = 0
methlitres = 0
weedselling = 0
methselling = 0
currentlyselling = False
dealers = 1
dealtime = 120
dealamount = 15
stats = [money, growtime, growreward, gramsweed, growing, pots, seeds, cooktime,
cookreward, gramsmeth, cooking, tanks, methlitres, weedselling, methselling,
currentlyselling, dealers, dealtime, dealamount]
boolstats = [growing, cooking, currentlyselling]
def save():
f = open("save.txt", "w")
for stat in stats:
f.write(str(stat) + "\n")
f.close()
mainmenu()
def load():
i = 0
f = open("save.txt", "r")
for stat in stats:
print(stat)
stats[i] = f.readline(i)
i += 1
j = 0
for stat in boolstats:
if stat == "False": boolstats[j] = False
else: boolstats[j] = True
j += 1
f.close()
mainmenu()
它不会像您希望的那样工作,因为原始类型是按值传递的。你可以试试:
globals()['a'] = 20 # works for global variables only, not local
或将您的值存储在 class 变量中,然后它的列表将保留对它的引用。
这是一个示例,说明如何将游戏数据存储在字典中并使用 json
模块轻松地 save/load 它。我将首先将您所有的变量声明放入一个字典中(请注意,我通常会使用 {}
语法而不是 dict()
构造函数,但我正在复制并粘贴您现有的代码,这使它稍微容易一些):
stats = dict(
money = 11000,
growtime = 45,
growreward = 50,
gramsweed = 0,
growing = False,
pots = 1,
seeds = 0,
cooktime = 90,
cookreward = 20,
gramsmeth = 0,
cooking = False,
tanks = 0,
methlitres = 0,
weedselling = 0,
methselling = 0,
currentlyselling = False,
dealers = 1,
dealtime = 120,
dealamount = 15,
)
现在我可以用几行代码编写您的 save
和 load
函数:
import json
def save():
with open("save.txt", "w") as f:
json.dump(stats, f)
def load():
with open("save.txt") as f:
stats.update(json.load(f))
json
模块负责读取行,解析它们,将它们转换为正确的类型,全部,因为它可以拉取所有它需要的信息直接来自字典对象。如果您有十几个不同的单独变量,您将无法获得同样类型的便利性和灵活性。
为了建议您将游戏代码的其他部分转换为使用 dict 而不是单个变量的方法,我需要查看该代码,但希望这个示例有助于让您相信生活可以 如果您不需要一次处理一个变量,那么会容易得多!
a = 10
b = 20
ls = [a, b]
如何将变量 a 更改为例如20 使用 ls[0]
作为参数?
我记得有一些方法可以编写代码,您可以在其中输入字符串和变量,它会变成一行代码 运行 它。
我依稀记得是这样的,大概是这样的:
run(ls[0], "= 20")
显示整个代码,而不是压缩版本,我想做的是从文本文件加载和保存变量。 (代码是关于制作毒品的终端游戏。)
money = 11000
growtime = 45
growreward = 50
gramsweed = 0
growing = False
pots = 1
seeds = 0
cooktime = 90
cookreward = 20
gramsmeth = 0
cooking = False
tanks = 0
methlitres = 0
weedselling = 0
methselling = 0
currentlyselling = False
dealers = 1
dealtime = 120
dealamount = 15
stats = [money, growtime, growreward, gramsweed, growing, pots, seeds, cooktime,
cookreward, gramsmeth, cooking, tanks, methlitres, weedselling, methselling,
currentlyselling, dealers, dealtime, dealamount]
boolstats = [growing, cooking, currentlyselling]
def save():
f = open("save.txt", "w")
for stat in stats:
f.write(str(stat) + "\n")
f.close()
mainmenu()
def load():
i = 0
f = open("save.txt", "r")
for stat in stats:
print(stat)
stats[i] = f.readline(i)
i += 1
j = 0
for stat in boolstats:
if stat == "False": boolstats[j] = False
else: boolstats[j] = True
j += 1
f.close()
mainmenu()
它不会像您希望的那样工作,因为原始类型是按值传递的。你可以试试:
globals()['a'] = 20 # works for global variables only, not local
或将您的值存储在 class 变量中,然后它的列表将保留对它的引用。
这是一个示例,说明如何将游戏数据存储在字典中并使用 json
模块轻松地 save/load 它。我将首先将您所有的变量声明放入一个字典中(请注意,我通常会使用 {}
语法而不是 dict()
构造函数,但我正在复制并粘贴您现有的代码,这使它稍微容易一些):
stats = dict(
money = 11000,
growtime = 45,
growreward = 50,
gramsweed = 0,
growing = False,
pots = 1,
seeds = 0,
cooktime = 90,
cookreward = 20,
gramsmeth = 0,
cooking = False,
tanks = 0,
methlitres = 0,
weedselling = 0,
methselling = 0,
currentlyselling = False,
dealers = 1,
dealtime = 120,
dealamount = 15,
)
现在我可以用几行代码编写您的 save
和 load
函数:
import json
def save():
with open("save.txt", "w") as f:
json.dump(stats, f)
def load():
with open("save.txt") as f:
stats.update(json.load(f))
json
模块负责读取行,解析它们,将它们转换为正确的类型,全部,因为它可以拉取所有它需要的信息直接来自字典对象。如果您有十几个不同的单独变量,您将无法获得同样类型的便利性和灵活性。
为了建议您将游戏代码的其他部分转换为使用 dict 而不是单个变量的方法,我需要查看该代码,但希望这个示例有助于让您相信生活可以 如果您不需要一次处理一个变量,那么会容易得多!