for循环的范围是1?

时间:2019-03-20 23:33:00

标签: python loops for-loop

我正在研究这本书,用python自动完成无聊的工作,并碰到了他写的这段代码,用于在文档中查找电话号码。

电话号码的格式为(12个字符):123-456-7890

为什么代码会检查文本长度是否为12?但是python不会从0开始计数,所以它会寻找13的长度吗?

类似地, 他想检查前三个数字是否为数字,但他使用的是range(0,3)。这不是检查包括数字在内的连字符在内的前4位数字吗?

感谢您的帮助。

def isPhoneNumber(text):
    if len(text) != 12:
        return False
    for i in range(0, 3):
        if not text[i].isdecimal():
            return False
    if text[3] != '-':
        return False
    for i in range(4, 7):
        if not text[i].isdecimal():
            return False
    if text[7] != '-':
        return False
    for i in range(8, 12):
        if not text[i].isdecimal():
           return False
    return True

4 个答案:

答案 0 :(得分:1)

len()返回字符串的实际长度。考虑一下,还存在一个长度为0("")的字符串。

range(start, end)的最后一个值为end-1。数字2在1-3范围内,数字3在3-5范围内。包含底限和排除上限。

答案 1 :(得分:0)

最好将索引(列表中对象的位置)和 length (有多少个)的概念分开。这是Python len(s)的文档。

Python中的

range(start, stop)包含start,但不包含stop参数。用数学表示法,[开始,停止]。因此range(0,3)将检查0、1、2。

答案 2 :(得分:0)

len函数返回列表中的对象数。 即

>>> len([1, 2, 3])
3

range(0, 3)产生0、1、2,因此仅检查前三个数字。

>>> for i in range(0, 3):
...     print(i)
... 
0
1
2

答案 3 :(得分:0)

您将列表索引,len函数和range函数弄糊涂了。

列表索引从0开始,并针对每个元素增加。列表中的第13个元素在索引12处,可以通过text[12]访问。

另一方面,len函数返回列表的实际长度。当然,2元素的长度是2,这就是len的返回值。在您的示例中,文本为13个字符长。 len返回13,但文本的最后一个索引将位于text[12]

range函数的起始值是,而结束值是 exclusive 。在您的range(0, 3)示例中,它检查位置0、1和2的项目,不是 0、1、2和3。如果要检查前四个数字,请改用range(0, 4),它将检查列表索引0、1、2和3的元素,它们也是字符串中的第一,第二,第三和第四元素。