繁体   English   中英

for循环的范围是1?

[英]Ranges in for loop off by 1?

我正在研究这本书,用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

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM