Войти
или
Зарегистрироваться
Маркетплейс
Курсы
Учебник
Учебник 2.0
ОГЭ/ЕГЭ
Олимпиады
Рубрикатор
Компилятор
Онлайн Компилятор
Компилятор Python (lite)
Редактор HTML Code
Статья Автор:
Лебедев Дмитрий
Разбор заданий тренировочного варианта №1
Задание 3
Задание 5
Задание 9
Задание 15
Задание 17
Задание 24
Навигатор по заданиям
Разбор задания 5
Возможные проблемы
осмысление условия - есть требование найти НАИМЕНЬШЕЕ одно и НАИБОЛЬШЕЕ другое
может быть надо организовать несколько запусков
достаточно сложные требования к преобразованию
def f(n): s = '' # построение троичной записи числа x = n ks = 0 # для суммы цифр while x > 0 : a = x % 3 s = str(a) + s ks += a x = x// 3 if ks % 4 == 0 : s = s.replace('2','_') s = s.replace('1','2') s = s.replace('_','1') else : s = s + '20' s = s[0] + '02' + s[3:] return s # поиск наименьшего R, превышающего 302 for n in range (1, 100) : r =int(f(n),3) if r <310 and r > 302 : print(n, r)
×
Разбор задания 15
def f(x): P = (x >= 520 and x <= 1050) Q = (x >= 0 and x <= 1050) T = (x > 5510) A = False return ((not P) and (not Q) and (not A)) <= T dots = [0, 520, 530, 1050, 5510] for d in dots : print (d+1, f(d+1))
×
Находим левое и правое False и определяем требуемый отрезок
В нашем примере это [1050; 5510]
Проверяем и не забываем, что увеличивали масштаб (не любим float)
# контрольный/проверочный запуск def f(x): P = (x >= 520 and x <= 1050) Q = (x >= 0 and x <= 1050) T = (x > 5510) A = ( x>= 1050 and x <= 5510) return ((not P) and (not Q) and (not A)) <= T dots = [0, 520, 530, 1050, 5510] for d in dots : print (d, f(d)) print (d+1, f(d+1))
×
Разбор задания 9
Будем считать, что файл формате EXCEL открыли, в блокнот скопировали и сохранили в текстовом формате.
Решение проведем в несколько запусков, последовательно добавляя условия.
# Запуск 1. Чтение из файла, подсчет строк и вывод последней ans = 0 for s in open('fz_09_trV01.txt'): A = list(map(int,s.split())) ans += 1 print (ans,s)
×
Добавим разбиение набора чисел на повторяющиеся и неповторяющиеся и из наличие
# Запуск 2. Наличие повторяющихся и неповторяющихся ans = 0 for s in open('fz_09_trV01.txt'): A = list(map(int,s.split())) p, q = [], [] for x in A : if A.count(x) == 1 : p.append(x) else : q.append(x) if len(p) == 0 or len(q) == 0 : continue ans += 1 ss = s print (ans,ss)
×
Видим изменение ответа и даже маленькую проверку.
Добавим условие на максимальное число
Добавляем последнее условие на суммы
# Запуск 3. Условие на максимальное ans = 0 for s in open('fz_09_trV01.txt'): A = list(map(int,s.split())) p, q = [], [] y = max(A) if A.count(y) != 1 : continue for x in A : if A.count(x) == 1 : p.append(x) else : q.append(x) if len(p) == 0 or len(q) == 0 : continue ans += 1 ss = s print (ans,ss)
×
# Запуск 4. Условие на суммы ans = 0 for s in open('fz_09_trV01.txt'): A = list(map(int,s.split())) p, q = [], [] y = max(A) if A.count(y) != 1 : continue for x in A : if A.count(x) == 1 : p.append(x) else : q.append(x) if len(p) == 0 or len(q) == 0 : continue if sum(p) < 3 * sum(q) : continue ans += 1 ss = s print (ans,ss)
×
Разбор задания 17
Задача на "два прохода". Решим несколькими запусками
# Запуск 1. Чтение из файла, определение количества чисел со свойством data = [int(s) for s in open('fz_17_trV01.txt')] k = 0 for d in data : d = abs(d) if (d % 10 == 3) and (d > 999 ) and (d < 10000) : k+= 1 print(k, k * k, len(data), data[-5:])
×
Добавляем второй проход с вычислениями
# Запуск 2. Второй проход data = [int(s) for s in open('fz_17_trV01.txt')] k = 0 for d in data : d = abs(d) if (d % 10 == 3) and (d > 999 ) and (d < 10000) : k+= 1 print(k, k*k len(data), data[-5:]) k = k * k ans, mans = 0, -300000 for i in range (2,len(data)): x, y, z =data[i-2], data[i-1], data[i] a = x + y + z - min(x, y, z) if a <= k : continue ans += 1 if (x + y + z) > mans : mans =x +y + z print(ans, mans, x,y,z) print(ans, mans )
×
_____________
_Разбор задания 3.
Открыть файл.
С помощью ВПР добавить в основную таблицу нужные столбцы
ID операции
Дата
ID магазина
Артикул
Количество упаковок, шт
Тип операции
Магазин
Название
Ед.Измерения
Кол-во
1
02.08.2024
M1
1
200
Поступление
просп. Мира, 45
Батончик соевый
грамм
250
2
02.08.2024
M1
2
200
Поступление
просп. Мира, 45
Заяц шоколадный большой
шт
1
3
02.08.2024
M1
3
200
Поступление
просп. Мира, 45
Заяц шоколадный малый
шт
6
4
02.08.2024
M1
4
200
Поступление
просп. Мира, 45
Зефир в шоколаде
грамм
250
5
02.08.2024
M1
5
200
Поступление
просп. Мира, 45
Зефир ванильный
грамм
800
6
02.08.2024
M1
6
200
Поступление
просп. Мира, 45
Зефир воздушный
грамм
500
Копируем на новый лист как "значения", добавляем фильтр, выбираем сразу или последовательно.
Снова копируем как значения на новый лист
ID операции
Дата
ID магазина
Артикул
Количество упаковок, шт
Тип операции
Магазин
Название
Ед.Измерения
Кол-во
3501
14.08.2024
M4
9
225
Продажа
Луговая, 21
Карамель "Взлетная"
грамм
500
3503
14.08.2024
M4
11
247
Продажа
Луговая, 21
Карамель клубничная
грамм
500
3505
14.08.2024
M4
13
256
Продажа
Луговая, 21
Карамель мятная
грамм
500
3753
14.08.2024
M9
9
97
Продажа
Луговая, 7
Карамель "Взлетная"
грамм
500
3755
14.08.2024
M9
11
84
Продажа
Луговая, 7
Карамель клубничная
грамм
500
3757
14.08.2024
M9
13
85
Продажа
Луговая, 7
Карамель мятная
грамм
500
Считаем число упаковок или вес
упаковок 994, значит вес 497
Разбор задания 24
Интересная задача, новая формулировка.
Решение проведем этапами.
Считаем и развернем строку - будет проще обрабатывать. Разобъем на "предложения 1-го уровня", сплитуя по точкам с сохранением точек
Напишем функцию обработки "предложений 1-го уровня" - будем использовать метод указателей
# Запуск 1. Чтение из файла, разворот, разбиение на "предложения 1-го уровня"подсчет строк и вывод последней sss = open('fz_24_trV01.txt').read() print(sss[-10:],'=OK') sss = sss[::-1] sss = sss.replace('.','_.') data = list(sss.split('_')) print(len(data),data[0])
×
Добавляем обработку предложений, для этого напишем и проверку слова (тоже подпрограмма)
# Запуск 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] # возврат результата в правильном формате sss = open('fz_24_trV01.txt').read() print(sss[-10:],'=OK') sss = sss[::-1] sss = sss.replace('.','_.') data = list(sss.split('_')) print(len(data),data[0]) 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) # печать ответа
×
Прикрепленные файлы
fz_03_trV01.xlsx
fz_09_trV01.txt
fz_09_trV01.xlsx
fz_10_trV01.docx
fz_17_trV01.txt
fz_18_trV01.xlsx
fz_22_trV01.xlsx
fz_24_trV01.txt
fz_26_trV01.txt
fz_27A_trV01.txt
fz_27B_trV01.txt
Печать