我已使用以下代码声明了一个矩阵:
matrix = [[' ' for x in range(x1)] for x in range(y1)]
但是当我尝试找到一个随机元素并使用以下代码更改它的值时:
randomX = random.randint(0, x)
randomY = random.randint(0, y)
if matrix[randomX][randomY] == ' ':
try:
matrix[randomX][randomY] = 'G'
scr.addstr(randomX, randomY, matrix[randomX][randomY])
scr.refresh()
except IndexError:
return
我得到一个IndexError。我试着写一些垃圾代码来退出函数,如果它运行到IndexError。它工作一次,然后仍然会抛出错误。
注意,x1与函数中的x相同。与y1和y相同。
任何线索我做错了什么?
答案 0 :(得分:7)
你的指数排序错误。您应该通过
访问它们matrix[randomY][randomX]
或改变理解顺序。
matrix = [[' ' for y in range(y1)] for x in range(x1)]
此外,正如Garrett在评论中指出的那样,randint()
包含两端,因此您可能希望使用randint(0,x-1)
和randint(0,y-1)
。
答案 1 :(得分:0)
索引超出范围,因为radint选择包含范围边缘的数字。 x1应该是x1 = x + 1.但最好不要有足够多的变量。此外,LafexIos正好关于索引(首先是Y然后是X)。
import random
x = 3
y = 4
matrix = [[' ' for ind_x in range(x)] for ind_y in range(y)]
for m in matrix:
print m
print '---------------------'
randomX = random.randint(0, x-1)
print 'random x: ', randomX
randomY = random.randint(0, y-1)
print 'random y: ', randomY
if matrix[randomY][randomX] == ' ':
matrix[randomY][randomX] = 'G'
print '---------------------'
for m in matrix:
print m
输出:
[' ', ' ', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
random x: 1
random y: 0
---------------------
[' ', 'G', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']