【Python】学习笔记:九九乘法表

# 九九乘法表
for i in range(1, 10):
    for j in range(1, i+1):
        print('{}x{}={}\t'.format(j, i, i*j), end='')
    print()

△代码来源:菜鸟教程-九九乘法表 https://www.runoob.com/python3/python3-99-table.html

执行以上代码输出结果为:
1x1=1    
1x2=2    2x2=4    
1x3=3    2x3=6    3x3=9    
1x4=4    2x4=8    3x4=12    4x4=16    
1x5=5    2x5=10    3x5=15    4x5=20    5x5=25    
1x6=6    2x6=12    3x6=18    4x6=24    5x6=30    6x6=36    
1x7=7    2x7=14    3x7=21    4x7=28    5x7=35    6x7=42    7x7=49    
1x8=8    2x8=16    3x8=24    4x8=32    5x8=40    6x8=48    7x8=56    8x8=64    
1x9=9    2x9=18    3x9=27    4x9=36    5x9=45    6x9=54    7x9=63    8x9=72    9x9=81

 

知识点:range()函数

关于range()函数有一点想特别留意一下:

>>>range(10)        # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1,10)     # 从 1 开始到 9
[1, 2, 3, 4, 5, 6, 7, 8, 9]

range()函数返回的结果是一个整数序列的对象,而不是列表。

>>> type(range(10))
<class 'range'>
 

编译环境 https://c.runoob.com/compile/6

图中的 重点 是 Retrun a list .......所以,range()返回的[]并不是列表,但我们可以利用list()函数返回列表:

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

知识点:end=' '

在 九九乘法表 的例子下面“官方”是这样解释的:通过指定end参数的值,可以取消在末尾输出回车符,实现不换行。

换言之,就是末尾end传递一个空字符串,这样print函数不会在字符串末尾添加一个换行符,而是添加一个空字符串,其实这也是一个语法要求,表示这个语句没结束。毕竟在print()函数里默认的是end='\n'。

所以,end=''用在print()里就会起到这样的效果:末尾不换行,加空格。

只不过需要特别注意的是,这个规则好像只适用于python3,python2好像并没有提出这一点。

 

扩展:关于 九九乘法表 解题过程中某些令人“眼前一亮”的思路

#!/usr/bin/python3

class multiplicationTable():
    def paint(self,n=9): 
        for row in range(1,n+1):  
            for col in range(1,row+1):
                print("{1}x{0}={2}\t".format(row , col , row*col),end='')
            print();

table = multiplicationTable()
table.paint()
#table.paint(10) #打印 "10x10" 的乘法表

△老陌觉得这里有一个地方写得挺出彩的!在定义paint()函数的时候用到了(self,n=9)这相当于默认了“九九乘法表”,但是最后可以通过调用table.paint(n)来改变乘法表的范围,这样就有了“封装”的思维在里面,是个很不错的想法!

# 九九乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        if i == j:
            print('{1}×{0}={2}'.format(i, j, i * j))
        else:
            print('{1}×{0}={2}'.format(i, j, i * j), end='\t')
# 有效去除每一行的最后一个空格

△这里基本的解题思路并没有改变,但是对于平方的那个乘积做了一点格式上的调整:去除了每一行的最后一个\t, 分类讨论 的想法让这个程序更加“精炼”了,而这个思路同样让人眼前一亮!

for i in range(1,10):
    for j in range(1,i+1):
        print "%dx%d=%d" % (j,i,j*i),
    print

△这里主要用到的是print()中的占位符,和{}的写法其实异曲同工,在此不再赘述,只是想特别强调一下这段代码在两个print中间是有一个“,”的,老陌对此的理解是print默认的是end='\n',加一个逗号就变成了空格。遍历完了j再去做下面的print就相当于是一个换行:即,遍历完了j之后进入外层的i的循环。

p.s.这里的理解可能比较片面,如有想法欢迎下方留言一起交流呀~

总之,逗号在print()里的写法也挺有“技巧”的,值得记录下来。

>>> print '\n'.join(['\t'.join(['%d * %d = %d'%(y,x,x*y) for y in range(1,x+1)])for x in range(1,10)])
1 * 1 = 1
1 * 2 = 2    2 * 2 = 4
1 * 3 = 3    2 * 3 = 6    3 * 3 = 9
1 * 4 = 4    2 * 4 = 8    3 * 4 = 12    4 * 4 = 16
1 * 5 = 5    2 * 5 = 10    3 * 5 = 15    4 * 5 = 20    5 * 5 = 25
1 * 6 = 6    2 * 6 = 12    3 * 6 = 18    4 * 6 = 24    5 * 6 = 30    6 * 6 = 36
1 * 7 = 7    2 * 7 = 14    3 * 7 = 21    4 * 7 = 28    5 * 7 = 35    6 * 7 = 42    7 * 7 = 49
1 * 8 = 8    2 * 8 = 16    3 * 8 = 24    4 * 8 = 32    5 * 8 = 40    6 * 8 = 48    7 * 8 = 56    8 * 8 = 64
1 * 9 = 9    2 * 9 = 18    3 * 9 = 27    4 * 9 = 36    5 * 9 = 45    6 * 9 = 54    7 * 9 = 63    8 * 9 = 72    9 * 9 = 81

△这一段利用的是两个join()函数的嵌套,其中join()函数的语法:

  'sep'.join(seq)

参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

返回值:返回一个以分隔符sep连接各个元素后生成的字符串

具体解题思路其实和上面几个大同小异,单独列出来是想再次复习一下python的代码风格:后面跟着的两个for循环其实是从内往外层写的,有别于正序的从外往内写的双层循环。

for 行 in range(1,10):
    for 列 in range(1,行+1):  # 内循环中,确保列 <= 行。
        print("{}*{}={}\t".format(列,行,列*行),end="")   # 确保同一行内容连续
    print()     # 另起一行!!!

input() # 防止程序一闪而过,不在编译器中也能使用

△这个解题思路其实也没什么变化,重点在于python中可以使用中文变量,这一点对于习惯使用中文的程序员而言算是比较友好的(对于从易语言转战python的码农而言也算是 python 的一个挺好的特性)。

 

参考资料:

菜鸟教程-range()函数用法 https://www.runoob.com/python/python-func-range.html

关于python中end函数的使用 https://blog.csdn.net/zhukerong0712/article/details/83750079

python中类似print(’*‘,end='')问题 https://blog.csdn.net/xuekunshan_/article/details/80451009

菜鸟教程-join()方法 https://www.runoob.com/python/att-string-join.html

python中join()函数的用法 https://www.cnblogs.com/jsplyy/p/5634640.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值