讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 8.3 一條捷徑 range() >

8.3 一條捷徑 range()

在上面的例子中,我們只循環了 5 次:

for looper in [1, 2, 3, 4, 5]:  

如果希望循環運行 100 次或者 1000 次呢?這就得鍵入很多很多的數!

很幸運,這裡有一條捷徑。利用 range 函數,你可以只輸入起始值和結束值,它就會為你創建這二者之間的所有值。range 會創建一個列表,其中包含某個範圍內的數。

代碼清單 8-4 仍然使用我們在乘法表中用到的例子,不過這裡使用了 range 函數。

代碼清單 8-4 使用 range 的循環

for looper in range (1, 5):    print looper, "times 8 =", looper * 8  

把這個程序保存為 Loop4.py 並運行(可以使用 Run(運行) > Run Module(運行模塊)菜單,或者按下快捷鍵 F5)。你會看到這樣的結果:

>>> ================= RESTART =================>>>1 times 8 = 82 times 8 = 163 times 8 = 244 times 8 = 32  

基本上與第一個結果完全相同……不過少了最後一次循環!為什麼呢?

答案在於,range (1, 5) 給出的列表是 [1, 2, 3, 4]。你可以在交互模式中試試看:

>>> print range(1, 5)[1, 2, 3, 4]  

為什麼沒有 5 呢?

嗯,這正是 range 函數的做法。它會提供一個數字列表,從給定的第一個數開始,在給定的最後一個數之前結束。必須考慮到這一點,調整範圍來得到想要的循環次數。

Range

如果你在 Python 3 中這樣做,結果會有點不一樣:

>>> print(range(1, 5))range(1,5)  

這是因為在 Python 3 中 range 函數不會提供一個數字列表,而是會提供一個「可迭代」(iterable)的東西,你可以使用循環來遍歷它。(前文的「術語箱」中提到過的。)

如果在 for 循環中使用 range,則其工作方式是完全一樣的,只是內部機制略有不同而已。

代碼清單 8-5 給出了修改後的程序,它會給出 8 的乘法表(從 1 到 10)。

代碼清單 8-5 使用 range 打印 8 的乘法表(從 1 到 10)

for looper in range(1, 11):    print looper, "times 8 =", looper * 8  

運行這個程序時會得到下面的結果:

>>> ================== RESTART ==================>>>1 times 8 = 82 times 8 = 163 times 8 = 244 times 8 = 325 times 8 = 406 times 8 = 487 times 8 = 568 times 8 = 649 times 8 = 7210 times 8 = 80  

在代碼清單 8-5 的程序中,range(1, 11) 給出從 1 到 10 的一個數字列表,對於列表中的每一個數會完成一次循環迭代。每次循環時,變量 looper 就取列表中的下一個值。

順便說一句,我們把循環變量叫做 looper,不過也可以取你喜歡的任何名字。