Задание №8 ЕГЭ по информатике: перечисления и нумерация слов на Python
Все пятибуквенные слова, составленные из букв А, К, Ц, Е, Н, Т, записаны в алфавитном порядке и пронумерованы.
Вот начало списка:
1. ААААА
2. ААААЕ
3. ААААК
4. ААААН
5. ААААТ
6. ААААЦ
…… Определите, под каким номером в этом списке стоит первое слово с чётным номером, которое не начинается с букв А, Е или К и при этом содержит в своей записи не менее одной буквы Т.
Первое. Алфавитный порядок букв — это не тот порядок, в котором они перечислены в условии. Смотрим на начало списка: ААААА, ААААЕ, ААААК, ААААН, ААААТ, ААААЦ. Значит, порядок такой:
А, Е, К, Н, Т, Ц Самый прямолинейный способ — перебрать все комбинации пятью вложенными циклами и посчитать их счётчиком.
s = "АЕКНТЦ"
not_s = "АЕК"
c = 0
for x1 in s:
for x2 in s:
for x3 in s:
for x4 in s:
for x5 in s:
c += 1
x = x1 + x2 + x3 + x4 + x5
if (c % 2 == 0) and (x1 not in not_s) and (x.count("Т") >= 1):
print(c, x) s = "АЕКНТЦ" not_s = "АЕК" c = 0 c += 1
x = x1 + x2 + x3 + x4 + x5 if (c % 2 == 0) and (x1 not in not_s) and (x.count("Т") >= 1):
print(c, x) if (c % 2 == 0) and (x1 not in not_s) and (x.count("Т") >= 1):
print(c, x)
break Второй способ — использовать библиотеку itertools, а точнее функцию product. Она делает то же самое, что наши пять вложенных циклов, но в одну строку.
from itertools import product
s = "АЕКНТЦ"
not_s = "АЕК"
for c, tup in enumerate(product(s, repeat=5), start=1):
x = ''.join(tup)
if (c % 2 == 0) and (tup[0] not in not_s) and ('Т' in x):
print(c, x)
break from itertools import product ('А', 'А', 'А', 'А', 'А') → 'ААААА'
Главное преимущество product — он избавляет от необходимости писать много вложенных циклов. Для слова из 8 букв пришлось бы писать 8 циклов, а product справляется одной строкой.
Главный недостаток product — нужно помнить про repeat, enumerate и join. Если забыть ''.join(tup), то x будет кортежем, и методы строки (например, .count()) не сработают.
Я — Олег Алексеевич, репетитор по информатике. Готовлю к ЕГЭ более 15 лет.
На своих занятиях мы:
Хотите попробовать? Запишитесь на первое занятие — познакомимся, определим ваш уровень и составим план подготовки.
Переходите на мой сайт, чтобы узнать подробности и записаться: Репетиторы рядом