我是新手,现在正在做Al Sweigar的书.在第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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
Run Code Online (Sandbox Code Playgroud)
您可以将grid [x] [y]视为使用文本字符绘制的"图片"的x和y坐标处的字符.(0,0)原点将在左上角,x坐标向右增加,而w坐标增加向下.复制上一个网格值,并编写使用它来打印图像的代码.
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
Run Code Online (Sandbox Code Playgroud)
所以我已经编写了代码并且它完成了他要求的内容,但我认为它编写得非常糟糕,我想问你如何改进它.我的代码,
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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
newString = ''
for i in range(len(grid)):
newString += str(grid[i][0])
newString1 = '\n'
for i in range(len(grid)):
newString1 += str(grid[i][1])
newString2 = '\n'
for i in range(len(grid)):
newString2 += str(grid[i][2])
newString3 = '\n'
for i in range(len(grid)):
newString3 += str(grid[i][3])
newString4 = '\n'
for i in range(len(grid)):
newString4 += str(grid[i][4])
newString5 = '\n'
for i in range(len(grid)):
newString5 += str(grid[i][5])
print(newString+newString1+newString2+newString3+newString4+newString5)
Run Code Online (Sandbox Code Playgroud)
计划产出:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
Run Code Online (Sandbox Code Playgroud)
小智 18
我也是新手 - 仅使用本书所涵盖的内容,并记住循环提示中的循环,这是我的答案:
for j in range(len(grid[0])):
for i in range(len(grid)):
print(grid[i][j],end='')
print('')
Run Code Online (Sandbox Code Playgroud)
>>> print('\n'.join(map(''.join, zip(*grid))))
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
Run Code Online (Sandbox Code Playgroud)
的zip(*grid)有效转置矩阵(翻转它的主对角线),则每一行被接合到一个字符串,则该行被用换行接合,从而整个事情可以一次打印.
小智 5
解决这个问题的一种方法(根据书中的提示)是定义行和列。给定列表有 9 行(列表的元素)和 6 列(每个元素的长度)。
显然,问题就变成了——
a) 打印第 1 行的所有列值 b) 打印第 2 行的所有列值...等等
一旦我们预先测量了要打印的行数和列数,这种方法就可以“标准化”
以下程序说明了执行此操作的一种方法 -
# This program illustrates the character picture grid
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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
rows = len(grid) # Number of elements in the list
cols = len(grid[0]) # Number of elements in every single element in the list
for j in range(cols):
for i in range(rows):
print(grid[i][j], end='')
print()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18503 次 |
| 最近记录: |