python - for 循环中的范围为 1?
问题描述
我正在阅读使用 python 自动化无聊的东西的书,并遇到了他编写的用于在文档中查找电话号码的代码。
电话号码格式为(12个字符):123-456-7890
为什么代码检查文本长度是否为 12?但是python不是从0开始计数的,所以它会寻找13的长度吗?
同样,他想检查前三个数字是否为数字,但他使用了一个范围(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
。包含底部和独占上界。
推荐阅读
- performance - 提高 Ansible 性能
- python-3.x - 如何使用 boto3 列出附加到角色的 AWS 托管策略
- c++ - DerivedA 指向 DerivedB 的指针
- javascript - 第一轮结果后重新初始化搜索
- node.js - 节点:如何识别是否有用户多次打开网站
- php - 你有一个使用 sql Prepared Statements 的表单,它有超过 170 多个值,你会做什么?
- python - 使用 scipy 的 gaussian_kde 和 sklearn 的 KernelDensity 进行核密度估计会导致不同的结果
- powerapps - PowerApps 日期函数
- python - 如何在 python 的单独模块中使用全局变量?
- sql-server - 绕过 Vertica 错误 3326:执行时间超过 01:00 的运行时间上限?