數字金字塔
這篇文章會介紹使用 Python 的for 迴圈、文字格式化和 if 判斷式,產生一個由數字序列組成的數字金字塔。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
基本原理
數字金字塔會按照「一定的規則」,產生一連串的數字,堆疊出金字塔的形狀,規則可能是等比級數、等差級數...等之類的數列,通常將數字大的放在下方,數字小的放在上方。
方法一、使用 for 迴圈
因為金字塔有兩層 ( 水平和垂直 ),所以會使用兩個 for 迴圈,接著使用「文字格式化」的方式,讓印出的文字進行對齊,就能產生漂亮的數字金字塔。
a = 10 # 要產生的金字塔層數
for i in range(1,a+1): # 使用 for 迴圈,重複 1~10 ( a+1 ) 的數字
print(' '*3*(a-i),end='') # 根據不同的層數,讓第一個數字前方增加指定的空白字元 ( 後方不換行 )
for j in range(1, i+1): # 第二層 for 迴圈,重複不同層內的數字
if j==1: # 如果是第一個數字
print(j, end='') # 單純印出數字即可 ( 後方不換行 )
else: # 如果是第二個以後的數字
print(f'{j:>3d}', end='') # 格式化數字,使其寬度為 3,並靠右對齊 ( 後方不換行 )
for j in range(i-1, 0, -1): # 剛剛的 for 迴圈是由小到大,加入另外一個由大到小的迴圈
print(f'{j:>3d}', end='') # 格式化數字,使其寬度為 3,並靠右對齊 ( 後方不換行 )
print('') # 最後執行換行的 print
運用同樣的原理,可以將數字金字塔進行變化,下方的例子,會改成 2 的幾次方作為金字塔的組成。
a = 10
for i in range(1,a+1):
print(' '*3*(a-i),end='')
for j in range(0, i): # ragne 改成從 0 開始,因為 2 的 0 次方等於 1
k = 2 ** j # 計算 2 的幾次方
if k==1:
print(k, end='')
else:
print(f'{k:>3d}', end='')
for j in range(i-2, -1, -1): # 修改 range,使其最後一位數為 0
k = 2 ** j # 計算 2 的幾次方
print(f'{k:>3d}', end='')
print('')
方法二、使用 while 迴圈
因為 for 迴圈可以做到,所以 while 迴圈也可以實現同樣的效果。
a = 10 # 要產生的金字塔層數
b = 1 # 提供 while 迴圈停止的依據
while b<=a: # 如果 b <= a 就讓 while 迴圈繼續
n = 1 # 設定從 1 開始
print(' '*3*(a-b),end='') # 根據不同的層數,讓第一個數字前方增加指定的空白字元 ( 後方不換行 )
while n<=b: # 第二層 while 迴圈,如果 n <= b 就讓 while 迴圈繼續
if n==1: # 如果是第一個數字
print(n, end='') # 單純印出數字即可 ( 後方不換行 )
else: # 如果是第二個以後的數字
print(f'{n:>3d}', end='') # 格式化數字,使其寬度為 3,並靠右對齊 ( 後方不換行 )
n = n + 1 # 將 n 增加 1
while n>2: # 剛剛的 while 迴圈是由小到大,加入另外一個由大到小的迴圈
print(f'{n-2:>3d}', end='') # 格式化數字,使其寬度為 3,並靠右對齊 ( 後方不換行 )
n = n - 1 # 將 n 減少 1
print('') # 最後執行換行的 print
b = b + 1 # 將 b 增加 1
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~