【问题标题】:Simple LOTTERY Algorithm on PYTHON [closed]PYTHON上的简单彩票算法[关闭]
【发布时间】:2016-10-21 15:41:54
【问题描述】:

我想要不同的数字。我在范围内写小数字,例如 (10),它工作没问题,但如果我写一个大数字,它就不能工作。

import random
arr=[]

for i in range(25):
    a=random.randint(1,30)
    if a in arr:
        b=random.randint(1,30)
        arr.append(b)
    if a not in arr:
        arr.append(a)
arr.sort()
print(arr[0:])

【问题讨论】:

  • 你的意思是它需要永远?并不奇怪。您尝试了哪个大价值?
  • 你生成一个随机数,看看它是否在里面,然后继续尝试生成一个新的随机数......这意味着你有随机时间曲线。 可能如果您“赢”了乐透,您将生成一个随机数,该随机数不在数组中,但是当您填满数组时,发生这种情况的几率会下降。为什么你不能用1->n 数字填充一个数组,随机播放,然后弹出你需要的任意数量的数字?

标签: algorithm python-3.x random


【解决方案1】:

好吧,对于彩票样本,您应该使用Fisher-Yates shuffle,它已经在random.shuffle 函数中实现。您使用的是 O(n) 而不是 O(n2) 算法。

【讨论】:

    【解决方案2】:

    你的方法的问题是,如果 a 在 arr 中,它会附加另一个随机数 b,它可能与 a 相同。

    我会使用以下方法:

    random.sample(xrange(1,30), 25)
    

    如果你真的想要一个循环,那么它应该是这样的:

    arr=[]
    for i in range(25):
        a=random.randint(1,30)
        while a in arr:
            a=random.randint(1,30)
        arr.append(a)
    arr.sort()
    print(arr[0:])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2015-01-14
      • 2021-12-22
      相关资源
      最近更新 更多