Вывод имен из списка по условию
Не могу понять, в чём ошибка.
Задание: Дан список имен: [‘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 шт):
Чтобы понять в чем ошибка, взглянем на Ваш код:
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'
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)
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