我正在研究这本书,用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
答案 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的元素,它们也是字符串中的第一,第二,第三和第四元素。