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

Рейтинг: -1Ответов: 4Опубликовано: 13.02.2023

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

Задание: Дан список имен: [‘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

Ответы

▲ -1Принят

Там "все имена, следующие за именем , содержащим "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)
▲ 1

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

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'

▲ 1

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)
▲ 0
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