python实现九九乘法表要求每列对齐_python3 第八章 – 完善九九乘法表

  • Post author:
  • Post category:python


前面我们在第四章的时候挖了个坑:怎么用优雅的方式来打印九九乘法表。这一章我们就来填上这个坑。

首先,我们再来看下九九乘法表是什么样子的

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

不难发现,有以下规律:

一共9行,最多9列

每一行,有和行数相等的列数

从上到下,分别是第1~9行;从左到右,分别是第1~9列

每一行,单元格里的内容是行号 乘以 列号,这是一个循环

我们先来输出,9行9列的每一个单元格

for row in range(1, 10):for column in range(1, 10):if column == 9:print(‘第’, row, ‘行第’, column, ‘列’)else:print(‘第’, row, ‘行第’, column, ‘列’, end=”)

以上代码,输出:

第 1 行第 1 列   第 1 行第 2 列   第 1 行第 3 列   第 1 行第 4 列   第 1 行第 5 列   第 1 行第 6 列   第 1 行第 7 列   第 1 行第 8 列   第 1 行第 9 列

第 2 行第 1 列   第 2 行第 2 列   第 2 行第 3 列   第 2 行第 4 列   第 2 行第 5 列   第 2 行第 6 列   第 2 行第 7 列   第 2 行第 8 列   第 2 行第 9 列

第 3 行第 1 列   第 3 行第 2 列   第 3 行第 3 列   第 3 行第 4 列   第 3 行第 5 列   第 3 行第 6 列   第 3 行第 7 列   第 3 行第 8 列   第 3 行第 9 列

第 4 行第 1 列   第 4 行第 2 列   第 4 行第 3 列   第 4 行第 4 列   第 4 行第 5 列   第 4 行第 6 列   第 4 行第 7 列   第 4 行第 8 列   第 4 行第 9 列

第 5 行第 1 列   第 5 行第 2 列   第 5 行第 3 列   第 5 行第 4 列   第 5 行第 5 列   第 5 行第 6 列   第 5 行第 7 列   第 5 行第 8 列   第 5 行第 9 列

第 6 行第 1 列   第 6 行第 2 列   第 6 行第 3 列   第 6 行第 4 列   第 6 行第 5 列   第 6 行第 6 列   第 6 行第 7 列   第 6 行第 8 列   第 6 行第 9 列

第 7 行第 1 列   第 7 行第 2 列   第 7 行第 3 列   第 7 行第 4 列   第 7 行第 5 列   第 7 行第 6 列   第 7 行第 7 列   第 7 行第 8 列   第 7 行第 9 列

第 8 行第 1 列   第 8 行第 2 列   第 8 行第 3 列   第 8 行第 4 列   第 8 行第 5 列   第 8 行第 6 列   第 8 行第 7 列   第 8 行第 8 列   第 8 行第 9 列

第 9 行第 1 列   第 9 行第 2 列   第 9 行第 3 列   第 9 行第 4 列   第 9 行第 5 列   第 9 行第 6 列   第 9 行第 7 列   第 9 行第 8 列   第 9 行第 9 列

实际上,这并没有达到我们想要的效果,因为九九乘法表是第一行只有一列,往下是每行增加一列,我们修改程序:

for row in range(1, 10):

maxColumn= row + 1

for column in range(1, maxColumn):if column ==row:print(‘第’, row, ‘行第’, column, ‘列’)else:print(‘第’, row, ‘行第’, column, ‘列’, end=”)

以上代码,输出:

第 1 行第 1列

第2 行第 1 列 第 2 行第 2列

第3 行第 1 列 第 3 行第 2 列 第 3 行第 3列

第4 行第 1 列 第 4 行第 2 列 第 4 行第 3 列 第 4 行第 4列

第5 行第 1 列 第 5 行第 2 列 第 5 行第 3 列 第 5 行第 4 列 第 5 行第 5列

第6 行第 1 列 第 6 行第 2 列 第 6 行第 3 列 第 6 行第 4 列 第 6 行第 5 列 第 6 行第 6列

第7 行第 1 列 第 7 行第 2 列 第 7 行第 3 列 第 7 行第 4 列 第 7 行第 5 列 第 7 行第 6 列 第 7 行第 7列

第8 行第 1 列 第 8 行第 2 列 第 8 行第 3 列 第 8 行第 4 列 第 8 行第 5 列 第 8 行第 6 列 第 8 行第 7 列 第 8 行第 8列

第9 行第 1 列 第 9 行第 2 列 第 9 行第 3 列 第 9 行第 4 列 第 9 行第 5 列 第 9 行第 6 列 第 9 行第 7 列 第 9 行第 8 列 第 9 行第 9 列

到了这里,我们发现已经形式了,我们只要把每个单元格上的计算填充上去就OK啦

for row in range(1, 10):

maxColumn= row + 1

for column in range(1, maxColumn):if column ==row:print(column, ‘x’, row, ‘=’, column * row, ‘ ‘)else:print(column, ‘x’, row, ‘=’, column * row, ‘ ‘, end=”)

以上代码,输出:

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

至此,大功告成。

思考1:如果程序里只允许你出现一次print(),程序要怎么写?下面给出答案,但请尽量在自己写出来之前不要查看

for row in range(1, 10):

maxColumn= row + 1

for column in range(1, maxColumn):

endString= ‘ ‘ #结束符

if column ==row:

endString= ‘\n’ #以换行结束

print(column, ‘x’, row, ‘=’, column * row, ‘ ‘, end=endString)

View Code

思考2:可以看出来,上面的程序输出来的九九乘法表,有些列,上下是没有对齐的,怎么对齐?下面给出答案,但请尽量在自己写出来之前不要查看

for row in range(1, 10):

maxColumn= row + 1

for column in range(1, maxColumn):

endString= ‘ ‘ #结束符

splitString = ‘ ‘ #积和等号之间的分隔符,默认是空格

num = column * row #乘积

if num > 9:

splitString= ”

if column ==row:

endString= ‘\n’ #以换行结束

print(column, ‘x’, row, ‘=’, splitString, num, ‘ ‘, end=endString)

View Code

思考3:如何把乘法表倒着输出?下面给出答案,但请尽量在自己写出来之前不要查看

rowsCount = 9 #最大行

while rowsCount >0:

maxColumn= rowsCount + 1

for column in range(1, maxColumn):

endString= ‘ ‘ #结束符

splitString = ‘ ‘ #积和等号之间的分隔符,默认是空格

num = column * rowsCount #乘积

if num > 9:

splitString= ”

if column ==rowsCount:

endString= ‘\n’ #以换行结束

print(column, ‘x’, rowsCount, ‘=’, splitString, num, ‘ ‘, end=endString)

rowsCount-= 1

View Code