Каков результат одной функции print () в python

#python

#python

Вопрос:

Я получил подсписок python и функцию (замените 0 на .) для печати этого подсписка (да, это похоже на судоку). Код выглядит следующим образом.

 grid = [[5,3,0,0,7,0,0,0,0], 
        [6,0,0,1,9,5,0,0,0], 
        [0,9,8,0,0,0,0,6,0], 
        [8,0,0,0,6,0,0,0,3], 
        [4,0,0,8,0,3,0,0,1], 
        [7,0,0,0,2,0,0,0,6], 
        [0,6,0,0,0,0,2,8,0], 
        [0,0,0,4,1,9,0,0,5], 
        [0,0,0,0,8,0,0,7,9]]
        
def print_grid():
    for row in grid:
        for column in row:
            if column == 0:
                print("." , end=" ")
            else:
                print(column , end=" ")  

После того, как я запустил print_grid(), я получил результат, подобный приведенному ниже. Интересно, как распечатать его построчно. Заранее спасибо за любую помощь.

  3 . . 7 . . . . 6 . . 1 9 5 . . . . 9 8 . . . . 6 . 8 . . . 6 . . . 3 4 . . 8 . 3 . . 1 7 . . . 2 . . . 6 . 6 . . . . 2 8 . . . . 4 1 9 . . 5 . . . . 8 . . 7 9  

Комментарии:

1. Потому что вы меняете конец на ` ` вместо новой строки по умолчанию

2. Просто выведите новую строку после вашего внутреннего цикла

Ответ №1:

Добавьте a print() в конце второго цикла for:

 grid = [[5,3,0,0,7,0,0,0,0], 
        [6,0,0,1,9,5,0,0,0], 
        [0,9,8,0,0,0,0,6,0], 
        [8,0,0,0,6,0,0,0,3], 
        [4,0,0,8,0,3,0,0,1], 
        [7,0,0,0,2,0,0,0,6], 
        [0,6,0,0,0,0,2,8,0], 
        [0,0,0,4,1,9,0,0,5], 
        [0,0,0,0,8,0,0,7,9]]
        
def print_grid():
    for row in grid:
        for column in row:
            if column == 0:
                print("." , end=" ")
            else:
                print(column , end=" ")
        print()

print_grid()
  

Ответ №2:

Это позволяет достичь результата, который вы ищете, более простым способом, печатая каждую строку сетки «построчно». Для каждой строки мы используем понимание списка для создания нового списка значений строк, где 0 заменяется на «.» Затем, используя оператор splat (*), мы передаем эту строку в качестве аргументов, которые оператор print будет печатать с пробелами между ними.

 grid = [[5,3,0,0,7,0,0,0,0], 
    [6,0,0,1,9,5,0,0,0], 
    [0,9,8,0,0,0,0,6,0], 
    [8,0,0,0,6,0,0,0,3], 
    [4,0,0,8,0,3,0,0,1], 
    [7,0,0,0,2,0,0,0,6], 
    [0,6,0,0,0,0,2,8,0], 
    [0,0,0,4,1,9,0,0,5], 
    [0,0,0,0,8,0,0,7,9]]

for row in grid:
    print(*["." if val == 0 else val for val in row])  
  

Ответ №3:

Модуль Numpy идеально подходит для этого. Но также требуется, чтобы ваша функция печати стала функцией изменения платы.

 grid = [[5,3,0,0,7,0,0,0,0], 
    [6,0,0,1,9,5,0,0,0], 
    [0,9,8,0,0,0,0,6,0], 
    [8,0,0,0,6,0,0,0,3], 
    [4,0,0,8,0,3,0,0,1], 
    [7,0,0,0,2,0,0,0,6], 
    [0,6,0,0,0,0,2,8,0], 
    [0,0,0,4,1,9,0,0,5], 
    [0,0,0,0,8,0,0,7,9]]
    
def change_grid():
    for x in range(9):
        for y in range(9):
            if grid[x][y] == 0:
                grid[x][y] = "." 
change_grid()
print(np.matrix(grid))
  

Ответ №4:

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

 def print_grid():
    for row in grid:
        print("")
        for column in row:
            if column == 0:
                print("." , end=" ")
            else:
                print(column , end=" ")
  

Комментарии:

1. Ваш ответ дает менее чем идеальный результат. Он выводит пустую строку, а затем оставляет последнюю строку висящей без EOL. ответ @WasifHasan — лучшая альтернатива.

2. Ах. Я вижу. Спасибо за комментарий.