2016-02-20 137 views
0

下面是我写的代码。它说清单保证指数超出了范围。我似乎无法弄清楚我在这里出错的地方。也许有人可以详细说明错误在哪里。矩阵生成器python索引分配列表超出范围

def genarator(x, y): 
    square = x * y 
    matrix = [[]] 
    matrix2 = [] 

    i = 0  
    while square > 0: 
     j = 0 
     while x > j: 
      matrix[i][j] = int(raw_input("Enter the matrix number")) 
      j = 1 
     i = 1 
     square = -square 
     matrix2 = matrix2 + matrix 

    return matrix2 


def main():  
    matrix3 = [] 
    x = int(raw_input("Enter the width of your matrix")) 
    y = int(raw_input("Enter the Length of your matrix")) 
    matrix3 = genarator(x, y) 
    print(matrix3) 
    return 0 

main() 
### EDIT ###########我解决了这个问题

DEF发生器(X,Y):

matrix = [[0 for i in range(x)] for j in range(y)] 

turns = x 

i = 0 

j = 0 

while turns > 0: 

    while i < x: 

     while j < y: 

      matrix[i][j] = int(raw_input("Enter Array values")) 

      j += 1 
     j = 0 

     i += 1 

    turns -= 1 

print(matrix) 

DEF主():

x = int(raw_input("Enter array length")) 

y = int(raw_input("Enter array width")) 

print(generator(x, y)) 

return 0 

的main()

回答

0

如果你尝试下面的代码片段:

x = [] 
x[0] = 4 

您将看到有错误。原因是x[0]尚未定义,所以它不能被修改。要解决你的错误,你将不得不修改之前追加东西到您的列表:

def genarator(x, y): 
    square = x * y 
    matrix = [[]] 
    matrix2 = [] 

    i = 0  
    while square > 0: 
     matrix.append([]) 
     j = 0 
     while x > j: 
      matrix[-1].append(int(raw_input("Enter the matrix number"))) 
      j = 1 
     i = 1 
     square = -square 
     matrix2 = matrix2 + matrix 

    return matrix2 

我还修改了索引,因为-1会给你的最后一个项目,这是你想要的。