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

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


每日分享

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)))

只有一行代码,简洁了很多。这全是列表推导式的功劳:

  1. [表达式for变量in列表]
  2. 或者
  3. [表达式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.普通使用版,类比之前的 %使用方式:

  1. a ='{} - {}'.format('小闫笔记','超赞')
  2. print(a)

输出结果为:

  1. 小闫笔记-超赞

2.指定位置,重复使用,不需要按顺序:

a = '姓名:{0}\n年龄:{2}岁\n姓名:{1}\n年龄:{2}岁'.format('小闫同学1','小闫同学2',18)
print(a)

\n是换行符,代表后面的语句换到下一行输出。

输出结果为:

  1. 姓名:小闫同学1
  2. 年龄:18
  3. 姓名:小闫同学2
  4. 年龄:18

可以看到18被重复使用了两次。

3.当你看到了可以使用下标取值,你一定会想可不可以使用关键字取值?当然可以!

a = '姓名:{name}\n年龄:{age}岁\n'.format(**{'name':'小闫同学','age':18})
print(a)

其中 **代表的是解包。

输出结果:

  1. 姓名:小闫同学
  2. 年龄:18

4.你看字典都能用了,那么列表呢?还可以!

a = '姓名:{0[0]}\n年龄:{0[1]}岁\n'.format(['小闫同学',18])
print(a)

输出结果:

  1. 姓名:小闫同学
  2. 年龄:18

也许你会有疑问:为什么取值的时候,取了两次,像 0[0],而不是 [0]直接取?那就是我们的format里面可以放多个列表。

a = '姓名:{1[0]}\n年龄:{1[1]}岁\n'.format(['小闫同学',18],['猪猪同学',18])
print(a)

输出结果为:

  1. 姓名:猪猪同学
  2. 年龄:18

5.你也许会问,那么 format可以像 %2d一样对数字位数做要求吗?当然可以。

print('{:2d}'.format(1))
print('11')

输出结果为:

1 # format
11 # 两位数输出

可以看出,确实进行了右对齐,占了两位。

6.数字格式化的格式就是: {}里面先写一个冒号,再写格式:

  1. 保留小数点后两位:{:.2f}
  2. 带符号保留小数点后两位:{:+.2f}
  3. 不带小数(四舍五入):{:.0f}
  4. 数字补零(填充左边,宽度为2):{:0>2d}
  5. 数字补x (填充右边,宽度为4):{:x<4d}
  6. 以逗号分隔的数字格式:{:,}
  7. 百分比格式:{:.2%}
  8. 指数记法:{:.2e}
  9. 右对齐(默认,宽度为10):{:10d}
  10. 左对齐(宽度为10):{:<10d}
  11. 中间对齐(宽度为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.    1
  2. 11111

我们可以看到一个 \t占了4个位。

结尾有话说

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

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

相关文章
|
2月前
使用 printf() 与 %d 格式化输出整数。
【10月更文挑战第12天】使用 printf() 与 %d 格式化输出整数。
39 2
QString格式化的几种用法:补零/进制转换/保留小数位等
QString格式化的几种用法:补零/进制转换/保留小数位等
2658 0
|
6月前
【题解】NowCoder BC149 简写单词
【题解】NowCoder BC149 简写单词
61 15
|
6月前
|
C++
【洛谷 B2025】输出字符菱形 题解(raw string literal)
使用`*`构建一个斜置的、对角线长度为5的菱形。无输入要求。输出示例:`*`、`***`、`*****`、`***`、` *`。代码实现使用C++,直接打印预定义字符串完成。
84 0
|
7月前
|
弹性计算 运维 Shell
打印9*9 乘法表
【4月更文挑战第29天】
56 1
MT2045 斐波那契,但是是字符串
MT2045 斐波那契,但是是字符串
华为机试HJ46:截取字符串
华为机试HJ46:截取字符串
HDOJ(HDU) 2106 decimal system(进制相互转换问题)
HDOJ(HDU) 2106 decimal system(进制相互转换问题)
92 0
|
前端开发 Windows
TimeSpan格式化字符串格式(摘)
原文:TimeSpan格式化字符串格式(摘) 一直在用DateTime, 却不常用TimeSpan , 今天突然用到了, 发现不知道咋做格式化...百度一下,找到了答案, 在这记录一下, 免得以后找花费时间 以下内容摘抄自 Microsoft Docs  原文地址: https://docs.
1352 0

热门文章

最新文章