【问题标题】:How do I get random numbers that fully cover a range?如何获得完全覆盖范围的随机数?
【发布时间】:2021-12-31 10:24:09
【问题描述】:

我试图在 (1,5) 之间设置随机整数,但问题是在 10 个循环范围内的 for 循环中显示随机整数的所有值。我只能访问“随机类”中的 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)

【问题讨论】:

  • 您需要将它们与 zip 组合在一起,然后排序。或者您可以只返回一个元组列表(或命名元组,或类实例)。然后有了一个列表,你就可以排序了。

标签: python python-3.x methods


【解决方案1】:

根据我在其他答案中的说明,我认为您的意思是要问“如何获得完全覆盖范围的随机数?”

您正在使用 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 选择一个可用的条目,删除它应该很容易,等等。

【讨论】:

    【解决方案2】:

    为了对事物进行排序,您需要对“事物”进行排序。因此,您必须将所有三个数字组合到一个实体中,然后对这些实体进行排序。我建议您使用 Task 类,并让它处理诸如生成唯一任务编号之类的事情。避免使用全局变量。

    这是一个最小的复制(基于您的代码),将您的三个数字放在一个元组中,将它们与内置的“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 约定有点不同,但我不理会它并使用了你的名字。

    【讨论】:

    • 我的问题是在前几行(以及评论#)。我应该存在所有随机整数 (1,5),例如 1、2、3、4、5,它们应该位于随机索引位置。我对随机值进行了排序,但我不能保证它总是显示我选择随机化的 5 个值。我更新了代码以使其清晰。
    • 我也不允许使用 zip 或 sorted 方法
    • 所以你想要random.shuffle,而不是randint
    • 是否使用内置的“zip”并不重要。你仍然必须做同样的事情,无论你是用简单的方法还是用难的方法。每当您自行更改其中一个列表时,您就无法挽回地破坏您的对象。
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2019-04-08
    • 2011-08-30
    • 2015-03-14
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多