Вывод имен из списка по условию

Не могу понять, в чём ошибка.

Задание: Дан список имен: [‘Rose’, ‘Nina’, ‘Phillip’, ‘Alex’, ‘Jimmy’, ‘Max’]. Вывести на экран приветственную строку в формате ‘Hello name’ для всех имен длиной не более 4-х символов. При этом все имена, следующие за именем, содержащим букву ‘x’, должны быть проигнорированы.

list = ['Rose', 'Nina', 'Phillip', 'Alex', 'Jimmy', 'Max']
for i in list:
    if len(i) > 4:
        continue
    for n in range(1, len(i)):
        if i[n] == 'x':
           break
    print(i)
Rose
Nina
Alex
Max

это вывод, а должно быть без Alex,Max


Ответы (4 шт):

Автор решения: Ovsenka

Чтобы понять в чем ошибка, взглянем на Ваш код:

for n in range(1, len(i)):
        if i[n] == 'x':
           break

В коде выше у вас выход из цикла происходит из внутреннего, то есть чтобы дальше не было вывода имен с символом 'x', необходимо выйти из внешнего цикла for

Вот мое решение:

list_names = ['Rose', 'Nina', 'Phillip', 'Alex', 'Jimmy', 'Max']
flag = False
for name in list_names:
    if len(name) > 4:
       continue
    if flag:
        break
    if "x" in name:
        flag = True
    print("Hello,", name)

Флаг flag здесь используется чтобы найти первое имя с символом 'x', и проверка, найден ли такой ранее. Вывод такой:

Hello, Rose
Hello, Nina
Hello, Alex

Alex в данном случае включен в вывод, потому что игнорируются только имена, которые следуют после имени со символом 'x'

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

Break прерывает только один цикл, в котором он находится. Можно сделать сложно на try except, чтобы прервать несколько вложенных циклов. Но проще воспользоваться существующей в python кoнструкцией el in str

list = ['Rose', 'Nina', 'Phillip', 'Alex', 'Jimmy', 'Max']
for i in list:
    if len(i) > 4:
       continue
    if 'x' in i:
        break
    print(i)
→ Ссылка
Автор решения: Дмитрий

Там "все имена, следующие за именем , содержащим "x", должны игнорироваться? Т.е. после того как встретили имя со вхождением "x" прекращаем?

import re

list = ['Rose', 'Nina', 'Phillip', 'Alex', 'Jimmy', 'Max']
for i in list:
    if re.search(r'[xX]', i) != None:
        break
    if len(i) > 4:
        continue

    print(i)
→ Ссылка
Автор решения: Mango
list = ['Rose', 'Nina', 'Phillip', 'Alex', 'Jimmy', 'Max']

for name in list:
    if len(name) < 5:
        if 'x' in name:
            print("Hello,", name)
            break
        else:
            print("Hello,", name)

Вывод:

Hello, Rose
Hello, Nina
Hello, Alex
→ Ссылка