Как найти позицию первого нуля в строке?
Дана некоторая строка. Найдите позицию первого нуля в строке
Подскажите, почему программа некорректно работает
Вот код:
s = input("Введите строку: ")
for i in s:
if s.index("0"):
i = s.index("0")
print(i)
else:
print("Нулей нет")
Если вводить 0, выдаёт такое:
Введите строку: py0thon
2
2
2
2
2
2
2
А если не писать 0, то такое:
Введите строку: python
Traceback (most recent call last):
File "C:\Users\Яриор\PycharmProjects\Первый ноль в строке\main.py", line 3, in <module>
if s.index("0"):
ValueError: substring not found
Ответы (2 шт):
Ошибка возникает, потому, что s.index
возбуждает исключение, если символ не найден, так что с его помощью не получится понять, есть ли в строке такой символ (если не использовать try-except, конечно) - для этого существует конструкция символ in строка
. Ну и, как писали в комментариях, цикл здесь вообще не нужен. Правильный код:
s = input("Введите строку: ")
if '0' in s:
print(s.index('0'))
else:
print("Нулей нет")
Примеры работы:
-
Введите строку: pyth0n 4
-
Введите строку: python Нулей нет
Ещё немного вариантов как можно решить данную задачу.
Использование метода find()
Метод find() возвращает индекс первого вхождения подстроки (в данном случае '0') в строку или -1, если подстрока не найдена. Это простой и быстрый способ.
def find_zero(s):
pos = s.find('0')
if pos == -1:
return "Нулей нет"
else:
return pos
# Пример использования
print(find_zero("1234056789"))
print(find_zero("123456789"))
Использование цикла и enumerate()
Вы можете вручную перебрать строку с помощью enumerate(), что позволит вам получить индекс каждого символа, и проверить, является ли символ нулём.
def find_zero(s):
for index, char in enumerate(s):
if char == '0':
return index
return "Нулей нет"
# Пример использования
print(find_zero("abc0def"))
print(find_zero("abcdef"))
Через регулярные выражения
Можно использовать метод search и start из модуля re.
import re
def find_zero(s):
match = re.search('0', s)
return match.start() if match else "Нулей нет"
# Пример использования
print(find_zero("example0123"))
print(find_zero("example123"))
https://docs.python.org/3/library/re.html#re.search
Дополнение про производительность:
Метод find() и регулярные выражения обычно выполняются быстро, особенно на больших строках, поскольку они оптимизированы на низком уровне. Цикл с enumerate() может быть чуть медленнее из-за Python-овской надстройки, но это редко является проблемой для типичных задач.