Находить индекс первой цифры в цикле Python? - PullRequest
0 голосов
/ 17 октября 2018
found = False
position = 0

while not found and position < len(inputString):
    if inputString[position].isdigit():
        found = True
    else:
        position += 1

if found:
    print('first digit is at position', position)
else:
    print('There are no digits in the string')

Это простая программа, которую я нашел, которая занимается поиском первой цифры во введенной строке.У меня возникли проблемы с пониманием ...

if inputString[position].isdigit(): found = True

Что именно означает это выражение, в частности, часть inputString[position].Ищем ли мы значение позиции / индекса первой цифры, а затем разбиваем цикл на оператор print ниже?

Ответы [ 6 ]

0 голосов
/ 18 октября 2018

Соберите все индексы возможных цифр, если список не пустой, напечатайте индекс 0, в противном случае, если список пуст, выведите оператор no digits.

lst = [i for i, v in enumerate(s) if v.isdigit()]
if len(lst):
    print(f'First digit is at postion {lst[0]}')
else:
    print('There are no digits in the string.')
0 голосов
/ 17 октября 2018

inputString[position] дает символ в позиции в inputString.Например, если inputString = "Foobar" и position = 3, inputString [position] = "b".

Когда мы находим цифру таким образом, то обнаруживаемый становится Истинным, и условие оценки while становится Ложным.Программа выходит из цикла и печатает.

0 голосов
/ 17 октября 2018

Ищем ли мы значение позиции / индекса первой цифры, а затем разбиваем цикл на оператор print ниже?

Да, это правда.Он ломается, потому что как только найдена цифра, в следующей итерации условие while not found даст while False и прервет цикл while.Стоит отметить and короткие замыкания, поэтому второе условие даже не оценивается.

Если цифра не найдена, position увеличивается до тех пор, пока она не станет равной len(inputString), после чего while цикл прерывается через второе условие, то есть position < len(inputString).


Более питонский / идиомиатический способ написания вашего цикла while - через цикл for и enumerate:

for idx, val in enumerate(inputString, 1):
    if val.isdigit():
        position = idx
        break
else:
    position = 0

if position:
    print('first digit is at position', position)
else:
    print('There are no digits in the string')

Обратите внимание, что в этом решении, поскольку мы начинаем считать с 1, мы можем воспользоваться тем фактом, что если найдена цифра, она должна быть "Истина", то есть ненулевой.Поэтому нам не нужна дополнительная found переменная.

0 голосов
/ 17 октября 2018

Вы ищете значение inputString в позиции, position.position сначала инициализируется как ноль, а затем циклически повторяется каждая позиция (уведомление position += 1), чтобы увидеть, если .isdigit().

0 голосов
/ 17 октября 2018

position - это ваша итерационная переменная, как в цикле for.Поэтому каждый раз, когда вы не находите цифру, вы переходите к следующему символу в строке.

inputString[position] читает то, что стоит на месте position в строке.Поэтому, если ваша строка abcdefg, тогда inputString[2]= c (не b, поскольку python начинает считать с 0).

Затем .isdigit() проверяет, является ли эта позиция цифрой.Если это цифра, то found = True и цикл while останавливается.(Иначе это продолжается.)

После завершения цикла функция печатает одно из двух сообщений в зависимости от того, была ли цифра в inputString.

0 голосов
/ 17 октября 2018

Строка в python может использоваться как последовательность, что означает, что вы можете использовать индекс для доступа к его элементам.Например: "Victor"[0] - это V.

Итак, в вашем примере вы получаете один из элементов (символов) строки.Функция isdigit() является строковым методом, который может проверить, является ли этот символ цифрой.

...