Алгоритм ищет число в строке, но затем продолжает поиск после завершения поиска (python 3.8) - PullRequest
0 голосов
/ 07 мая 2020

Я выполняю практическое упражнение, в котором я ввожу строку, и код должен найти первое появившееся число, а затем распечатать это число.

У меня есть один l oop, чтобы сначала проверить, есть ли вообще цифр и второй l oop, чтобы найти конец этого числа. Моя проблема в том, что второй l oop не знает, когда остановиться. Даже если число заканчивается, оно продолжается.

Вот весь соответствующий код, который у меня есть:

s = str(input("Input a string: "))

# counter to find digit's index
i = 0
while i < len(s) and not s[i].isdigit():
    i += 1

# counter to find end of number's index
j = i
if i < len(s) and s[i].isdigit:
    # find end of number, if any
    while j < len(s) and s[j].isdigit:
        j += 1

# i and j now indicate the starting and ending index of the number
full_number = s[i:j]

Если я ввожу 'hello 123 world', тогда full_number должен быть «123», но фактически возвращает «123 мира». Я совершенно не понимаю, почему, поскольку второе условие l oop не должно выполняться «миром».

Любая помощь приветствуется

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вы забыли позвонить () на свой isdigit(). Поэтому ваш код никогда не проверяет, является ли что-либо после i di git, он просто выполняет итерацию и += 1 каждый элемент, пока не достигнет len(s)

if i < len(s) and s[i].isdigit():
    # find end of number, if any
    while j < len(s) and s[j].isdigit():
        j += 1
0 голосов
/ 07 мая 2020

В вашем условии вы проверяете s[i].isdigit и s[j].isdigit вместо s[i].isdigit() и s[j].isdigit().

isdigit - это функция, и вы должны вызвать ее, чтобы проверить значение.

...