前天晚上写了一篇编码打印九九乘法表的记录,然后昨天学到了第八关,发现里面也用了九九乘法表的例子,而且两个循环都用了for循环。我反思了一下发现自己对循环的用法还是不够灵活:虽然各行的内部循环数不一样,但是有规律就行呀,有规律就可以用形参来表示循环次数,外部的循环会给变化中的形参赋值。
先不看标准答案的最后代码,我先对昨天自己的代码修改一下。如下,现在只要五行就行了:
#代码6
for row in range(9):
row+=1
for column in range(1,row+1):
print(str(column)+'*'+str(row)+'='+"{:<2d}".format(row*column)+' ', end="")#第四行是缩进8格的但发出来缩进被取消
print()
而且课堂上提到可以用格式符%d。这个我在第七关的时候已经学到了,但是我却没想到去用。我现在来对上面这段代码做个有%d的修改:
#代码7
for row in range(9):
row+=1
for column in range(1,row+1):
print('%d*%d='%(column,row)+"{:<2d}".format(row*column)+' ', end="")
print()
而且前两行的:
for row in range(9):
row+=1
可以换成一行:
for row in range(1,10):
就是:
#代码8
for row in range(1,10):
for column in range(1,row+1):
print('%d*%d='%(column,row)+"{:<2d}".format(row*column)+' ', end="")
print()
啊变成了四行。我之前写的代码也忒不简洁了。
现在我来看看最终答案,是这样的。
#代码9
for i in range(1,10):
for j in range(1,i+1):
print( '%d X %d = %d' % (j,i,i*j),end = ' ' )
print('')
答案里没有用*号,直接用了一个X来表示乘号,确实更符合我们平时看到的乘法式的样子。而且他把乘积也用格式符塞进去了,挺简洁,不过跟我的代码一对比能看出答案忽略了一个小问题:有两列没有对齐。而且print里面加了引号,这是没有必要的。
运行结果是这样的:
老师的代码第三列开始就不齐了。
如果想用三个%d,又想让乘积占两位并且左对齐,应该怎么做呢,有没有办法呢?我印象中好像之前在网上搜知识的时候顺便看到过%这个符号有很多丰富的用法,但我现在想不起来了。
我在网上反复搜了各种关键词,最后终于用“%d 结果对齐 Python”这一串关键词搜到了相关文章,原来%号的用法这么丰富,但是这些文章还是感觉太笼统,有点摸不到头脑。然后我又搜了其他相关词,查看了多个文章,最后在一篇名为《python中%d %2d %02d %-2d% %.2d的区别》的博客里看懂了这些操作,原来%-2d可以将数字按宽度为2,采用左对齐方式输出,若数据位数不到2位,则右边补空格。我试试用这个改一下老师的代码:
#代码10
for i in range(1,10):
for j in range(1,i+1):
print( '%d X %d = %-2d' % (j,i,i*j),end = ' ' )
print()
哇 搞定,结果完美。
(上面的%-2d还可以换成%2d,那就是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格。还可以换成%-3d,那就是将数字按宽度为3,采用左对齐方式输出,若数据位数不到3位,则右边补空格。依此类推,宽度占位和对齐方向都可以改。)