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

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开始,循环执行以下逻辑:
    1. 将当前日期current_d和下一个日期current_d+1的值设为0(如果日期存在的话)
    2. 接下来的5个日期保持初始值不变(无需修改,直接跳过)
    3. 重复步骤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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:08:06