c#列印乘法口訣_使用python實現九九乘法口訣表,使用這個語法,只需一行程式碼...
阿新 • • 發佈:2021-01-02
技術標籤:c#列印乘法口訣
有一次去面試,被問到了九九乘法口訣用程式碼如何實現 ?雖然當時已經做了出來,但是後來才知道,其實有更簡單的方法,只需一行程式碼就可以實現 。
那麼我們先來看下普通的實現方式,就是做個巢狀迴圈,然後列印兩個數的乘積資訊 。
for i in range(1,10): for j in range(i,10): print("{}×{}={}".format(i,j,j*i),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
直到遇到了python的這個語法,才知道很多程式碼可以寫的更加簡潔,這個語法就是使用python的列表推導式。它可以將一個序列構建成另外一個新列表的結構體 。
語法格式如下:
[ expB for x in iterable expA ]
該表示式主要由三部分組成,分別是中間的迴圈體,迴圈體後的表示式A,迴圈體前的對x運算的表示式B。
- for x in iterable : 迴圈的是一個序列,包括字典,元組,字串以及range()方法等。此迴圈體是最先被執行的。
- expA:主要是由if語句或for語句構成,如果是if語句,一般是將x進行條件篩選,符合條件的傳遞給expB參與運算,如果是for迴圈,那就是雙層巢狀迴圈,這裡需要注意的是,後面的for迴圈是內層迴圈體 。當然該表示式也可以省略 。
- expB:主要是對for迴圈中的x進行的最後的運算,可以是+,-,*,%,|,條件判斷以及各種方法等 。
比如,我們要實現這樣一個功能,1~5內的數,遇到雙數+1,遇到單數-1,返回一個新列表,通過列表推導式就可以這樣寫
print([x+1 if x % 2 ==0 else x-1 for x in range(1,6)])#輸出 : [0, 3, 2, 5, 4]
以上if條件為真,返回if前面的值,否則返回else後面的值。
知道以上這個原理後,我們就拿這個語法來實現下九九乘法口訣。首先我們知道它是兩層巢狀迴圈 。所以,後面的部分就很好實現,具體如下:
for i in range(1,10) for j in range(i,10)
以上這句話的程式碼就等同於如下程式碼,寫了個巢狀迴圈,但是迴圈內沒有實際內容。
for i in range(1,10): for j in range(i,10): pass
接下來就是最關鍵的列印乘法口訣乘積的資訊,我們這裡先做個分析 ,在列印口訣的資訊中,其實有這麼兩種情況:
- 如果j<9的話,列印兩個數的乘積,再加個空格。print("{}×{}={}".format(i,j,j*i),end=" ") if j<9 ,說明:end=“ ”代表空格,如果沒有這個引數,預設為回車換行 。
- 如果j=9的話,列印兩個數的乘積,再加回車換行。else print("{}×{}={}".format(i,j,j*i))
把以上兩種情況連線起來就是以下一句完整的程式碼,具體如下:
[ print("{}×{}={}".format(i,j,j*i),end=" ") if j<9 else print("{}×{}={}".format(i,j,j*i)) for i in range(1,10) for j in range(i,10)]
通過執行以上這行程式碼,也可以實現上面的列印效果 。
同理,這個語法其實不僅僅是隻能實現以上需求,只要是迴圈的相關處理,其實都可以考慮使用它來進行實現 。