1

我正在制作一张宾果卡,但我似乎无法使用 randint 生成不同的数字。这一次它可能在 b 中有所有不同的数字,但下一次,它有几个重复的数字。

我该如何制作它才能生成不同的数字而不会重复?

谢谢。

import random

class Card:
    def __init__(self):
        self.b = []
        self.i = []
        self.n = []
        self.g = []
        self.o = []

        for x in range(0, 5):
            r = random.randint(1, 15)
            self.b.append(r)

        print(self.b)
        print(self.i)
        print(self.n)
        print(self.g)
        print(self.o)

p = Card()
4

5 回答 5

5

这个答案

self.b = random.sample(range(1, 16), 5)
于 2013-03-16T22:37:10.053 回答
2

他的呢:

while len(self.b) < 5:
  r = random.randint(1, 15)
  if not r in self.b:
    self.b.append(r)
于 2013-03-16T22:35:30.880 回答
1

如果您选择 1 到 15 之间的五个随机整数,您可能会得到一些重复。您可以尝试选择不替换:

self.b = random.sample(range(1,16),5)
于 2013-03-16T22:38:24.423 回答
0

您可以使用np.random.shufflewhich 修改数组

>>> a = np.arange(1,16)
>>> np.random.shuffle(a)
>>> a[0:5]
array([ 9, 11,  7,  4, 10])
>>> np.random.shuffle(a)
array([ 3,  1, 13,  5,  8])

所以也许像

>>> class Card:
      def __init__(self,arr):
        np.random.shuffle(arr)
        self.b = arr[0:5]
        #etc

>>> nums = np.arange(1,16)
>>> p = Card(nums)
>>> p.b
array([ 8,  2,  6, 13,  9])
于 2013-03-30T00:45:31.607 回答
0

除了samplein之外random,您还可以使用choicenumpy 1.7.0 中的新功能(如果有):

from numpy import random
self.b = list(random.choice(range(1,16), size=5, replace=False))

它的优点是它需要一个可选参数,该参数p涉及与总体中每个条目相关联的概率。在您的情况下这是统一的,这是默认情况。

于 2013-03-16T22:45:53.180 回答