簡體   English   中英

Python For循環和范圍函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM