我要求程序在网格中以随机顺序打印出数字1到9。问题是,当它打印出来时,它将具有两次相同的数字。这是我到目前为止的代码:`import random rows = 3 cols = 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]]
另外,那些双括号很烦人。有什么方法可以解决这个问题吗?
答案 0 :(得分: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])
也删除了双括号(假设您需要单个括号)并且只打印每一行一次(您的原始缩进将打印整个矩阵很多次: - 。)。
答案 1 :(得分:0)
如果您不介意使用numpy,请尝试numpy.random.shuffle()
。
示例:
import numpy
xx = numpy.arange(10)
numpy.random.shuffle(xx)
print xx