gpt4 book ai didi

python - 在Python中不使用最后n个值生成随机数

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:47 25 4
gpt4 key购买 nike

我有一个 Python 函数,可以生成 0 到 100 之间的随机数:

def get_next_number():
value = randint(0,100)

每次调用此函数时,我都需要它返回一个随机数,但该数字不能是它返回的最后 n 个随机数之一(在本例中假设为 5)。

以下是一些示例:

55, 1, 67, 12, 88, 91, 100, 54(这很好,因为返回的最后 5 个数字没有重复)

77, 42, 2, 3, 88, 2...(当函数获得随机数 2 时,我需要重试,因为 2 之前已经返回了 3 个数字)

89, 23, 29, 81, 99, 100, 6, 8, 23...(这个很好,因为 23 之前出现过 5 次以上)

随机函数中是否内置了一些东西来实现这一点?

最佳答案

反过来想一下。

您可以先生成一组不重复的数字,然后由一 - 从而消除了生成重复数字的可能性。

您还需要跟踪生成的最后 5 个项目,以将它们从所选项目中排除。

像这样的事情就可以了:

s = set(range(0, 100))
last5 = []
def get_next_number():
reduced_list = list(s - set(last5))
i = randint(0, len(reduced_list) - 1)
last5.append(reduced_list[i])
if len(last5) > 5:
last5.pop(0)
return reduced_list[i]

测试:

result = []
for i in range(0, 5000):
result.append(get_next_number())
print(result)
<小时/>

分步说明:

  1. 生成要选取的号码集(例如 0 到 99)并生成一个空列表来存储最后 5 个选取的号码:

    s = set(range(0, 100))
    last5 = []
  2. 在该方法中,从被挑选的可能性中排除最后 5 个挑选的号码:

    reduced_list = list(s - set(last5))
  3. reduced_list中随机挑选一个号码,reduced_list中剩下的所有号码都可以挑选。将号码附加到 last5 列表

    i = randint(0, len(reduced_list) - 1) #get any valid index. -1 is needed because randint upperbound is inclusive
    last5.append(reduced_list[i]) #the number is as what it pointed by the index: reduced_list[i], append that number to the last 5 list
  4. 检查last5列表是否已有成员> 5。如果有,则需要删除其first成员:

    if len(last5) > 5:
    last5.pop(0)
  5. 返回您选择的成员:

    return reduced_list[i]

关于python - 在Python中不使用最后n个值生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com