这是我的代码:
#start.py
import json
y = {}
y['red'] = {'name': "red", 'p': 0, 'rand': 0}
y['blue'] = {'name': "blue", 'p': 0, 'rand': 0}
y['green'] = {'name': "green", 'p': 0, 'rand': 0}
with open('y.json', 'w') as f:
json.dump(y, f)
和
#main.py
import json
import random
f = open('y.json')
y = json.load(f)
for key, value in y.items():
y[key]['rand'] = random.randint(1, 101)
sorted_keys = sorted(y.keys(), key=lambda x: y[x]['rand'])
for i, key in enumerate(sorted_keys):
y[key]['p'] = i + 1
z = '%s%s%s' % (y['red']['name'], " ", y['red']['p'])
zz = '%s%s%s' % (y['blue']['name'], " ", y['blue']['p'])
zzz = '%s%s%s' % (y['green']['name'], " ", y['green']['p'])
print('\n'.join(sorted([z, zz, zzz], key=lambda x: int(x.split()[-1]), reverse=True)))
with open('y.json', 'w') as f:
json.dump(y, f)
我将其拆分,因此我可以首先将值引入 JSON 文件,然后在第二个文件中执行其他所有操作。
我想用这个程序做的基本上是生成一个随机数(红、蓝、绿),数字最大的人得到 3 分,第二名得到 2 分,第三名得到 1 分。
输出:
blue 3
red 2
green 1
例如,按照我想要的方式工作。
现在我的问题是,当我再次运行该程序时,我得到(例如):
red 3
blue 2
green 1
作为我的输出,而不是:
blue: 5
red: 5
green: 2
所以基本上每次我想运行程序时,我都希望“p”相加而不是再次覆盖它们。
不,我只运行一次 start.py 来设置所需的值,之后我只使用 main.py,所以我不应该用 覆盖
y = {}
y['red'] = {'name': "red", 'p': 0, 'rand': 0}
y['blue'] = {'name': "blue", 'p': 0, 'rand': 0}
y['green'] = {'name': "green", 'p': 0, 'rand': 0}
谢谢你:-)
最佳答案
对于这一行,您将 p
的值硬编码为排序索引加 1。
for i, key in enumerate(sorted_keys):
y[key]['p'] = i + 1
相反,如果您想将本轮的分数添加到当前分数中,您应该有类似的内容
for i, key in enumerate(sorted_keys):
y[key]['p'] += i + 1
它获取 y[key]['p']
的当前值,并在重新分配该值之前添加 i+1
。
关于python - 使用 Python 在 JSON 文件中添加随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939016/