为什么我不能在列表列表中使用嵌套循环?
Why I am not able to use a nested loop in a list of lists?
我正在尝试解决书 Automate the boring stuff with Python
第 4 章 Project:Character picture grid
中的项目。
我无法遍历代码并打印书中所说的模式。这是我的代码:
gridlines = [['.', '.', '.', '.', '.', '.'], # 0, 0
['.', '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 grid_line(grid_func):
for i in grid_func[0:8]:
for grid_functioning in grid_func[0:5]:
print(i, end='')
grid_line(gridlines)
书上说要打印这个图案:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
该模式似乎从左上角开始,最初 向下 而不是跨越 (a)。这意味着您不能处理一行中的每一列,而必须处理一列中的每一行。
假设,它保证是矩形的,可以用(b):
来完成
def grid_line(grid_func):
for index in range(len(grid_func[0])): # square: do each column
for row in grid_func: # do each row within that column
print(row[index], end="") # output the cell, no line feed
print() # go to next line after column
您会注意到我删除了 [0:n]
位,因为您不需要切片,应该使用整个 row/column。在任何情况下,你的 5
和 8
值都是错误的,因为 n
是一个 beyond 你想要处理的东西,所以你会跳过最后的 row/column.
(a) 从技术上讲,它 可以 从左下角开始向上(因为它是对称的)但我选择了更简单的情况。
(b) 它可以 也 可以用下面更 Pythonic 的列表理解和字符串连接方法来完成,但我可能会等到你对这门语言更熟悉了再说:-)
def grid_line(grid):
print("\n".join(["".join([row[idx] for row in grid]) for idx in range(len(grid[0]))]))
我正在尝试解决书 Automate the boring stuff with Python
第 4 章 Project:Character picture grid
中的项目。
我无法遍历代码并打印书中所说的模式。这是我的代码:
gridlines = [['.', '.', '.', '.', '.', '.'], # 0, 0
['.', '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 grid_line(grid_func):
for i in grid_func[0:8]:
for grid_functioning in grid_func[0:5]:
print(i, end='')
grid_line(gridlines)
书上说要打印这个图案:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
该模式似乎从左上角开始,最初 向下 而不是跨越 (a)。这意味着您不能处理一行中的每一列,而必须处理一列中的每一行。
假设,它保证是矩形的,可以用(b):
来完成def grid_line(grid_func):
for index in range(len(grid_func[0])): # square: do each column
for row in grid_func: # do each row within that column
print(row[index], end="") # output the cell, no line feed
print() # go to next line after column
您会注意到我删除了 [0:n]
位,因为您不需要切片,应该使用整个 row/column。在任何情况下,你的 5
和 8
值都是错误的,因为 n
是一个 beyond 你想要处理的东西,所以你会跳过最后的 row/column.
(a) 从技术上讲,它 可以 从左下角开始向上(因为它是对称的)但我选择了更简单的情况。
(b) 它可以 也 可以用下面更 Pythonic 的列表理解和字符串连接方法来完成,但我可能会等到你对这门语言更熟悉了再说:-)
def grid_line(grid):
print("\n".join(["".join([row[idx] for row in grid]) for idx in range(len(grid[0]))]))