[英]Python For loop and range function
def countMe(num):
for i in range(0, num, 3):
print (i)
countMe(18)
def oddsOut(num1, num2):
for i in range(num1):
for j in range(num2):
print(i*j)
oddsOut(3, 8)
我不了解范圍功能的工作原理:
countMe
,代碼不應countMe
18; countMe
15中而不是18中? oddsOut
該函數僅對j提供7而不是8,即使j為8; oddsOut
14中? 好吧,來自幫助:
>>> help(range)
range(...)
range([start,] stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
因此,最后一個增量不是stop
,而是stop
之前的最后一步。
- 在countMe中,代碼不應增加到18;
- 為什么最后一個數字顯示在countMe 15中而不是18中?
- 為什么在第二個函數oddsOut中,該函數僅對j提供7而不是8,即使j為8;
- 為什么最后的數字顯示在oddsOut 14中?
一般來說,對於這些問題的答案是,在大多數語言中,范圍定義為[start:stop[
,即,范圍的最后一個值從不包括在內,並且索引始終從0
開始。 混亂的是,在幾種語言中,當研究算法時,范圍從1
開始,並包含最后的值。
最后,如果要包含最后一個值,可以執行以下操作:
def closed_range(start, stop, step=1):
return range(start, stop+1, step)
或在您的示例中:
>>> def countMe(num):
>>> for i in range(0, num+1, 3):
>>> print (i)
>>>
>>> countMe(18)
0
3
6
9
12
15
18
>>>
例如,范圍中的stop參數不包括該數字
for i in range(0,5):
print i
將打印0-4,但不會打印5。
Python中的范圍不包含結束值。 這與切片一致。
如果您需要一種方式來記住這一點,請考慮range(10)
具有10個元素-數字0到9。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.