每日分享
You are never too old to set another goal or to dream a new dream.
你永远不会老到不能设定另一个目标或拥有一个新的梦想。
小闫语录:
也许你想学习英语,但是转念一想,自己都这么大了,再学也学不会了,算了。也许你想考个学历,但是转念一想,都工作这么多年了,太晚了,算了。也许你想考个职业证书,但是一想,每天这么忙,算了。然后你的生活就这样,算了。其实做一件事最佳的时间就是现在!不要受什么乱七八糟的毒鸡汤的影响,你要相信,你下定决心开始的那一刻,永远不晚。不要自我设限,你的潜力超乎你的想象,大器晚成的例子比比皆是,不要得过且过,哪怕是咸鱼,也要做一条有理想的咸鱼。
优雅的99乘法表以及format使用
注:本文使用的python版本为3.6.4。
首先我们来一个普通版的99乘法表:
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
是占位符。代表位数为两位的数字,如果只有一位数,那么占两位,向右对齐。
将其输出,呈现下面的效果:
1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
再来个进阶版的99乘法表:
print('\n'.join('\t'.join(['{} x {} = {}'.format(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)))
只有一行代码,简洁了很多。这全是列表推导式的功劳:
[表达式for变量in列表]
或者
[表达式for变量in列表if条件]
难以理解吗?那么我们将进阶版的99乘法表还原成普通版:
for i in range(1,10): for j in range(1,i+1): print('{} x {} = {}\t'.format(j,i,i*j),end='') print()
同样,我们对其输出一下,两个输出结果相同,我们只贴一个效果即可:
1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
进阶版里面不光涉及到了列表推导式,还有几个零散的知识点,我们来学习一下:
format
用做字符串的格式化,比之前的占位符 %
这一类要灵活的多。
特点
1.不需要像占位符 %d
、 %s
、 %f
等等区分数据类型,直接使用 {}
即可。
2.单个参数可以多次输出,参数顺序也可以不同。
3.官方推荐,必属精品。
使用
1.普通使用版,类比之前的 %
使用方式:
a ='{} - {}'.format('小闫笔记','超赞')
print(a)
输出结果为:
小闫笔记-超赞
2.指定位置,重复使用,不需要按顺序:
a = '姓名:{0}\n年龄:{2}岁\n姓名:{1}\n年龄:{2}岁'.format('小闫同学1','小闫同学2',18) print(a)
\n
是换行符,代表后面的语句换到下一行输出。
输出结果为:
姓名:小闫同学1
年龄:18岁
姓名:小闫同学2
年龄:18岁
可以看到18被重复使用了两次。
3.当你看到了可以使用下标取值,你一定会想可不可以使用关键字取值?当然可以!
a = '姓名:{name}\n年龄:{age}岁\n'.format(**{'name':'小闫同学','age':18}) print(a)
其中
**
代表的是解包。
输出结果:
姓名:小闫同学
年龄:18岁
4.你看字典都能用了,那么列表呢?还可以!
a = '姓名:{0[0]}\n年龄:{0[1]}岁\n'.format(['小闫同学',18]) print(a)
输出结果:
姓名:小闫同学
年龄:18岁
也许你会有疑问:为什么取值的时候,取了两次,像
0[0]
,而不是[0]
直接取?那就是我们的format里面可以放多个列表。a = '姓名:{1[0]}\n年龄:{1[1]}岁\n'.format(['小闫同学',18],['猪猪同学',18]) print(a)输出结果为:
姓名:猪猪同学
年龄:18岁
5.你也许会问,那么 format
可以像 %2d
一样对数字位数做要求吗?当然可以。
print('{:2d}'.format(1)) print('11')
输出结果为:
1 # format 11 # 两位数输出
可以看出,确实进行了右对齐,占了两位。
6.数字格式化的格式就是: {}
里面先写一个冒号,再写格式:
保留小数点后两位:{:.2f}
带符号保留小数点后两位:{:+.2f}
不带小数(四舍五入):{:.0f}
数字补零(填充左边,宽度为2):{:0>2d}
数字补x (填充右边,宽度为4):{:x<4d}
以逗号分隔的数字格式:{:,}
百分比格式:{:.2%}
指数记法:{:.2e}
右对齐(默认,宽度为10):{:10d}
左对齐(宽度为10):{:<10d}
中间对齐(宽度为10):{:^10d}
^, <, > 分别是居中、左对齐、右对齐,后面带宽度,
: 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
7.还有最最高级的用法,进制转换:
'{:b}'.format(11) 1011 二进制 '{:d}'.format(11) 11 十进制 '{:o}'.format(11) 13 八进制 '{:x}'.format(11) b 十六进制 '{:#x}'.format(11) 0xb 十六进制 '{:#X}'.format(11) 0XB 十六进制
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
\t
\t
代表的是tab键,也就是4个空格。我们可以来验证一下:
print('\t1') print('11111')
输出结果为:
1
11111
我们可以看到一个 \t
占了4个位。
结尾有话说
希望大家可以学习一种思想,就是 对比实验法
,就像上面每次需要验证的地方我会进行类比,输出两个结果,进行比较从而得出结论。很简单,但是很有效。
因为我之前的专业是高分子材料与工程,化工材料类的专业,后来又在校有科研方面的经历,需要每天进行大量的实验。所以之前的一些思想根深蒂固。行业不同,思想相同。希望对大家有所帮助吧。