《python编程快速上手——让繁琐的工作自动化》,4.10.2字符图网格自己编写错误总结

``基于python3,题目见教材
这是最开始的思路👇,但是输出结果总时多出一行

def common(grid):
    for y in range(len(grid[0])):
        for x in range(len(grid)-1):
            print(grid[x][y],end='')
        print(grid[-1][y])
    print(grid[x][y])
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','.','.','.'],
      ['.','.','.','.','.','.']]
common(grid)

输出:

..oo.oo..
.ooooooo.
.ooooooo.
..ooooo..
...ooo...
....o....
.       #这里总是多出一行

最开始的错误,在于忽略了for 函数的特性,认为x=8,y=0时不会自动换行,因此出现错误。
实际情况:
第一次展开:y=0:x分别为0,1,2,3,4,5,6,7,8,这里面由于end=‘’的存在,一直不会换行,直到x=8,第一轮y=0结束
y=0结束后,下面👇for关于x的函数已经结束,进入下一轮y函数(即y=1),如此循环。

        for x in range(len(grid)-1):
            print(grid[x][y],end='')

修正后如下:

def common(grid):
    for y in range(len(grid[0])):
        for x in range(len(grid)):
            print(grid[x][y],end='')
        print(grid[x][y])
 
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','.','.','.'],
      ['.','.','.','.','.','.']]
common(grid)

输出结果如下:

..oo.oo...
.ooooooo..
.ooooooo..
..ooooo...
...ooo....
....o.....

至于第一次错误的输出里,知道编程思路错在哪了,但还是不清楚为啥会多输出一行,还在研究中,欢迎各位大佬指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值