矩阵,指数超出范围

时间:2016-02-02 23:31:08

标签: python

我已使用以下代码声明了一个矩阵:

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相同。

任何线索我做错了什么?

2 个答案:

答案 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', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']