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