天天看點

循環嵌套列印三角形星星陣 | Python從入門到開發:入門篇之十七循環嵌套

先來回顧一下上節課講過的while語句的循環方式以及它的實際應用。 第十六節:while語句習題課 下面就跟着老師一起來走進循環的“高階”版本吧~

循環嵌套

按照數學老師的慣例,講授新知識之前先來看一道例題:

在控制台中列印如下圖形:

列印一個5*5的星星陣。有同學就會想到,寫五個輸出語句就好啦:

print('* * * * *')
print('* * * * *')
print('* * * * *')
print('* * * * *')
print('* * * * *')           

執行結果如下:

循環嵌套列印三角形星星陣 | Python從入門到開發:入門篇之十七循環嵌套

那如果老師要你列印

100*5

1000*5

8848*5

呢。。

此時就可以利用咱們上節課講過的循環語句來實作:

i=0
while i<5 :
    print('* * * * *')
    i+=1           

執行結果也是一樣的。而且隻需要修改條件表達式

i<5

中的數字,就可以實作列印

100*5

1000*5

8848*5

。。等等這些,那老師又提要求了,我現在想列印10列,我覺得5列太少了,你的第一想法是修改print語句裡面的

*

數量就可以實作,那麼同樣的問題來了,我想列印

8848*8848

怎麼辦呢?

用同樣的思路:同樣對列使用循環,這就形成了一個循環的嵌套。具體怎麼嵌套,跟着老師往下看:

首先在裡面加一個内層循環,控制列數:

i=0
while i<5 :
    j=0
    while j<5:
        print('* ')
        j+=1
    i+=1           

結果會發現執行結果變成了:

這是為什麼呢?在python中,print函數是預設有一個n來控制換行的,也就是說每列印一次*之後就執行了一次換行,那這顯然是不行的,我們是想讓他列印五次再換行嘛,就需要在後面加一個

end=''

使得這個換行的功能用空格換掉,再來看一下效果:

循環嵌套列印三角形星星陣 | Python從入門到開發:入門篇之十七循環嵌套

結果發現它全都變成了橫向的,這是因為内層的循環再執行一次5列之後還是執行了

end=''

是以就沒有進行換行操作,此時就需要在内層循環結束加一個空的print語句,讓其換行即可。

i=0
while i<5 :
    j=0
    while j<5:
        print('* ',end=' ')
        j+=1
    print()
    i+=1           

執行結果為:

這就是咱們想要的結果了。

綜上:循環嵌套時,外層循環執行一次,内層循環就執行了一圈(在這裡就是5次)。内層循環控制圖形的寬度,外層循環控制圖形的高度。

此時,我的需求又要變化啦,我不想列印“矩形”了,我想列印一個“三角形”。

那該怎麼來實作呢?

剛剛列印“矩形”的時候老師說了,外層循環控制圖形的高度,内層循環控制圖形的寬度,現在圖形的高度依然是5,是以外層循環是不變的,那麼内層循環該怎麼變化呢?

如果j的值是固定的,那麼就是寬度是固定的,但是這個“三角形”的寬度是變化的,那咱們來分析一下,

當i執行第一次i=0,圖形寬度為1,那麼j就是小于1;

當i執行第二次i=1,圖形寬度為2,j就是小于2;

當i執行第三次i=2,圖形寬度為3,j就是小于3。。。

有同學就發現了,j的值是根據i來變化的,j就是小于i+1的值。程式如下:

i=0
while i<5 :
    j=0
    while j<i+1:
        print('* ',end=' ')
        j+=1
    print()
    i+=1           

這樣美麗的“三角形”就繪制出來啦~

大家在了解一下這個邏輯:外層循環執行一次,内層循環就執行一圈,外層i的值在變化,就控制了内層j的值。也就控制了圖形的寬度。

練習1

列印99乘法表

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
...9*9=81           

練習2

求100以内所有的質數

下節課來公布答案。

第十八節:列印九九乘法表

視訊學習:阿裡雲大學之Python進階必看

配套Python進階文章點選此處擷取