Ищем ли мы значение позиции / индекса первой цифры, а затем разбиваем цикл на оператор 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
переменная.