Python中基于规则的(t,d)键字典修改实现问询
Python中基于规则的(t,d)键字典修改实现问询
嘿,我完全get到你想要实现的规则了——给每个治疗师随机选一个起始日(要求d<6),然后按照「保持原值→2天0→5天原值→2天0→…」的循环模式更新字典里的对应值对吧?我来帮你调整代码实现这个逻辑:
首先先拆解下你的核心需求规则:
- 对每个治疗师
t,随机抽取一个起始日start_d,范围是1到5(满足start_d <6) - 所有
d < start_d的日期:保持初始的随机值不变 - 从
start_d开始,循环执行以下逻辑:- 将当前日期
current_d和下一个日期current_d+1的值设为0(如果日期存在的话) - 接下来的5个日期保持初始值不变(无需修改,直接跳过)
- 重复步骤1和2,直到处理完所有日期
- 将当前日期
下面是修改后的完整代码,每一步都加了逻辑说明:
import random T = list(range(1, 3)) D = list(range(1, 15)) # 先给每个治疗师生成专属的基础随机值 random_values_for_t = {t: random.randint(1, 4) for t in T} # 初始化字典,先把所有(t,d)键都设为对应治疗师的基础值 Max_td = {(t, d): random_values_for_t[t] for t in T for d in D} # 对每个治疗师单独应用规则 for t in T: # 随机选符合要求的起始日:1-5之间的整数(满足d<6) start_d = random.randint(1, 5) current_d = start_d total_days = max(D) # 拿到最大的日期数 base_value = random_values_for_t[t] while current_d <= total_days: # 把当前日和下一日设为0(做边界判断,避免超出最大日期) if (t, current_d) in Max_td: Max_td[(t, current_d)] = 0 if current_d + 1 <= total_days and (t, current_d+1) in Max_td: Max_td[(t, current_d+1)] = 0 # 跳过接下来的5天(这5天保持基础值,不需要修改),更新下一次处理的起始日 current_d += 2 + 5 # 2天0 + 5天原值,所以下一次从current_d+7开始 # 可以单独打印治疗师1的结果来验证规则 print("治疗师1的最终结果:") for d in D: print(f"(1, {d}): {Max_td[(1, d)]}")
举个实际的验证例子:如果治疗师1的start_d=3,基础值是4,那么最终结果就会和你给出的期望输出完全一致:
(1, 1): 4, (1, 2): 4, (1, 3): 0, (1, 4): 0, (1, 5): 4, (1, 6): 4, (1, 7): 4, (1, 8): 4, (1, 9): 4, (1, 10): 0, (1, 11): 0, (1, 12): 4, (1, 13): 4, (1, 14): 4
你可以直接运行这段代码,每个治疗师的起始日都是随机生成的,完全符合你的规则要求~
备注:内容来源于stack exchange,提问作者mingabua
相关产品推荐
相关产品推荐

