Python For循环和范围函数

时间:2014-01-24 20:02:56

标签: python for-loop range

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。

3 个答案:

答案 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。