我是新手,现在正在写艾尔·斯威格的书。在第四章的练习中,他问了如下问题:
假设您有一个列表列表,其中内部列表中的每个值都是一个字符串,如下所示:
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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
可以将网格[x][y]看作是绘制的“图片”的x和y坐标处的字符 带有文本字符。(0,0)原点将在左上角 拐角处,x坐标向右增加,w y坐标上升向下。复制上一个网格值,然后 编写使用它打印图像的代码。
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
所以我已经写了代码,它做了他要求的,但我认为它写得很糟糕,我想问你我如何改进它。我的密码
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)
程序输出:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
zip(*grid)
有效地转置矩阵(在主对角线上翻转矩阵),然后将每一行连接成一个字符串,然后用换行符将这些行连接起来,这样就可以立即打印整个内容。我也是一个新手-只使用书中提到的内容,并记住循环中的循环提示,这是我的答案:
我有另一个简单的解决方案,与其他只用于循环的解决方案非常相似。但有一件事我似乎做了不同的是,我使用了两个增广运算符,一个在内部循环,一个在外部循环。我想在弄清楚我们的要求后会有用的。
打印报表输出:
如你所见,这是心脏网格的第一行。我们需要从0计数到len(网格[0]),这是第一个列表中的项目数,您也可以键入6。所以,我只需要两个操作员互相计数。空的print语句用于换行。如果不使用它,它会打印出同一行上的所有字符,或者每行上的每个字符。
解决方案:
输出:
相关问题 更多 >
编程相关推荐