数字金字塔
这篇文章会介绍使用 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
微信扫码关注
抖音扫码关注