打印九九乘法表

先來看一個九九乘法表ide

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循環實現,外層循環實現乘數,內層循環實現被乘數。code

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次,在打印時控制輸出orm

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函數讓輸出對齊blog

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

變異格式

九九乘法表的另外一種輸出形式it

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循環

打印九九乘法表

分析:form

要點是想辦法填充空白的地方,若是把空白的地方也填充出來class

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&gt;=i,左邊部分爲j&lt;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:&lt;3}'.format(j, i, j*i) for j in range(1, i+1)] for i in range(1, 10)]列表解析式中嵌套了一個列表解析式,['{0}*{1}={2:&lt;3}'.format(j, i, j*i) for j in range(1, i+1)]是爲了湊九九乘法表的每一行。

lst = [['{0}*{1}={2:&lt;3}'.format(j, i, j*i) for j in range(1, 10) if j &lt;= 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]
相關文章
相關標籤/搜索