Войти
или
Зарегистрироваться
Маркетплейс
Курсы
Учебник
Учебник 2.0
ОГЭ/ЕГЭ
Олимпиады
Рубрикатор
Компилятор
Онлайн Компилятор
Компилятор Python (lite)
Редактор HTML Code
Статья Автор:
Лебедев Дмитрий
(The Last Inch) КЕГЭ- 24. Модель решения
Задания КЕГЭ-24 - одно из самых сложных заданий экзамена. Многие решают эти задания с помщью модуля RE (регулярные выражения).
Здаесь представлены решения, не использующие стронних модулей, но использующие подходы типа "разделяй и властвуй", "метод указателей".
Будут разобраны задания нескольких типов ("предложения", "числа в различных СС", "арифметические выражения")
.
Разбор задания КЕГЭ-24 из Тренировочного вариант №1 (условный тип "предложения")
Решение проведем этапами.
Считаем и развернем строку - будет проще обрабатывать.
Разобъем на "предложения 1-го уровня", сплитуя по точкам с сохранением точек
Напишем функцию обработки "предложений 1-го уровня" - будем использовать метод указателей
# Запуск 1. Чтение из файла, разворот, разбиение на "предложения 1-го уровня"подсчет строк и вывод последней sss = open('24_trV1.txt').read() print(sss[-10:],'=OK') sss = sss[::-1] sss = sss.replace('.','_.') data = list(sss.split('_')) print(len(data),data[0])
×
Дополняем программу следующей обработкой - подпрограммой обработки "предложения 1-го уровня"
выделяем фрагмент до первого "двойного пробела"
разбиваем на список слов
обрабатываем слова - пишем программу проверки слова
Большое значение имеет организация промежуточной печати - желательно выводить не только отобранный участок, но и часть за его пределами (проверка правильности выбора)
# Запуск 2. Чтение из файла, разворот, разбиение на "предложения 1-го уровня"подсчет строк и вывод последней def fw (sw) : # обработка слова if sw == '' : return False # слово пустое if sw[-1].isalpha() == False : return False for s in sw[:-1]: # проверка символов слова на "строчность" if s.isalpha() == False : return False if s.isupper() : return False return True def ff (sx) : # проверка предложения ss = sx[1:] #отрезаем точку if ss[0] == ' ' : return '' # проверка знака после точки sd = list(ss.split(' ')) # отрезаем двойные пробелы ss = sd[0] sd = list(ss.split(' ')) #сплитуем на слова k, kk = 0, 0 # количество отобранных слов и слов в предложении for i in range(len(sd)) : # проход по списку слов if fw(sd[i]) == False : break # плохое слово k += 1 if sd[i][-1].isupper() : kk = k # слово может заканчивать предложение if kk == 0 : return '' rez = '.' + ' '.join(sd[:kk]) # восстанавливаем строку return rez[::-1] # возврат результата в правильном формате # ОСНОВНАЯ ПРОГРАММА # Блок 1. Чтение из файла, разворот, сплитование на "предложения 1-го уровня sss = open('24_trv1.txt').read() print(sss[-10:],'=OK') sss = sss[::-1] sss = sss.replace('.','_.') data = list(sss.split('_')) print(len(data),data[0]) # Блок 2. Обработка списка "предложений 1-го уровня" ans = ' ' # инициализация ответа (это строка) for ss in data[1:]: #пробег по предложениям (1 пропустили) if len(ss) <= len(ans) : continue # проверка кандидата по длине r = ff(ss) # получение "правильного" кандидата if len(r) <= len(ans) : continue # сравнение с результатом и его ans = r print(len(ans), ans); print(ss) # отладочная печать print(len(ans),ans) # печать ответа
×
Прикрепленные файлы
24_trv1.txt
Печать