试图让我的程序不重复随机数
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
我要求程序在网格中以随机顺序打印出数字 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