【问题标题】:Ranges in for loop off by 1?for 循环中的范围为 1?
【发布时间】:2019-03-21 08:12:24
【问题描述】:

我正在阅读使用 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

【问题讨论】:

  • @Carcigenicate 正是我想要的,谢谢!
  • 那就看看答案吧。我只发表了评论,因为我不确定这是否是您要问的。他们提供了更多细节。

标签: python loops for-loop


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    range(start, stop) 在 Python 中包含 start 而不包含 stop 参数。在数学符号中,[开始,停止)。因此 range(0,3) 将检查 0, 1, 2。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

        您将列表索引、len 函数和 range 函数混淆。

        列表索引从 0 开始,并随着每个元素增加。列表中的第 13 个元素位于索引 12 处,可以使用 text[12] 访问。

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

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

        【讨论】:

          猜你喜欢
          • 2012-04-15
          • 2022-12-16
          • 1970-01-01
          • 2018-09-08
          • 2013-07-15
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          相关资源
          最近更新 更多