2016-02-16 3 views
1

Я был до комментария для почти похожих вопросов, но нет решения для решения моей маленькой проблемы.Автоматизация скучного материала с помощью Python: глава 4 Практический проект II

Мой код, похоже, работает, но я все еще получаю 'IndexError: индекс индекса вне диапазона'.

Это мой код:

grid = [['.', '.', '.', '.', '.', '.',],\ 
['.', 'O', 'O', '.', '.', '.',],\ 
['O', 'O', 'O', 'O', '.', '.',],\ 
['O', 'O', 'O', 'O', 'O', '.',],\ 
['.', 'O', 'O', 'O', 'O', 'O',],\ 
['O', 'O', 'O', 'O', 'O', '.',],\ 
['O', 'O', 'O', 'O', '.', '.',],\ 
['.', 'O', 'O', '.', '.', '.',],\ 
['.', '.', '.', '.', '.', '.',]] 
def fish(): 
    m = 0 
    n = 0 
    while m != len(grid): 
     print (grid[m][n] + \ 
     grid[m+1][n] + \ 
     grid[m+2][n] + \ 
     grid[m+3][n] + \ 
     grid[m+4][n] + \ 
     grid[m+5][n] + \ 
     grid[m+6][n] + \ 
     grid[m+7][n] + \ 
     grid[m+8][n]) 
     n = n+1 
fish() 
+1

Опубликовать полное сообщение об ошибке. – timgeb

+0

Вы увеличиваете n каждый раз, но условие для цикла while использует 'm! = Len (grid)'. Is 'n! = Len (grid)' что вы ищете? – chucksmash

+0

Вы, вероятно, хотите 'while n! = Len (grid):' Или вы должны увеличивать 'm'. В любом случае, это простая опечатка –

ответ

1

Ваш while цикл никогда не прекращается, потому что ваша ценность m никогда не обновляется, вы только обновить значение n.

Это приведет к тому, что ваша петля будет работать вечно, в итоге получив IndexError, когда она достигнет слишком большого значения для n.

Если вы знаете, что там будет ровно 8 строк в сетке, то вы, вероятно, следует сделать так, чтобы ваш while цикл проверяет значение n не m и проверок в отношении длины одной из строк (как grid[0]), как это:

grid = [['.', '.', '.', '.', '.', '.',],\ 
     ['.', 'O', 'O', '.', '.', '.',],\ 
     ['O', 'O', 'O', 'O', '.', '.',],\ 
     ['O', 'O', 'O', 'O', 'O', '.',],\ 
     ['.', 'O', 'O', 'O', 'O', 'O',],\ 
     ['O', 'O', 'O', 'O', 'O', '.',],\ 
     ['O', 'O', 'O', 'O', '.', '.',],\ 
     ['.', 'O', 'O', '.', '.', '.',],\ 
     ['.', '.', '.', '.', '.', '.',]] 

def fish(): 
    m = 0 
    n = 0 
    while n < len(grid[0]): 
     print (grid[m][n] + \ 
     grid[m+1][n] + \ 
     grid[m+2][n] + \ 
     grid[m+3][n] + \ 
     grid[m+4][n] + \ 
     grid[m+5][n] + \ 
     grid[m+6][n] + \ 
     grid[m+7][n] + \ 
     grid[m+8][n]) 
     n = n+1 
fish() 
-2

добавить т + 1, после п + 1, и вы должны быть хорошо идти

1

Я мог бы предложить альтернативный ответ

def fish(): 
    for line in zip(*grid): 
     print(''.join(line)) 

Печать

..OO.OO.. 
.OOOOOOO. 
.OOOOOOO. 
..OOOOO.. 
...OOO... 
....O.... 
0

кажется, что вы хотите, чтобы сделать эту работу для любой заданной длины списков. Задача состояла в том, чтобы заставить ее работать с конкретным списком в списке в проекте практики. Этот код использует только содержание преподается в книге до главы 4 (потому что я только начинаю код и знаю только эту книгу, пока здесь):

grid = [['.', '.', '.', '.', '.', '.'], 
     ['.', 'O', 'O', '.', '.', '.'], 
     ['O', 'O', 'O', 'O', '.', '.'], 
     ['O', 'O', 'O', 'O', 'O', '.'], 
     ['.', 'O', 'O', 'O', 'O', 'O'], 
     ['O', 'O', 'O', 'O', 'O', '.'], 
     ['O', 'O', 'O', 'O', '.', '.'], 
     ['.', 'O', 'O', '.', '.', '.'], 
     ['.', '.', '.', '.', '.', '.']] 
for x in range(0,6): 
    print(end='\n') 
    for y in range(0,9): 
     print(grid[y][x],end='') 
1

Я довольно много нового программирование и мой ответ таков :

Он также дает правильный результат, но наверняка не лучший способ решить проблему, но все же альтернативный вариант.

grid = [['.', '.', '.', '.', '.', '.'], 
     ['.', 'O', 'O', '.', '.', '.'], 
     ['O', 'O', 'O', 'O', '.', '.'], 
     ['O', 'O', 'O', 'O', 'O', '.'], 
     ['.', 'O', 'O', 'O', 'O', 'O'], 
     ['O', 'O', 'O', 'O', 'O', '.'], 
     ['O', 'O', 'O', 'O', '.', '.'], 
     ['.', 'O', 'O', '.', '.', '.'], 
     ['.', '.', '.', '.', '.', '.']] 



for x in range(len(grid)): 
    for y in range(len(grid)): 
     try: 
      if y == len(grid)-1: 
       print(grid[y][x]) 

      else: 
       print(grid[y][x], end='') 
     except IndexError: 
      break 
Смежные вопросы