1 for j in range(1,10): 2 for i in range(1,j+1): 3 k = str(i) + '*' + str(j) + '=' + str(i*j) 4 print(k,end=' ') 5 print(' ') 6 ############################################## 7 1*1=1 8 1*2=2 2*2=4 9 1*3=3 2*3=6 3*3=9 10 1*4=4 2*4=8 3*4=12 4*4=16 11 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 12 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 13 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 14 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 15 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 for i in range(1,10): 2 line = '' 3 for j in range(1,i+1): 4 line += '{}*{}={:<2} '.format(j,i,i*j) 5 print(line) 6 ############################################# 7 E:python文件夹venvScriptspython.exe E:/python文件夹/jiujiu.py 8 1*1=1 9 1*2=2 2*2=4 10 1*3=3 2*3=6 3*3=9 11 1*4=4 2*4=8 3*4=12 4*4=16 12 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 13 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 14 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 15 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 16 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 17 18 Process finished with exit code 0
以上的两种方法都需要注意乘数i与被乘数j的边界问题,除此之外还需要注意打印出来的格式问题,要每行每列都相对应的对齐。
第二种方法里使用到了format函数,关于该函数的用法,详见Python的学习之路。{:<2},冒号是分隔符号,<表示左对齐,2表示宽度。
例子延伸:如何打印别的形状的九九乘法表。
1 for i in range(1,10): 2 line = '' 3 for j in range(i,10): 4 line += '{}*{}={:<2} '.format(i,j,i*j) 5 print(line) 6 ################################################# 7 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/ttt.py 8 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 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 10 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 11 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 12 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 13 6*6=36 6*7=42 6*8=48 6*9=54 14 7*7=49 7*8=56 7*9=63 15 8*8=64 8*9=72 16 9*9=81 17 18 Process finished with exit code
如上图所示,如果要打印该种类型的九九乘法表,那么需要考虑边界的问题。我们来看每一行的输出,当i=1时,j取值1~9;当i=2时,j取值2~9……那么规律出来了,j的取值是i~9,即代码第3行。
1 for i in range(1,10): 2 line = '' 3 for j in range(i,10): 4 line += '{}*{}={:<{}} '.format(i,j,i*j,2 if j < 4 else 3) 5 print('{:>80}'.format(line)) 6 ############################################ 7 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/ttt.py 8 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 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 10 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 11 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 12 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 13 6*6=36 6*7=42 6*8=48 6*9=54 14 7*7=49 7*8=56 7*9=63 15 8*8=64 8*9=72 16 9*9=81 17 18 Process finished with exit code 0
再看上图所示,如果是这个形状的九九乘法表,该如何实现呢?先看数值方面,和上上图的是完全一样,但是位置不一样。该图中是以每行为单位右边对齐的。怎么实现呢?在这里要使用format()函数,在j循环里面,一个整循环即为输出一行,那么我们以行为单位使用format()函数,即代码第5行,注意这里的print()是在j的for循环之外,在i的for循环之里。再来看看'{:>80}'.format(line),>表示右对齐,80这个参数是根据实际情况进行调节,一个{}对应一个对象,该处就一个对象line,因此需要一个{}。
然后还有一个问题,在第一个例子的输出结果里,列与列之间的间隔是不一样的,乘的结果为个位数之间与乘的结果为两位数之间的间隔是不一样的。这就是代码第4行存在的意义。'{}*{}={:<{}} '.format(i,j,i*j,2 if j < 4 else 3),来看看这行代码,看输出结果的规律,当j<4时,乘的结果为个位数;当j>=4时,乘的结果为两位数。以此为if判断语句,来调整间隔问题。这里要注意format()函数的用法,2 if j < 4 else 3在format()函数里是一个表达式,可以算作一个对象来使用。这里要注意,2是j<4的结果,3是j>=4的结果。因为默认的话,乘的结果为个位数之间与乘的结果为两位数之间的间隔是一样的,假设都为3个单位,但是乘的结果为两位数之间的间隔会显示占了2个单位(因为结果多占了1位),因此需要在乘的结果为个位数之间的间隔为n的时候,乘的结果为两位数之间的间隔需要为n+1。
'{}*{}={:<{}} '.format(i,j,i*j,2 if j < 4 else 3),这里还需要注意每个{}对应的对象,表达式所对应的{}所在的位置。