1. 程式人生 > 其它 >c#列印乘法口訣_使用python實現九九乘法口訣表,使用這個語法,只需一行程式碼...

c#列印乘法口訣_使用python實現九九乘法口訣表,使用這個語法,只需一行程式碼...

技術標籤: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 ]
2a6f0e6fc977cedf3c0de2c4db294465.png

該表示式主要由三部分組成,分別是中間的迴圈體,迴圈體後的表示式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

接下來就是最關鍵的列印乘法口訣乘積的資訊,我們這裡先做個分析 ,在列印口訣的資訊中,其實有這麼兩種情況:

  1. 如果j<9的話,列印兩個數的乘積,再加個空格。print("{}×{}={}".format(i,j,j*i),end=" ") if j<9 ,說明:end=“ ”代表空格,如果沒有這個引數,預設為回車換行 。
  2. 如果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)]

通過執行以上這行程式碼,也可以實現上面的列印效果 。

同理,這個語法其實不僅僅是隻能實現以上需求,只要是迴圈的相關處理,其實都可以考慮使用它來進行實現 。