如何使用randint生成覆盖指定全范围、符合循环次数要求的随机整数?
原代码问题说明
- 原逻辑中每次循环独立调用
randint(1,5)生成randomEvent,完全随机的情况下存在概率缺失1~5中的某一个或多个数值,无法满足覆盖要求。
核心实现思路
要同时满足随机和覆盖全1~5数值两个要求,可采用预生成+打乱的方案,全程仅使用randint()方法:
- 先构造包含1、2、3、4、5的基础列表,确保所有要求数值必然出现
- 额外生成5个1~5的随机整数,和基础列表拼接得到总长10的列表
- 用Fisher-Yates洗牌算法打乱列表顺序,保证最终结果的随机性
修改后完整代码
from random import randint eventList = [] taskList = [] dayList = [] def getEventList(): eventList.sort() return eventList def getTaskList(): return taskList def getDayList(): return dayList def generateData(): # 预先生成符合覆盖要求的10个随机event event_pool = [1, 2, 3, 4, 5] # 补全剩余5个随机数值 for _ in range(5): event_pool.append(randint(1, 5)) # Fisher-Yates 洗牌,仅使用randint方法 for i in range(len(event_pool)-1, 0, -1): swap_idx = randint(0, i) event_pool[i], event_pool[swap_idx] = event_pool[swap_idx], event_pool[i] current_event_idx = 0 while len(getTaskList()) < 10: randomEvent = event_pool[current_event_idx] randomTask = randint(10, 30) randomDay = randint(1, 9) eventList.append(randomEvent) dayList.append(randomDay) current_event_idx += 1 if randomTask not in getTaskList(): taskList.append(randomTask)
内容的提问来源于stack exchange,提问作者LuckyRaven10
相关产品推荐
相关产品推荐

