Диапазон для петли от 1? - PullRequest
0 голосов
/ 21 марта 2019

Я работаю над книгой, автоматизирующей скучные вещи с помощью 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

Ответы [ 4 ]

1 голос
/ 21 марта 2019

len() возвращает фактическую длину строки.Подумайте об этом, также существует строка длиной 0 ("").

Последнее значение range(start, end) равно end-1.Число 2 находится в диапазоне 1-3, а число 3 в диапазоне 3-5.Инклюзивное дно и эксклюзивная верхняя граница.

0 голосов
/ 21 марта 2019

Вы ошибаетесь в индексировании списка, функция 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, которые также являются первым, вторым, третьим и четвертым элементами в строке.

0 голосов
/ 21 марта 2019

Функция len возвращает количество объектов в списке.то есть

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

range(0, 3) производит 0, 1, 2 и, следовательно, проверяет только первые три числа.

>>> for i in range(0, 3):
...     print(i)
... 
0
1
2
0 голосов
/ 21 марта 2019

Лучше всего разделить понятия индексы (позиции объектов в списке) и длина (сколько их).Вот документ len (s) в Python.

range (start, stop) в Python включает запуск и исключает параметр stop.В математической записи [начало, остановка).Поэтому диапазон (0,3) будет проверять 0, 1, 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...