优雅的99乘法表以及format使用

正文共: 3135 字 5 图 预计阅读时间: 8 分钟

每日分享

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个位。

结尾有话说

希望大家可以学习一种思想,就是 对比实验法,就像上面每次需要验证的地方我会进行类比,输出两个结果,进行比较从而得出结论。很简单,但是很有效。

因为我之前的专业是高分子材料与工程,化工材料类的专业,后来又在校有科研方面的经历,需要每天进行大量的实验。所以之前的一些思想根深蒂固。行业不同,思想相同。希望对大家有所帮助吧。

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍