标签:one inf 重要 else alt 转换 地方 pre 变异
先来看一个九九乘法表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
分析:
打印一般是一行一行的打印,把上边的乘法表分解成一行行的数据,观察这一行行的数据的规律,如第三行数据1*3=3 2*3=6 3*3=9
,3这个乘数不变,被乘数分别为1,2,3
,转换为程序这里可以使用两个for循环实现,外层循环实现乘数,内层循环实现被乘数。
for i in range(1, 10):
for j in range(1, i + 1):
print(str(j) + ‘*‘ + str(i) + ‘=‘ + str(j*i), end=‘ ‘) # 需要改变print的默认换行为空格
print() # 一行数据打印完成后换行
另一种思路,两层都循环9次,在打印时控制输出
for i in range(1, 10):
for j in range(1, 10):
if j <= i:
print(str(j) + ‘*‘ + str(i) + ‘=‘ + str(j*i), end=‘ ‘)
print()
以上两种方案都能打印出九九乘法表,但乘积为两位数时就无法对齐输出,可以使用format
函数让输出对齐
for i in range(1, 10):
for j in range(1, i + 1):
print(‘{0}+{1}={2:<4}‘.format(str(j), str(i), str(j * i)), end=‘‘) # 使用format左对齐时print的end=‘‘是否需要有一个空格就不重要了
print()
九九乘法表的另一种输出形式
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
for i in range(1, 10):
for j in range(i, 10):
print(‘{0}*{1}={2:<4}‘.format(str(i), str(j), str(i * j)), end=‘‘)
print()
如果想输出的格式如下
分析:
要点是想办法填充空白的地方,如果把空白的地方也填充出来
for i in range(1, 10):
for j in range(1, 10):
print(‘{0}*{1}={2:<4}‘.format(str(i), str(j), str(i*j)), end=‘‘)
print()
输出如下
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
在输出数据中从左上角到右下角划一条对角线后,右边部分就是我们所要的数据,而左边部分就得想办法使用空格来填充,对角线的右边部分都是j>=i
,左边部分为j<i
的部分需要被替换为空格,调整后代码如下
line = ‘{0} {1} {2:<4}‘.format(‘ ‘, ‘ ‘, ‘ ‘) # 空白填充
for i in range(1, 10):
for j in range(1, 10):
if j < i: # 条件成立时打印空白字符
print(line, end=‘‘)
else:
print(‘{0}+{1}={2:<4}‘.format(str(i), str(j), str(i*j)), end=‘‘)
print()
如果只是打印出九九乘法表中的所有项,那可直接使用如下列表解析式
>>> [‘{0}*{1}={2}‘.format(j, i, i*j) for i in range(1, 10) for j in range(1, 10) if j <= i]
[‘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‘]
>>>
如果要以九九乘法表的格式输出,参考如下:
>>> lst = [[‘{0}*{1}={2:<3}‘.format(j, i, j*i) for j in range(1, i+1)] for i in range(1, 10)]
>>> for i in lst:
... print(‘‘.join(i))
...
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
[[‘{0}*{1}={2:<3}‘.format(j, i, j*i) for j in range(1, i+1)] for i in range(1, 10)]
列表解析式中嵌套了一个列表解析式,[‘{0}*{1}={2:<3}‘.format(j, i, j*i) for j in range(1, i+1)]
是为了凑九九乘法表的每一行。
lst = [[‘{0}*{1}={2:<3}‘.format(j, i, j*i) for j in range(1, 10) if j <= i] for i in range(1, 10)]
与上边是同等的效果。
再来看一个终极方案
>>> [print(‘{0}*{1}={2:<4}{3}‘.format(j, i, j*i, ‘‘ if j<i else ‘\n‘), end=‘‘) for i in range(1, 10) for j in range(1, i+1)]
>>> [print(‘{0}*{1}={2:<4}{3}‘.format(j, i, j*i, ‘\n‘ if j == i else ‘‘), end=‘‘) for i in range(1, 10) for j in range(1, i+1)]
# 上边两种列表解析都输出
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
Out[115]: # 输出许多None是因为print函数的返回值是None
[None,
None,
None,
None,
...
None]
标签:one inf 重要 else alt 转换 地方 pre 变异
原文地址:https://blog.51cto.com/zhaochj/2526321