我正在使用宾果卡,但我似乎无法使用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()
答案 0 :(得分:5)
self.b = random.sample(range(1, 16), 5)
答案 1 :(得分:2)
他的:
while len(self.b) < 5:
r = random.randint(1, 15)
if not r in self.b:
self.b.append(r)
答案 2 :(得分:1)
如果你选择1到15之间的五个随机整数,你可能会得到一些重复。您可以尝试选择而无需替换:
self.b = random.sample(range(1,16),5)
答案 3 :(得分:0)
除了sample
中的random
之外,您还可以使用choice
函数,如果您拥有numpy 1.7.0中的新功能:
from numpy import random
self.b = list(random.choice(range(1,16), size=5, replace=False))
它的优点在于它采用可选参数p
,其涉及与群体中的每个条目相关联的概率。在你的情况下这是统一的,这是默认的。
答案 4 :(得分:0)
您可以使用np.random.shuffle
来修改数组
>>> 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])