试图让我的程序不重复随机数

Trying to get my program to not duplicate random numbers

我要求程序在网格中以随机顺序打印出数字 1 到 9。问题是当它打印出来时,它会有两次相同的数字。这是我到目前为止的代码:`import random 行数 = 3 列 = 3

values = [[0,0,0]]

for r in range(rows):
    for c in range(cols):
        values [r][c] = random.randint(1, 9)
        print(values)

`

和示例输出: [[6, 0, 0]] [[6, 4, 0]] [[6, 4, 2]]

另外,那些双括号很烦人。有什么办法可以解决这个问题?

使用random.shuffle随机化您想要的号码的顺序

import random

numbers = list(range(1, rows * cols + 1))  # good for Py 2 *and* 3
random.shuffle(numbers)
values = [[0] * cols for r in rows]

(后者是为了避免 values 中的重复并使其大小合适——我不明白您的原始代码如何无法引发异常!)。

然后:

for r in range(rows):
    for c in range(cols):
        values[r][c] = numbers(r + rows * c)
    print(values[r])

这也删除了双括号(假设你想要单括号)并且每行只打印一次(你原来的缩进会打印整个矩阵很多很多次:-)。

如果您不介意使用 numpy,请尝试 numpy.random.shuffle()

示例:

import numpy
xx = numpy.arange(10)
numpy.random.shuffle(xx)
print xx