讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 11.3 可變嵌套循環 >

11.3 可變嵌套循環

現在來嘗試一個可變嵌套循環。這就是一個嵌套循環,只不過其中一個或多個循環在 range 函數中使用了變量。代碼清單 11-2 給出了一個例子。

代碼清單 11-2 一個可變嵌套循環

numLines = int(raw_input ('How many lines of stars do you want? '))numStars = int(raw_input ('How many stars per line? '))for line in range(0, numLines):    for star in range(0, numStars):print '*',    print  

運行這個程序來看它的作用,你會看到類似這樣的結果:

>>> ============================ RESTART ============================>>>How many lines of stars do you want?  3How many stars per line?  5***************  

前兩行詢問用戶想要多少行,以及每行希望有多少個星號。程序使用變量 numLinesnumStars 記住這些答案。接下來有兩個循環:

  • 內循環(for star in range (0, numStars):)打印每個星號,對每一行上的每個星號分別運行一次;

  • 外循環(for line in range (0, numLines):)對每行星號分別運行一次。

需要用第二個 print 命令開始新的一行星號。如果沒有這個命令,由於第一個 print 語句中有逗號,所有星號都會打印到同一行上。

甚至可以有「嵌套嵌套循環」(或雙重嵌套循環),就像代碼清單 11-3 這樣。

代碼清單 11-3 利用雙重嵌套循環生成星號塊

numBlocks = int(raw_input ('How many blocks of stars do you want? '))numLines = int(raw_input ('How many lines in each block? '))numStars = int(raw_input ('How many stars per line? '))for block in range(0, numBlocks):    for line in range(0, numLines):for star in range(0, numStars):    print '*',printprint  

會得到下面的輸出:

>>> ======================= RESTART =======================>>>How many blocks of stars do you want? 3How many lines of stars in each block? 4How many stars per line? 8* * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * *  

我們稱這個循環嵌套「深度為 3」。