思路如下:
(1)先打印一個星號並換行
print("*")
(2)打印一行6個星號
for i in range(6): print("*", end=" ")
(3)打印6列星號
for i in range(6): print("*")
(4)打印6行6列
for i in range(6): for j in range(6): print("*",end=" ")
# 每打印一行就換行 print()
(5)金字塔型是由下面圖形轉成的,先打印此圖形
控制內層循環的打印。觀察上圖,發現如下規律:
則讓內層循環 j<=i,就可以實現。i 控制行數,j 控制列數。比如:當 i=0 時,內層循環1次,j=0,j<=i,當 j++ 時,就跳出內層循環;當 i=1 時,內存循環2次,j=0 和 j=1 的情況,當 j=1,j++,則 j=2,j<=i 則不成立,跳出內存循環。以此類推。
for i in range(6): for j in range(i+1): print("*",end=" ") print()
(6)當 j<i,那么每行少一個星號,則第一行會被抹掉,如下圖所示:
for i in range(6): for j in range(i): print("*",end=" ") print()
(7)空格和星號相結合的情況,完整金字塔就是被空格頂過去的。
打印6個空格,后跟星號
for i in range(6): print(" ", end=" ") print("*")
每行5個空格,后跟一個星號
for i in range(6): for k in range(5): print(" ", end=" ") print("*")
有了以上的基礎,下面分析打印完整金字塔型:
(8)根據下圖所示,我們已經可以打印出左邊的圖形,然后通過控制空格,把它轉成右邊的圖形。
觀察后發現如下規律,右邊圖形相對於左邊的圖形。行數仍然是6行,即 i=6,先不考慮空格的問題,每一行星星的個數,如下所示:
可以得出:j<=(2*i)。當i=0時,j=0,打印一個星號,必須j<=,參考上面的講解;當i=1時,j=2,因為是j<=i,j取值0,1,2,循環三次,打印3個星號。以此類推。
for i in range(6): for j in range(2*i+1): print("*",end=" ") print()
(9)在(8)的基礎上,插入空格。對比發現,如下規律:
再加一層內循環,在星號內循環的前面,先打印空格,然后再打印相應的星號。
可以得出:k<6-i-1;當 i=0 時,k<5,k取值0,1,2,3,4,循環5次,打印5個空格。依次類推。
for i in range(6): for k in range(5-i): print(" ",end=" ") for j in range(2*i+1): print("*", end=" ") print()
(10)菱形的上半部分已經打印出,下面考慮如何打印下半部分,最上面的11個星號,已經在上半部分給出,只考慮打印11個星號以下的圖形。如圖:
觀察發現,下半部分共5行,即 i=5 。有如下的規律,如下圖所示:
空格內存循環,k<i+1,星號內層循環,m<(9-3*i)+i。
(9-3*i)+i,是如何得出?通過數學歸納法,發現:
for i in range(5): for k in range(i+1): print(" ", end=" ") for m in range((9-3*i)+i): print("*",end=" ") print()
(11)完整的菱形,通過(10)和(11),我們已經可以打印出完整的菱形。
for i in range(6): for k in range(5-i): print(" ",end=" ") for j in range(2*i+1): print("*", end=" ") print() for i in range(5): for k in range(i+1): print(" ", end=" ") for m in range((9-3*i)+i): print("*",end=" ") print()