You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中简便比较随机结果并转为JSON文件积分?

问题描述

我有一段简化的Python代码,目前里面的random语句没起到实际作用。我想要实现的逻辑是:生成三个随机数对应red、blue、green三个对象,比较这三个随机数后,给随机数最高的对象p值加3,第二高的加2,最低的加1。同时要更新JSON文件里的对应值,并且输出排序后的结果(比如rr=22、rb=66、rg=44时,输出blue 3,green 2,red 1,JSON里的p值也同步更新)。

我知道用嵌套if能实现,但这样代码不美观,而且后续新增颜色时扩展性很差,请问有没有更好的实现方式?

现有简化代码:

import json
import random
y = {}
y['red'] = {'name': "red", 'p': 0}
y['blue'] = {'name': "blue", 'p': 0}
y['green'] = {'name': "green", 'p': 0}
with open('y.json', 'w') as f:
    json.dump(y, f)
f = open('y.json')
y = json.load(f)
rr = random.randint(1, 101)
rb = random.randint(1, 101)
rg = random.randint(1, 101)
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)
解决方案

核心思路是把颜色和对应的随机数打包成列表,然后按随机数降序排序,再依次给每个排序后的对象分配对应的加分(3、2、1)。这种写法不管后续新增多少颜色,只需要补充对应的条目即可,完全不用修改核心逻辑,扩展性拉满。

优化后的代码如下:

import json
import random

# 初始化颜色数据(实际场景可直接从JSON读取,这里保留你的初始化逻辑)
y = {
    'red': {'name': "red", 'p': 0},
    'blue': {'name': "blue", 'p': 0},
    'green': {'name': "green", 'p': 0}
}

# 写入初始JSON(实际使用时可移除,按你的需求保留此步骤)
with open('y.json', 'w') as f:
    json.dump(y, f)

# 读取JSON中的数据
with open('y.json', 'r') as f:
    y = json.load(f)

# 生成每个颜色对应的随机数,打包成(随机数, 颜色键)的元组列表
color_randoms = [
    (random.randint(1, 101), 'red'),
    (random.randint(1, 101), 'blue'),
    (random.randint(1, 101), 'green')
]

# 按随机数从大到小排序
color_randoms.sort(reverse=True, key=lambda item: item[0])

# 定义对应名次的加分值:第1名加3,第2名加2,第3名加1
rank_scores = [3, 2, 1]

# 遍历排序后的列表,更新p值并收集输出内容
output_lines = []
for (_, color_key), add_score in zip(color_randoms, rank_scores):
    y[color_key]['p'] += add_score
    output_lines.append(f"{y[color_key]['name']} {add_score}")

# 打印最终结果
print('\n'.join(output_lines))

# 保存更新后的数据到JSON文件
with open('y.json', 'w') as f:
    json.dump(y, f)

代码细节说明

  1. 打包与排序:把颜色键和随机数绑定成元组,直接用列表的sort方法按随机数逆序排列,完全替代了繁琐的嵌套if判断,代码简洁很多。
  2. 批量加分:用zip把排序后的颜色列表和加分列表配对,遍历过程中直接给对应颜色的p值加分数。如果后续新增颜色,只需要在color_randoms里加一个元组,同时在rank_scores里补充对应名次的分数(比如新增第四个颜色时,把rank_scores改成[4,3,2,1]即可)。
  3. 输出与保存:遍历过程中同步收集输出内容,最后统一打印,同时把更新后的数据写入JSON文件,逻辑清晰易懂。

内容的提问来源于stack exchange,提问作者SkyThaKid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:38:38