Необходимо вывести длину наибольшей подстроки, находящейся между символами *
Этот код работает, но если введённая строка заканчивается символом *, то выдается ошибка:IndexError: string index out of range
text = input("string ")
max_stars = 0
b = 0
print(len(text))
for i in range(len(text)):
if text[i] == "*":
b = i + 1
count = 0
r = ""
while text[b] != "*" and b+1 != len(text):
count += 1
b += 1
r = text[b]
if count > max_stars and r == "*":
max_stars = count
print(max_stars)
Ответы (3 шт):
import re
line = '---*jksdjdk*67679823684*==0w-eikdk*'
print(
len(
e := max(
re.findall(r'(?<=\*).*?(?=\*)', line),
key=len
)
)
)
print(e)
# 11
# 67679823684
text = input("string ")
max_stars = 0
b = 0
print(len(text))
for i in range(len(text) - 1):
if text[i] == "*":
b = i + 1
count = 0
r = ""
while text[b] != "*" and b+1 != len(text):
count += 1
b += 1
r = text[b]
if count > max_stars and r == "*":
max_stars = count
print(max_stars)
Ты обращаешься к элементу, которого по номеру в строке нет, т.к. ты к элементу из цикла for прибавляешь 1, поэтому при обнаружении "*", у тебя вылетает ошибка. чтобы обратиться к i + 1, тебе надо в range добавить 'len(text) - 1' Если я правильно тебя понял.
Когда последний символ *, то в выражении while text[b] != "*" and b+1 != len(text):
b - выходит за границы строки, так как на 3 строки до этого к нему прибавили 1.
Чтобы избежать ошибки, достаточно переставить в условии цикла местами выражения. И b+1 != len(text) поменять на b+1 < len(text).
Тогда все будет работать.
text = input("string ")
max_stars = 0
b = 0
print(len(text))
for i in range(len(text)):
if text[i] == "*":
b = i + 1
count = 0
r = ""
while b+1 < len(text) and text[b] != "*":
count += 1
b += 1
r = text[b]
if count > max_stars and r == "*":
max_stars = count
print(max_stars)