php语言输出九九乘法表_用Python编一个九九乘法表(续)

dc31326442314956b850594661683fca.png

前天晚上写了一篇编码打印九九乘法表的记录,然后昨天学到了第八关,发现里面也用了九九乘法表的例子,而且两个循环都用了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里面加了引号,这是没有必要的。

运行结果是这样的:

1e4c3db845be3ceef2c0d25613a28d64.png

老师的代码第三列开始就不齐了。

如果想用三个%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位,则右边补空格。依此类推,宽度占位和对齐方向都可以改。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值