Задание 8 ЕГЭ: сколько слов и чисел подходит и под каким номером слово стоит в списке
from itertools import *
n = 0 # номер слова в списке
for w in product('АЕКНТЦ', repeat=5): # буквы ПО АЛФАВИТУ
w = ''.join(w) # ('А','А','К',...) -> 'ААК..'
n += 1
if n % 2 == 0 and w[0] not in 'АЕК' and w.count('Т') >= 1:
print(n) # первое подходящее
break
product(буквы, repeat=5) выдаёт все слова длины 5 ровно в том
порядке, в каком они стоят в алфавитном списке, — если сами буквы в
строке записаны по алфавиту. В условии они почти всегда идут
вразнобой (из слова), и переписать их как есть — главная ошибка
задания.
| В условии | В программе |
|---|---|
| сколько слов / чисел | k += 1, после цикла print(k) |
| номер первого подходящего | print(n) и break |
| номер последнего подходящего | last = n, после цикла print(last) |
| с чётным / нечётным номером | n % 2 == 0 / n % 2 == 1 |
| пятизначные числа в системе с основанием 7 | product('0123456', repeat=5) и w[0] != '0' |
| ровно две буквы Т, не более одной С | w.count('Т') == 2, w.count('С') <= 1 |
| (не) начинается с букв А, Е или К | w[0] in 'АЕК' / w[0] not in 'АЕК' |
| (не) оканчивается цифрами 2 или 6 | w[-1] in '26' / w[-1] not in '26' |
| ровно две чётные цифры | счётчик: for c in w: if c in '0246': even += 1 |
| нет букв Ц, стоящих рядом | 'ЦЦ' not in w |
| все буквы разные | len(set(w)) == len(w) |
| что-то про соседние цифры | флаг ok и проход по парам w[i], w[i + 1] |
| нечётная не стоит рядом с 0 (второй способ — замена) |
в копии: s = w, for c in '135': s = s.replace(c, '1'),
потом s.count('01') == 0 and s.count('10') == 0; две чётные
рядом — чётные в '0' и s.count('00') == 0 |
n += 1 стоит до проверки, иначе
первое слово получит номер 0;product такие слова выдаёт;n % 2, а не
последняя буква и не число подходящих;break сразу, последнее —
запомнить и дождаться конца цикла.Задание 8 ЕГЭ: сколько слов и чисел подходит и под каким номером слово стоит в списке
from itertools import *
n = 0 # номер слова в списке
for w in product('АЕКНТЦ', repeat=5): # буквы ПО АЛФАВИТУ
w = ''.join(w) # ('А','А','К',...) -> 'ААК..'
n += 1
if n % 2 == 0 and w[0] not in 'АЕК' and w.count('Т') >= 1:
print(n) # первое подходящее
break
product(буквы, repeat=5) выдаёт все слова длины 5 ровно в том
порядке, в каком они стоят в алфавитном списке, — если сами буквы в
строке записаны по алфавиту. В условии они почти всегда идут
вразнобой (из слова), и переписать их как есть — главная ошибка
задания.
| В условии | В программе |
|---|---|
| сколько слов / чисел | k += 1, после цикла print(k) |
| номер первого подходящего | print(n) и break |
| номер последнего подходящего | last = n, после цикла print(last) |
| с чётным / нечётным номером | n % 2 == 0 / n % 2 == 1 |
| пятизначные числа в системе с основанием 7 | product('0123456', repeat=5) и w[0] != '0' |
| ровно две буквы Т, не более одной С | w.count('Т') == 2, w.count('С') <= 1 |
| (не) начинается с букв А, Е или К | w[0] in 'АЕК' / w[0] not in 'АЕК' |
| (не) оканчивается цифрами 2 или 6 | w[-1] in '26' / w[-1] not in '26' |
| ровно две чётные цифры | счётчик: for c in w: if c in '0246': even += 1 |
| нет букв Ц, стоящих рядом | 'ЦЦ' not in w |
| все буквы разные | len(set(w)) == len(w) |
| что-то про соседние цифры | флаг ok и проход по парам w[i], w[i + 1] |
| нечётная не стоит рядом с 0 (второй способ — замена) |
в копии: s = w, for c in '135': s = s.replace(c, '1'),
потом s.count('01') == 0 and s.count('10') == 0; две чётные
рядом — чётные в '0' и s.count('00') == 0 |
n += 1 стоит до проверки, иначе
первое слово получит номер 0;product такие слова выдаёт;n % 2, а не
последняя буква и не число подходящих;break сразу, последнее —
запомнить и дождаться конца цикла.