Необходимо вывести длину наибольшей подстроки, находящейся между символами *

Этот код работает, но если введённая строка заканчивается символом *, то выдается ошибка: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 шт):

Автор решения: Namerek
import re

line = '---*jksdjdk*67679823684*==0w-eikdk*'

print(
    len(
        e := max(
            re.findall(r'(?<=\*).*?(?=\*)', line),
            key=len
        )
    )
)
print(e)
# 11
# 67679823684
→ Ссылка
Автор решения: Just_a_programmer
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' Если я правильно тебя понял.

→ Ссылка
Автор решения: Denis Vlasenko

Когда последний символ *, то в выражении 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)
→ Ссылка