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
中代码不应该上升到18; countMe
15,而不是18; oddsOut
中,函数只在j中为7而不是8,即使j为8; oddsOut
14。答案 0 :(得分:4)
嗯,从帮助:
>>> 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而不是8而不是8,即使j是8;
- 为什么最后一个数字是在oddsOut 14中打印的。
更一般地说,这些问题的答案是,在大多数语言中,范围被定义为[start:stop[
,即范围的最后一个值从不包括在内,并且索引始终始于{{1 }}。混乱是在几种语言中,在处理算法时,范围从0
开始,包含最后一个值。
最后,如果要包含最后一个值,可以执行以下操作:
1
或在您的示例中:
def closed_range(start, stop, step=1):
return range(start, stop+1, step)
答案 1 :(得分:2)
范围中的停止参数不包括该数字,例如
for i in range(0,5):
print i
将打印0-4而不是5。
答案 2 :(得分:0)
Python中的范围不包含结束值。这与切片一致。
如果您需要一种方法来记住这一点,请考虑range(10)
有10个元素 - 数字0到9。