python3 第八章,python3
前面我們在第四章的時候挖了個坑:怎麼用優雅的方式來列印九九乘法表。這一章我們就來填上這個坑。
首先,我們再來看下九九乘法表是什麼樣子的
1 x 1 = 11 x 2 = 2 2 x 2 = 41 x 3 = 3 2 x 3 = 6 3 x 3 = 91 x 4 = 4 2 x 4 = 8 3 x 4 =12 4 x 4 =161 x 5 = 5 2 x 5 =10 3 x 5 =15 4 x 5 =20 5 x 5 =251 x 6 = 6 2 x 6 =12 3 x 6 =18 4 x 6 =24 5 x 6 =30 6 x 6 =361 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 =491 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 =641 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