如何获得完全覆盖一个范围的随机数?
How do I get random numbers that fully cover a range?
我试图在 (1,5) 之间设置随机整数,但问题是在 10 个循环范围内的 for 循环中显示随机整数的所有值。我只能访问 'random class'.
中的 randint() 和 random() 方法
from random import randint
eventList = []
taskList = []
dayList = []
def getEventList():
eventList.sort()
return eventList
def getTaskList():
return taskList
def getDayList():
return dayList
def generateData():
while len(getTaskList()) < 10:
# Need to implement a way to stretch the random int while having all the integers present
randomEvent = randint(1, 5)
randomTask = randint(10, 30)
randomDay = randint(1, 9)
eventList.append(randomEvent)
dayList.append(randomDay)
if randomTask not in getTaskList():
taskList.append(randomTask)
为了对事物进行排序,您需要对“事物”进行排序。因此,您必须将所有三个数字组合在一个实体中,然后对这些实体进行排序。我建议您使用任务 class,并让它处理诸如生成唯一任务编号之类的事情。避免使用全局变量。
这是一个最小的复制(基于您的代码),它只是将您的三个数字放入一个元组中,将它们与内置的“zip”组合并对其进行排序:
from random import randint
def generateData():
eventList = []
taskList = []
dayList = []
for _ in range(10):
randomEvent = randint(1, 5)
randomTask = randint(10, 30)
randomDay = randint(1, 9)
eventList.append(randomEvent)
taskList.append(randomTask)
dayList.append(randomDay)
return sorted(zip(eventList, taskList, dayList))
for task in generateData():
print(task)
另请注意,python 变量名称约定略有不同,但我保留了它并使用了您的名称。
根据我在其他回答中的说明,我认为您是想问“如何获得完全覆盖某个范围的随机数?”
您正在使用 randint,只是多次调用它希望获得所有值。但取决于随机机会,这可能需要一段时间。
最好只取你想要的所有值,例如列表(范围(1,6))
然后用 random.shuffle
重新排列
https://docs.python.org/3/library/random.html#random.shuffle
import random
values = list(range(1, 6))
random.shuffle(values)
print(values)
显然,如果这是你想做的,但你的教授说你不能使用那个函数,那么你应该使用那个函数,获取工作代码,然后才编写你自己的标准库替代品. (所以你只需要调试一个或另一个)
所以写你自己的 shuffle 版本。我会将详细信息留给您,但使用 randint 来选择可用条目之一、删除它等等应该非常容易。
我试图在 (1,5) 之间设置随机整数,但问题是在 10 个循环范围内的 for 循环中显示随机整数的所有值。我只能访问 'random class'.
中的 randint() 和 random() 方法from random import randint
eventList = []
taskList = []
dayList = []
def getEventList():
eventList.sort()
return eventList
def getTaskList():
return taskList
def getDayList():
return dayList
def generateData():
while len(getTaskList()) < 10:
# Need to implement a way to stretch the random int while having all the integers present
randomEvent = randint(1, 5)
randomTask = randint(10, 30)
randomDay = randint(1, 9)
eventList.append(randomEvent)
dayList.append(randomDay)
if randomTask not in getTaskList():
taskList.append(randomTask)
为了对事物进行排序,您需要对“事物”进行排序。因此,您必须将所有三个数字组合在一个实体中,然后对这些实体进行排序。我建议您使用任务 class,并让它处理诸如生成唯一任务编号之类的事情。避免使用全局变量。
这是一个最小的复制(基于您的代码),它只是将您的三个数字放入一个元组中,将它们与内置的“zip”组合并对其进行排序:
from random import randint
def generateData():
eventList = []
taskList = []
dayList = []
for _ in range(10):
randomEvent = randint(1, 5)
randomTask = randint(10, 30)
randomDay = randint(1, 9)
eventList.append(randomEvent)
taskList.append(randomTask)
dayList.append(randomDay)
return sorted(zip(eventList, taskList, dayList))
for task in generateData():
print(task)
另请注意,python 变量名称约定略有不同,但我保留了它并使用了您的名称。
根据我在其他回答中的说明,我认为您是想问“如何获得完全覆盖某个范围的随机数?”
您正在使用 randint,只是多次调用它希望获得所有值。但取决于随机机会,这可能需要一段时间。
最好只取你想要的所有值,例如列表(范围(1,6))
然后用 random.shuffle
重新排列
https://docs.python.org/3/library/random.html#random.shuffle
import random
values = list(range(1, 6))
random.shuffle(values)
print(values)
显然,如果这是你想做的,但你的教授说你不能使用那个函数,那么你应该使用那个函数,获取工作代码,然后才编写你自己的标准库替代品. (所以你只需要调试一个或另一个)
所以写你自己的 shuffle 版本。我会将详细信息留给您,但使用 randint 来选择可用条目之一、删除它等等应该非常容易。