【问题标题】:random number generator returning a number not generated before随机数生成器返回之前未生成的数字
【发布时间】:2020-11-29 14:08:13
【问题描述】:

我想要一个随机生成器,它不会生成之前生成的任何数字。调用此生成器不会返回列表。每次返回一个数字,这个数字将是一个以前没有生成过的全新数字。

到目前为止,我实现这一点的想法是首先生成一个长的非重复随机列表,然后从列表中逐个检索。

使用 Python,但我想这更像是一个一般逻辑问题。

编辑: 很抱歉给大家带来了困惑。澄清我正在尝试实施的问题:我正在开发一个应用程序,用户可以在其中注册并接收酒店房间号。该应用程序有一些酒店设置。每个新用户都将收到该酒店的唯一酒店编号。范围可能是从 0001 到 9999。我的目标是让算法为该用户生成一个从 0001 到 9999 的随机数,并且该数字必须是唯一的,以便酒店的每个房间号都由仅限一名用户。我正在使用 Django。

【问题讨论】:

  • 你能举一个你可能希望看到的序列的例子吗?
  • 到目前为止,我实现这个的想法是先生成一个长的非重复随机列表,然后从列表中逐个检索。这是个好主意,什么有问题吗?
  • 你没有发布代码,也没有问题。请重复介绍导览,尤其是on topichow to ask。您的规范有点不足,而且您根本没有发布任何尝试。 Stack Overflow 不是设计资源;你的实施有什么问题?发布一个指定的问题,我们有一些工作要做。
  • 即使没有实现,也可以针对问题询问算法(在这种情况下,“尝试”会是什么样子?),但您必须说这是您的问题。跨度>
  • 如果它是非重复的,那么它就不是随机的。我建议加密。加密数字 0, 1, 2, 3, ... 以获得一系列唯一结果,直至您使用的密码的块大小。

标签: python algorithm random


【解决方案1】:

如果您已经知道需要从中选择的数字,

import random
x = [4,3,6,7,2,...]  # list of desired numbers
result = x.pop(random.randint(0, len(x) - 1))

【讨论】:

  • 您提供所需数字的列表,这些数字应该是唯一的,因此是理想的。
  • x 是一个唯一值列表,您从随机中选择其中一个,然后将其从列表中弹出。不好意思,怎么又出现同号被抽的问题了​​?
【解决方案2】:

你可以这样做:

import numpy as np
random_nums = []
for _ in range(10):
   while True:
       x = np.random.randint(0,10)
       if x not in random_nums:
           random_nums.append(x)
           break

【讨论】:

  • 这对于最后几个数字来说可能会很慢。
  • Yes" 如果是我的代码,我会使用np.arange() 创建一个列表,然后对其进行随机播放,但他没有提供太多关于他想要什么的信息,这是一个更“通用”的解决方案.
猜你喜欢
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2023-01-03
相关资源
最近更新 更多