logo
0
читателей
Информатика с Натальей Массальской  Трюки и читы информатики от преподавателя и программиста. Excel, Python, дискретная математика, ЕГЭ, ОГЭ. Информатика — это круто!
О проекте Просмотр Уровни подписки Фильтры Статистика Обновления проекта Контакты Поделиться Метки
Все проекты
О проекте

ЧТО ЗДЕСЬ?

Здесь я выкладываю общедоступные материалы по информатике и программированию. Вы можете смотреть и читать их совершенно свободно. Без рекламы и прочих уловок. Весь опыт нескольких десятилетий моей работы.
Если вы оформите подписку, с вашей карты будет ежемесячно списываться выбранная сумма. Все материалы здесь открыты для чтения и просмотра. Подписка не даст вам никаких привилегий, кроме содействия в развитии и моей большой благодарности 💗 Выберите посильную для себя степень двойки. Это поможет мне продолжать и развивать проект.

⭐ КТО Я?

Прежде я работала программистом «широкого профиля» в НПО «Энергомаш», затем много лет разрабатывала веб-сайты. Была выпускающим редактором газеты «Компьютерная Россия». Естественно, готовила к ЕГЭ — со времени его введения. Преподавала на кафедре прикладной и вычислительной математики в МАИ, на курсах дополнительного образования, вела занятия по компьютерной грамотности для специалистов из разных областей. Кое-кто из моих бывших студентов сейчас руководит отделами и собственными софтверными компаниями.
Сейчас я преподаю информатику в «Химкинском лицее». Под моим началом каждый год постигает азы IT примерно 250 человек в 8-11 классах. Старшие — в профильных группах.

⭐ БУДЕТ ИНТЕРЕСНО?

Непременно! И полезно, особенно если вы:
🔹 Школьник, который интересуется информатикой и программированием или собирается сдавать ОГЭ-ЕГЭ.
🔹 Студент, которому грозит курс программирования на Python или просто нужно посчитать курсовую / диплом.
🔹 Специалист в любой области, если вы не очень уверенный пользователь: Excel сейчас нужен буквально везде, а «по-быстрому вычислить» что угодно можно в Python, и некоторые приёмы здорово облегчают жизнь.
🔹 Родитель школьника, которому интересно, над чем это ребёнок часами зависает после уроков информатики.
____________________
Вы также можете подписаться на мои каналы «Информатика с Натальей Массальской»:
💥 в Telegram: IT и жизнь, компьютерные лайфхаки, инфобез, мемы;
💥 на Rutube: учебные видео.

Публикации, доступные бесплатно
Уровни подписки
Единоразовый платёж

💗 Спасибо за вашу поддержку! Всё в этом проекте публикуется свободно, но ваша помощь обеспечит появление новых материалов.

Помочь проекту
Два в седьмой 128₽ месяц
Доступны сообщения

💗 Спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в восьмой 256₽ месяц
Доступны сообщения

💗 Спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в девятой 512₽ месяц
Доступны сообщения

💗 Большое спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в десятой 1 024₽ месяц
Доступны сообщения

💗 Большое спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в одиннадцатой 2 048₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в двенадцатой 4 096₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в тринадцатой 8 192₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе и серьёзный вклад в развитие проекта!

Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в четырнадцатой 16 384₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе и весомый вклад в развитие проекта!

Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в пятнадцатой 32 768₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе и исключительный вклад в развитие проекта!

Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Фильтры
Статистика
Обновления проекта
Поделиться
Читать: 1+ мин
logo Информатика с Натальей Массальской

Шпаргалки без слов. Вычисления в компьютерных системах счисления

На ‎уроках‏ ‎иногда ‎полезно ‎посмотреть ‎шпаргалочку ‎по‏ ‎теме, ‎которая‏ ‎«прошла‏ ‎мимо» ‎вас ‎или‏ ‎подзабылась. ‎Одна‏ ‎закавыка: ‎обычно ‎невозможно ‎включить‏ ‎звук,‏ ‎поэтому ‎обычные‏ ‎объясняшки ‎не‏ ‎годятся.

Я ‎начинаю ‎новый ‎проект: ‎«Шпаргалки‏ ‎без‏ ‎слов». Все ‎объяснения‏ ‎в ‎них‏ ‎даются ‎анимациями.

Начнём ‎со ‎всеми ‎пройденной‏ ‎темы‏ ‎про‏ ‎позиционные ‎системы‏ ‎счисления. ‎Повторение‏ ‎пригодится ‎восьмиклашкам‏ ‎при‏ ‎подготовке ‎к‏ ‎злобному ‎ВПР ‎этого ‎года.


1. Перевод ‎чисел‏ ‎вручную ‎(на‏ ‎бумажке)‏ ‎из ‎десятичной ‎системы в‏ ‎любую ‎другую.

Переводим‏ ‎числа ‎из ‎десятичной ‎системы‏ ‎счисления‏ ‎— ‎через‏ ‎деление ‎на‏ ‎основание ‎системы ‎счисления. ‎Делим ‎в‏ ‎столбик‏ ‎с ‎остатками.‏ ‎Каждый ‎остаток‏ ‎— ‎это ‎очередная ‎цифра ‎будущего‏ ‎числа.‏ ‎А‏ ‎каждый ‎результат‏ ‎снова ‎делим‏ ‎на ‎основание.‏ ‎И‏ ‎так, ‎пока‏ ‎не ‎останется ‎число, ‎меньшее ‎основания.


2. Перевод‏ ‎чисел ‎вручную‏ ‎в‏ ‎десятичную ‎систему ‎счисления.

Переводим‏ ‎числа ‎в‏ ‎десятичную ‎систему ‎счисления ‎—‏ ‎через‏ ‎«развёрнутую ‎форму‏ ‎числа», ‎то‏ ‎есть ‎сумму ‎произведений ‎цифры ‎на‏ ‎каждой‏ ‎позиции ‎на‏ ‎соответствующую ‎степень‏ ‎основания ‎системы ‎счисления.


3. Арифметика ‎в ‎двоичной‏ ‎системе‏ ‎счисления.

Вычисляем‏ ‎значение ‎выражения,‏ ‎операнды ‎которого‏ ‎записаны ‎в‏ ‎двоичной‏ ‎системе ‎счисления.‏ ‎Опробуем ‎два ‎подхода:

1) Переводим ‎операнды ‎в‏ ‎десятичную ‎систему,‏ ‎где‏ ‎легко ‎получить ‎результат.‏ ‎А ‎результат‏ ‎переводим ‎в ‎требуемую ‎систему‏ ‎счисления.

2) Производим‏ ‎вычисления ‎прямо‏ ‎в ‎двоичной‏ ‎системе ‎счисления. ‎При ‎этом ‎помним,‏ ‎что‏ ‎наша ‎«десятка»‏ ‎— ‎это‏ ‎2.


4. Арифметика ‎в ‎восьмеричной ‎и ‎шестнадцатеричной‏ ‎системах‏ ‎счисления.

Закрепляем‏ ‎арифметику ‎в‏ ‎недесятичных ‎системах‏ ‎счисления ‎на‏ ‎примере‏ ‎восьмеричной ‎и‏ ‎шестнадцатеричной.

Напомню, ‎что ‎при ‎расчётах ‎в‏ ‎столбик ‎«десятка»,‏ ‎которая‏ ‎возникает ‎при ‎переполнении‏ ‎разряда ‎или‏ ‎«занимается» ‎у ‎соседней ‎цифры‏ ‎—‏ ‎это ‎основание‏ ‎системы ‎счисления.


________________________________

💗 Подписывайтесь‏ ‎на ‎все ‎мои ‎каналы

«ИНФОРМАТИКА ‎с‏ ‎Натальей‏ ‎Массальской»

🔹 Телеграм 🔹 Sponsr 🔹 Rutube ‎



Читать: 3+ мин
logo Информатика с Натальей Массальской

Детективная история про исчезающие оценки и транзакции

Одна ‎из‏ ‎самых ‎бесячих ‎особенностей ‎нынешнего ‎электронного‏ ‎журнала ‎—‏ ‎это‏ ‎исчезающие ‎оценки. ‎Ставишь‏ ‎оценки ‎за‏ ‎карусель ‎или ‎практикум ‎«в‏ ‎столбик»,‏ ‎штук ‎семь‏ ‎поставил, ‎вдруг‏ ‎бац ‎— ‎три ‎первые ‎пропали.‏ ‎Начинаешь‏ ‎ставить ‎медленно‏ ‎и ‎осмысленно:‏ ‎воткнул ‎→ ‎20 ‎секунд ‎→‏ ‎исчезло.‏ ‎Воткнул‏ ‎→ ‎15‏ ‎секунд ‎→‏ ‎опять ‎пропало.‏ ‎Тык-тык-тык‏ ‎штук ‎10‏ ‎в ‎быстром ‎темпе ‎→ ‎через‏ ‎полминуты ‎половины‏ ‎из‏ ‎них ‎нет.

🤪 Полный ‎отвал‏ ‎башки ‎—‏ ‎это ‎когда ‎часа ‎через‏ ‎два‏ ‎некоторые ‎из‏ ‎них ‎возвращаются.‏ ‎Иногда ‎в ‎двойном ‎количестве.

Бывает, ‎при‏ ‎этом‏ ‎выскакивает ‎замысловатое‏ ‎сообщение ‎об‏ ‎ошибке ‎— ‎вроде ‎того, ‎что‏ ‎на‏ ‎скриншоте,‏ ‎хотя ‎и‏ ‎не ‎конкретно‏ ‎оно. ‎Но‏ ‎чаще‏ ‎оценки ‎исчезают‏ ‎молча.

Что ‎за ‎чертовщина? ‎Мне ‎кажется,‏ ‎я ‎знаю.

Чтобы‏ ‎разобраться‏ ‎в ‎проблеме, ‎надо‏ ‎понять, ‎как‏ ‎работают ‎транзакции.

🎯 Транзакция ‎— это ‎цельный‏ ‎набор‏ ‎операций ‎работы‏ ‎с ‎данными.

Транзакция‏ ‎либо ‎обязана ‎выполниться ‎целиком ‎и‏ ‎успешно‏ ‎(при ‎этом‏ ‎целостность ‎данных‏ ‎не ‎нарушается, ‎и ‎наша ‎транзакция‏ ‎не‏ ‎зависит‏ ‎от ‎других),‏ ‎либо ‎не‏ ‎выполниться ‎вообще‏ ‎—‏ ‎и ‎данные‏ ‎никак ‎не ‎изменятся.

Транзакции ‎возникают, ‎например,‏ ‎при ‎совместной‏ ‎работе‏ ‎над ‎документами. ‎Если‏ ‎два ‎пользователя‏ ‎по ‎сети ‎пытаются ‎сохранить‏ ‎изменения‏ ‎одной ‎и‏ ‎той ‎же‏ ‎фразы, ‎транзакция ‎либо ‎совместит ‎эти‏ ‎изменения,‏ ‎либо ‎откатит‏ ‎изменения ‎с‏ ‎обеих ‎сторон, ‎либо ‎примет ‎более‏ ‎ранние‏ ‎или‏ ‎более ‎поздние‏ ‎изменения. ‎Что‏ ‎именно ‎произойдёт‏ ‎и‏ ‎как ‎—‏ ‎зависит ‎от ‎реализации ‎программы.

Ещё ‎чаще‏ ‎понятие ‎транзакции‏ ‎возникает‏ ‎в ‎финансовой ‎области.

НАПРИМЕР,

Вася‏ ‎перечисляет ‎Пете‏ ‎100 ‎р. ‎с ‎карты‏ ‎на‏ ‎карту. ‎Возможно,‏ ‎это ‎осуществляется‏ ‎такой ‎последовательностью ‎операций:

  1. баланс ‎Васи ‎уменьшается‏ ‎на‏ ‎100 ‎р.
  2. баланс‏ ‎Васи ‎сохраняется
  3. баланс‏ ‎Пети ‎увеличивается ‎на ‎100 ‎р.
  4. баланс‏ ‎Пети‏ ‎сохраняется

Если‏ ‎между ‎пунктами‏ ‎2 ‎и‏ ‎3 ‎произойдёт‏ ‎сбой,‏ ‎может ‎оказаться,‏ ‎что ‎Вася ‎100 ‎р. ‎потерял,‏ ‎а ‎Петя‏ ‎не‏ ‎получил. ‎Чтобы ‎этого‏ ‎не ‎произошло,‏ ‎вся ‎последовательность ‎операций ‎представляет‏ ‎собой‏ ‎транзакцию, ‎и‏ ‎если ‎что-то‏ ‎пошло ‎не ‎так, ‎откатывается ‎целиком.

Как‏ ‎мы‏ ‎переносим ‎файл‏ ‎из ‎одной‏ ‎папки ‎в ‎другую? ‎Точно ‎так‏ ‎же:‏ ‎сначала‏ ‎файл ‎копируется‏ ‎по ‎новому‏ ‎адресу ‎и‏ ‎только‏ ‎потом ‎стирается‏ ‎на ‎старом. ‎Если ‎скопироваться ‎он‏ ‎не ‎смог‏ ‎или‏ ‎мы ‎прервали ‎операцию‏ ‎— ‎файл‏ ‎остаётся ‎по ‎старому ‎адресу.

Получается,‏ ‎это‏ ‎тоже ‎транзакция.

Что‏ ‎же ‎происходит‏ ‎с ‎оценками ‎в ‎электронном ‎журнале?

У‏ ‎меня,‏ ‎ясное ‎дело,‏ ‎нет ‎доступа‏ ‎к ‎начинке ‎журнала, ‎но, ‎судя‏ ‎по‏ ‎симптомам,‏ ‎проблема ‎в‏ ‎том, ‎что‏ ‎транзакции ‎не‏ ‎работают.

Порядок‏ ‎операций:

  1. Я ‎ставлю‏ ‎оценку ‎и ‎сохраняю ‎её ‎на‏ ‎своём ‎рабочем‏ ‎компьютере‏ ‎(на ‎стороне ‎«клиента»).
  2. Оценка‏ ‎отправляется ‎на‏ ‎сервер ‎— ‎у ‎нас‏ ‎же‏ ‎централизованная ‎система,‏ ‎все ‎данные‏ ‎всех ‎журналов ‎хранятся ‎в ‎базе‏ ‎на‏ ‎сервере.
  3. При ‎отправке‏ ‎моя ‎оценка‏ ‎стирается: ‎примерно ‎как ‎если ‎бы‏ ‎перенос‏ ‎файла‏ ‎происходил ‎наоборот:‏ ‎сначала ‎удалили‏ ‎на ‎старом‏ ‎месте,‏ ‎потом ‎записали‏ ‎на ‎новое.
  4. На ‎сервере ‎оценка ‎почему-то‏ ‎«не ‎приживается».‏ ‎Например,‏ ‎слишком ‎много ‎одновременных‏ ‎запросов. ‎Все‏ ‎хотят ‎ставить ‎оценки ‎в‏ ‎учебное‏ ‎время, ‎странно,‏ ‎правда? ‎Особенно‏ ‎если ‎учесть, ‎что ‎строго ‎запрещено‏ ‎опаздывать‏ ‎с ‎выставлением‏ ‎😉
  5. Сервер ‎действует‏ ‎по ‎принципу: ‎я ‎не ‎принял,‏ ‎ну‏ ‎и‏ ‎ладно. ‎Это‏ ‎не ‎мои‏ ‎проблемы.

В ‎результате‏ ‎наши‏ ‎100 ‎рублей,‏ ‎верней, ‎наша ‎пятёрка ‎и ‎в‏ ‎локальном ‎журнале‏ ‎исчезла,‏ ‎и ‎до ‎базы‏ ‎данных ‎на‏ ‎сервере ‎не ‎добралась.

Что ‎с‏ ‎этим‏ ‎делать ‎бедному‏ ‎преподу?

В ‎очередной‏ ‎раз ‎писать ‎в ‎техподдержку ‎и‏ ‎через‏ ‎две ‎недели‏ ‎получать ‎очередную‏ ‎отписку, ‎увы. ‎И ‎снова ‎мучительно‏ ‎«протыкивать»‏ ‎колонку‏ ‎оценок, ‎внимательно‏ ‎следя, ‎все‏ ‎ли ‎они‏ ‎«укоренились».

А‏ ‎вы ‎—‏ ‎не ‎будьте ‎такими ‎разрабами, ‎как‏ ‎разрабы ‎электронного‏ ‎журнала.‏ ‎Используйте ‎транзакции ‎и‏ ‎не ‎теряйте‏ ‎данные! ‎🤝


Читать: 1+ мин
logo Информатика с Натальей Массальской

ЕГЭ по информатике. № 8. Комбинаторика: типы и алгоритмы решения

1. Решаем ‎задачу‏ ‎на ‎количество ‎чисел ‎по ‎условиям‏ ‎тремя ‎способами:‏ ‎аналитически,‏ ‎простым ‎перебором ‎на‏ ‎Python ‎и‏ ‎при ‎помощи ‎библиотеки ‎Python‏ ‎itertools.

2. Решаем‏ ‎задачу ‎на‏ ‎алфавитные ‎последовательности‏ ‎двумя ‎способами: ‎при ‎помощи ‎аналитического‏ ‎трюка‏ ‎и ‎при‏ ‎помощи ‎Python:‏ ‎библиотеки ‎itertools ‎и ‎функции ‎enumerate

3. Ещё‏ ‎один‏ ‎вид‏ ‎задач ‎№‏ ‎8 ‎ЕГЭ‏ ‎по ‎информатике‏ ‎(комбинаторика):‏ ‎составление ‎слов‏ ‎перестановками ‎букв. ‎Рассмотрим ‎простой ‎аналитический‏ ‎подход ‎и‏ ‎разберёмся,‏ ‎как ‎решать ‎задачу‏ ‎с ‎подковырками‏ ‎при ‎помощи ‎библиотеки ‎Python‏ ‎itertools‏ ‎и ‎функции‏ ‎enumerate

Итак, ‎в‏ ‎задаче ‎на ‎комбинаторику ‎два ‎основных‏ ‎типа:

  • подсчёт‏ ‎всех ‎возможных‏ ‎слов ‎/‏ ‎числе ‎на ‎базе ‎заданного ‎алфавита‏ ‎и‏ ‎с‏ ‎дополнительными ‎условиями‏ ‎составления
  • решение ‎задач‏ ‎на ‎алфавитные‏ ‎последовательности

При‏ ‎этом ‎у‏ ‎нас ‎три ‎основных ‎типа ‎решения:

  • аналитический‏ ‎(основная ‎формула‏ ‎комбинаторики)
  • программой‏ ‎с ‎простым ‎переборным‏ ‎алгоритмом
  • в ‎Python‏ ‎— ‎использование ‎модуля ‎itertools

А‏ ‎теперь‏ ‎— ‎за‏ ‎тренировку!



Читать: 1+ мин
logo Информатика с Натальей Массальской

Python: .index() и .find() для поиска в коллекции

💾 Методы ‎.index() и‏ ‎.find() делают ‎одно ‎и ‎то ‎же‏ ‎— ‎ищут‏ ‎первое‏ ‎вхождение ‎чего-либо ‎в‏ ‎свою ‎коллекцию.‏ ‎Только ‎.index() ‎применяется ‎к‏ ‎списку‏ ‎и ‎ищет‏ ‎элемент, ‎а‏ ‎.find() ‎работает ‎со ‎строкой ‎и‏ ‎ищет‏ ‎в ‎ней‏ ‎подстроку.

список.index(элемент)
‎строка.find(подстрока)‏

‎

Вот ‎пример:

s ‎= ‎'12345'
‎x‏ ‎=‏ ‎[1,‏ ‎2, ‎3,‏ ‎4, ‎5]‏
‎print(s.find('3'), ‎x.index(3))‏

‎

Получим‏ ‎2 ‎и‏ ‎2, ‎потому ‎что ‎нумерация ‎элементов‏ ‎и ‎в‏ ‎строках,‏ ‎и ‎в ‎списках‏ ‎идёт ‎с‏ ‎нуля.

Но ‎что ‎будет ‎при‏ ‎использовании‏ ‎методов ‎.index()‏ ‎и ‎.find(),‏ ‎если ‎такого ‎элемента ‎или ‎такой‏ ‎подстроки‏ ‎нет?

Например, ‎для‏ ‎строки ‎и‏ ‎списка ‎из ‎примера ‎выше:

s ‎=‏ ‎'12345'‏
‎x‏ ‎= ‎[1,‏ ‎2, ‎3,‏ ‎4, ‎5]‏

‎print(s.find('7'))‏
‎print(x.index(7))

‎

Метод‏ ‎.find() для ‎отсутствующей ‎строки ‎вернёт ‎-1.‏ ‎Почему ‎не‏ ‎ноль?‏ ‎Потому ‎что ‎нулевая‏ ‎позиция ‎существует.

А‏ ‎вот ‎.index() для ‎отсутствующего ‎элемента‏ ‎сгенерирует‏ ‎ошибку. ‎Проще‏ ‎говоря, ‎программа‏ ‎обругает ‎вас ‎и ‎упадёт, ‎вот‏ ‎так:

ValueError:‏ ‎7 ‎is‏ ‎not ‎in‏ ‎list

Как ‎же ‎бороться ‎с ‎падением‏ ‎программы‏ ‎при‏ ‎использовании ‎.index()?‏ ‎Запросто! ‎Мы‏ ‎должны ‎сначала‏ ‎проверить,‏ ‎есть ‎ли‏ ‎вообще ‎такое ‎значение ‎в ‎списке.‏ ‎И ‎только‏ ‎убедившись,‏ ‎что ‎есть ‎—‏ ‎определяем ‎его‏ ‎позицию:

x ‎= ‎[1, ‎2,‏ ‎3,‏ ‎4, ‎5]‏
‎if ‎7‏ ‎in ‎x:
    ‎print(x.index(7))

‎

Теперь ‎вы‏ ‎точно‏ ‎знаете, ‎как‏ ‎искать ‎элемент‏ ‎в ‎коллекции ‎👍

Читать: 3+ мин
logo Информатика с Натальей Массальской

Python: выводим слова введённой строки, отсортированные по длине

Словами ‎будем‏ ‎считать ‎последовательности ‎букв, ‎разделённых ‎пробелами.‏ ‎Знаки ‎препинания‏ ‎не‏ ‎являются ‎частью ‎слова.

ПРИМЕР:‏ ‎если ‎мы‏ ‎ввели ‎строку

Моя ‎головная ‎боль:‏ ‎математика,‏ ‎физика, ‎информатика.‏

‎

программа ‎должна‏ ‎вывести:

Моя
‎боль
‎физика
‎головная
‎математика‏
‎информатика‏

‎

1. Вводим ‎строку:

s‏ ‎= ‎input()‏

‎

2. Чтобы ‎разбить ‎строку ‎на ‎элементы,‏ ‎используем‏ ‎метод‏ ‎.split(), причём ‎без‏ ‎аргумента, ‎потому‏ ‎что ‎разбивать‏ ‎будем‏ ‎по ‎пробелу.

wrds‏ ‎= ‎s.split()

‎

Переменная ‎wrds ‎теперь‏ ‎— ‎это‏ ‎список‏ ‎строк. ‎Каждая ‎строка‏ ‎— ‎слово,‏ ‎причём ‎со ‎знаком ‎препинания‏ ‎в‏ ‎конце, ‎если‏ ‎он ‎там‏ ‎был. ‎Например, ‎«физика, ‎„.

3. Давайте ‎удалим‏ ‎последний‏ ‎символ ‎каждой‏ ‎подстроки, ‎если‏ ‎это ‎знак ‎препинания. ‎Конечно, ‎мы‏ ‎могли‏ ‎бы‏ ‎сделать ‎это‏ ‎«в ‎лоб»:

# для‏ ‎всех ‎подстрок‏ ‎списка‏
‎for ‎i‏ ‎in ‎range(len(wrds)):
    ‎# ‎если ‎последний‏ ‎символ ‎—‏ ‎знак‏ ‎препинания
    ‎if ‎wrds[i][-1]‏ ‎in ‎'.,:‏ ‎; ‎-?! ‎':
        ‎#‏ ‎заменяем‏ ‎строку ‎на‏ ‎неё ‎без‏ ‎последнего ‎символа
        ‎# ‎(фактически ‎ДО‏ ‎последнего‏ ‎символа)
        ‎wrds[i]‏ ‎= ‎wrds[i][:‏ ‎-1]

‎

Но ‎во-первых, ‎а ‎вдруг‏ ‎там‏ ‎будет‏ ‎случайно ‎затесавшаяся‏ ‎цифра ‎или‏ ‎мы ‎не‏ ‎все‏ ‎знаки ‎препинания‏ ‎вспомнили ‎(вот ‎скобки, ‎например, ‎ещё‏ ‎могут ‎быть).

А‏ ‎во-вторых,‏ ‎знак ‎может ‎быть‏ ‎и ‎в‏ ‎начале ‎слова ‎— ‎та‏ ‎же‏ ‎скобка.

Используем ‎метод‏ ‎.isalpha(), который ‎возвращает‏ ‎True, ‎если ‎аргумент ‎состоит ‎только‏ ‎из‏ ‎букв. ‎И‏ ‎будем ‎проверять‏ ‎с ‎обоих ‎концов ‎слова:

for ‎i‏ ‎in‏ ‎range(len(wrds)):‏
    ‎if ‎not(wrds[i][0].isalpha()):‏ ‎wrds[i] ‎=‏ ‎wrds[i][1:]
    ‎if‏ ‎not(wrds[i][-1].isalpha()):‏ ‎wrds[i] ‎=‏ ‎wrds[i][: ‎-1]

‎

4. Теперь ‎бы ‎надо‏ ‎отсортировать ‎список‏ ‎строк.‏ ‎Но ‎если ‎мы‏ ‎будем ‎делать‏ ‎это ‎запросто:

wrds.sort()

‎

получим ‎(естественно!)‏ ‎сортировку‏ ‎по ‎алфавиту,‏ ‎а ‎это‏ ‎не ‎то, ‎что ‎нам ‎нужно.

Вспомним,‏ ‎что‏ ‎у ‎метода‏ ‎.sort() есть ‎параметр‏ ‎key, позволяющий ‎сортировать ‎элементы ‎списка ‎как‏ ‎угодно:‏ ‎хоть‏ ‎по ‎второму‏ ‎символу ‎строк,‏ ‎хоть ‎по‏ ‎остатку‏ ‎от ‎деления‏ ‎чисел ‎на ‎11.

Причём ‎мы ‎можем‏ ‎функцию-ключ ‎сортировки‏ ‎сделать‏ ‎отдельной ‎функцией, ‎вот‏ ‎так:

def ‎key_func(x):‏
    ‎return ‎len(x)

‎

А ‎можем‏ ‎использовать‏ ‎лямбда-функцию ‎прямо‏ ‎в ‎вызове‏ ‎метода.

Лямбда-функции (напомню) ‎— ‎это ‎крохотные ‎функции‏ ‎без‏ ‎имени, ‎которые‏ ‎реализуются ‎прямо‏ ‎там, ‎где ‎используются.

Наша ‎сортировка ‎по‏ ‎длинам‏ ‎строк‏ ‎будет ‎выглядеть‏ ‎так:

wrds.sort(key=lambda ‎x:‏ ‎len(x))

‎

Параметр‏ ‎лямбда-функции‏ ‎х ‎—‏ ‎это ‎элемент ‎списка, ‎для ‎которого‏ ‎вызывается ‎.sort().‏ ‎То‏ ‎есть ‎в ‎нашем‏ ‎случае ‎—‏ ‎строка.

Что ‎возвращает ‎функция-ключ ‎сортировки‏ ‎—‏ ‎по ‎тому‏ ‎и ‎сортируем.‏ ‎Здесь ‎— ‎по ‎длине ‎строк.

5. Осталось‏ ‎вывести‏ ‎наши ‎строки.‏ ‎Можно, ‎конечно,‏ ‎сделать ‎это ‎попросту:

for ‎x ‎in‏ ‎wrds:‏
    ‎print(x)‏

‎

А ‎можно‏ ‎использовать ‎чуть‏ ‎более ‎мудрёный,‏ ‎но‏ ‎краткий ‎функциональный‏ ‎подход ‎и ‎записать ‎так:

[print(x) ‎for‏ ‎x ‎in‏ ‎wrds]‏

‎

Результат ‎получим ‎один‏ ‎и ‎тот‏ ‎же!

Осталось ‎переписать ‎программу ‎полностью‏ ‎и‏ ‎можно ‎💥‏ ‎сдавать ‎лабу‏ ‎😉

Код ‎программы:

s ‎= ‎input()
‎#‏ ‎разбиваем‏ ‎строку ‎на‏ ‎слова
‎wrds‏ ‎= ‎s.split()

‎# ‎для ‎всех‏ ‎подстрок‏ ‎списка‏
‎for ‎i‏ ‎in ‎range(len(wrds)):‏
    ‎# ‎если‏ ‎последний‏ ‎символ ‎-‏ ‎знак ‎препинания
    ‎if ‎wrds[i][-1] ‎in‏ ‎'.,:;-?!':
        ‎#‏ ‎заменяем‏ ‎строку ‎на ‎неё‏ ‎без ‎последнего‏ ‎символа
        ‎# ‎(фактически ‎ДО‏ ‎последнего‏ ‎символа)
        ‎wrds[i]‏ ‎= ‎wrds[i][:-1]‏

‎# ‎удаляем ‎начальные ‎и ‎конечные‏ ‎знаки‏
‎# ‎препинания‏ ‎из ‎каждого‏ ‎слова
‎for ‎i ‎in ‎range(len(wrds)):‏
    ‎if‏ ‎not(wrds[i][0].isalpha()):‏ ‎wrds[i] ‎=‏ ‎wrds[i][1:]
    ‎if‏ ‎not(wrds[i][-1].isalpha()): ‎wrds[i]‏ ‎=‏ ‎wrds[i][:-1]

‎#‏ ‎сортируем ‎список ‎по ‎длинам ‎строк‏
‎wrds.sort(key=lambda ‎x:‏ ‎len(x))‏
‎# ‎выводим ‎по‏ ‎одному ‎слову‏ ‎на ‎строке
‎[print(x) ‎for‏ ‎x‏ ‎in ‎wrds]‏

‎

Или ‎можете‏ ‎скачать ‎готовым ‎файликом ‎🔽🔽🔽

Читать: 2+ мин
logo Информатика с Натальей Массальской

Переводим голоса из процентов в штуки

Telegram ‎даёт‏ ‎результаты ‎голосования ‎в ‎процентах ‎—‏ ‎и ‎только.‏ ‎Но‏ ‎что ‎делать, ‎если‏ ‎вам ‎хочется‏ ‎увидеть ‎реальное ‎количество ‎голосов‏ ‎за‏ ‎тот ‎или‏ ‎иной ‎пункт‏ ‎опроса? ‎Тем ‎более, ‎что ‎вы‏ ‎точно‏ ‎знаете, ‎за‏ ‎что ‎голосовали‏ ‎сами, ‎и ‎хотели ‎бы ‎исключить‏ ‎свой‏ ‎голос.

Давайте‏ ‎разберёмся, ‎как‏ ‎использовать ‎для‏ ‎этого ‎Excel.


Некоторое‏ ‎время‏ ‎я ‎запускала‏ ‎голосовалку ‎«Что ‎вы ‎хотели ‎бы‏ ‎видеть ‎в‏ ‎канале». В‏ ‎силу ‎особенностей ‎ТГ‏ ‎опрос ‎пришлось‏ ‎разбивать ‎на ‎две ‎части,‏ ‎голосующих‏ ‎оба ‎раза‏ ‎было ‎разное‏ ‎количество, ‎а ‎в ‎качестве ‎результата‏ ‎ТГ‏ ‎показывает ‎только‏ ‎проценты. ‎Плюс‏ ‎ещё ‎и ‎мой ‎голос ‎болтался‏ ‎лишним‏ ‎—‏ ‎мне ‎же‏ ‎надо ‎было‏ ‎результаты ‎посмотреть!

В‏ ‎общем,‏ ‎надо ‎пересчитывать,‏ ‎чтоб ‎посмотреть ‎реальный ‎расклад ‎интересов.

Сказано‏ ‎— ‎сделано!

Берём‏ ‎Excel‏ ‎и ‎создаём ‎такую‏ ‎табличку:

Видите: ‎в‏ ‎колонке ‎«Всего» ‎вписано ‎количество‏ ‎голосов‏ ‎для ‎каждой‏ ‎части ‎опроса?‏ ‎14 ‎для ‎первого ‎набора ‎и‏ ‎12‏ ‎для ‎второго.

А‏ ‎как ‎мы‏ ‎подсчитали ‎голоса?

Мы ‎помним, ‎что ‎процент‏ ‎—‏ ‎это‏ ‎сотая ‎часть‏ ‎чего ‎угодно.‏ ‎Значит, ‎наше‏ ‎общее‏ ‎количество ‎голосов‏ ‎надо ‎разделить ‎на ‎100 ‎и‏ ‎умножить ‎на‏ ‎те‏ ‎проценты, ‎которые ‎записаны‏ ‎во ‎втором‏ ‎столбце.

Для ‎начальной ‎строки ‎(с‏ ‎Байками)‏ ‎получим ‎формулу:‏ ‎=C2/100*B2

Всё ‎супер,‏ ‎но ‎число ‎мы ‎получаем ‎корявенькое‏ ‎—‏ ‎с ‎десятичной‏ ‎частью. ‎Тыкаем‏ ‎в ‎кнопку, ‎уменьшающую ‎количество ‎десятичных‏ ‎знаков:‏ ‎на‏ ‎ней ‎нарисовано‏ ‎, 00 →, 0, пока ‎не‏ ‎получим ‎целое‏ ‎число.

Дальше‏ ‎я ‎перенесла‏ ‎первый ‎и ‎последний ‎столбик ‎в‏ ‎отдельную ‎табличку,‏ ‎причём‏ ‎в ‎столбик ‎«Голосов»‏ ‎скопировала ‎не‏ ‎формулы, ‎а ‎значения. ‎Это‏ ‎делается‏ ‎так:

► Копируем ‎нужный‏ ‎диапазон

► ПКМ ‎на‏ ‎первой ‎ячейке ‎диапазона, ‎куда ‎будем‏ ‎вставлять

► Выбираем‏ ‎«Специальная ‎вставка»

► В‏ ‎окошке ‎выбираем‏ ‎«Значения»

Осталось ‎удалить ‎из ‎«Потрындеть» ‎мой‏ ‎голос‏ ‎(мне-то‏ ‎всё ‎интересно,‏ ‎я ‎не‏ ‎показатель). ‎И‏ ‎отсортировать‏ ‎нашу ‎табличку‏ ‎в ‎обратном ‎порядке ‎по ‎голосам.

Результат‏ ‎— ‎вот:

Excel‏ ‎удобно‏ ‎использовать ‎для ‎подобных‏ ‎маленьких ‎бытовых‏ ‎задач. ‎Тем ‎более, ‎что‏ ‎он‏ ‎всегда ‎под‏ ‎рукой, ‎хотя‏ ‎бы ‎в ‎привычных ‎для ‎вас‏ ‎облачных‏ ‎«Документах».


Читать: 6+ мин
logo Информатика с Натальей Массальской

Количество разных путей между вершинами графа

Задача ‎№‏ ‎9 ‎ОГЭ ‎по ‎информатике

В ‎этой‏ ‎задаче ‎нам‏ ‎дан‏ ‎направленный ‎ненагруженный ‎граф.‏ ‎Направленный ‎граф‏ ‎ещё ‎называется ‎ориентированным ‎или‏ ‎орграфом. А‏ ‎ненагруженный ‎или‏ ‎невзвешенный ‎—‏ ‎значит, ‎что ‎его ‎связям ‎не‏ ‎назначены‏ ‎числа ‎—‏ ‎веса.

От ‎нас‏ ‎требуется ‎подсчитать ‎количество ‎всевозможных ‎путей‏ ‎между‏ ‎заданными‏ ‎вершинами ‎этого‏ ‎графа. ‎Иногда‏ ‎дают ‎ещё‏ ‎дополнительные‏ ‎условия: ‎нам‏ ‎либо ‎нельзя ‎проходить ‎по ‎пути‏ ‎через ‎заданную‏ ‎вершину,‏ ‎либо ‎мы ‎обязаны‏ ‎пройти ‎через‏ ‎неё.

Граф ‎может ‎выглядеть, ‎например,‏ ‎так:

Для‏ ‎решения ‎будем‏ ‎использовать ‎приём,‏ ‎который ‎называется ‎динамическим ‎программированием. На ‎самом‏ ‎деле,‏ ‎он ‎не‏ ‎имеет ‎прямого‏ ‎отношения ‎к ‎программированию ‎— ‎это‏ ‎математический‏ ‎метод.

Суть‏ ‎динамического ‎программирования‏ ‎в ‎том,‏ ‎что ‎для‏ ‎вычисления‏ ‎значений ‎на‏ ‎каждом ‎следующем ‎этапе ‎мы ‎используем‏ ‎значения, ‎сохранённые‏ ‎на‏ ‎предыдущем.

Например, ‎для ‎вычисления‏ ‎факториала ‎числа‏ ‎n ‎этим ‎методом ‎мы‏ ‎могли‏ ‎бы ‎заполнить‏ ‎таблицу:

1

Напомню, ‎что‏ ‎факториал ‎n! ‎= ‎1 ‎*‏ ‎2‏ ‎* ‎3‏ ‎*… ‎*‏ ‎n. ‎Видно, ‎что ‎для ‎получения‏ ‎каждого‏ ‎следующего‏ ‎результата ‎мы‏ ‎умножаем ‎текущее‏ ‎n ‎(сиреневое)‏ ‎на‏ ‎результат ‎n!‏ ‎предыдущего ‎шага ‎(это ‎показано ‎синими‏ ‎стрелками).

Давайте ‎посмотрим,‏ ‎как‏ ‎мы ‎можем ‎использовать‏ ‎динамическое ‎программирование‏ ‎для ‎поиска ‎количества ‎путей‏ ‎в‏ ‎графе. ‎Найдём‏ ‎количество ‎разных‏ ‎путей ‎между ‎вершинами ‎А ‎и‏ ‎F.

1) В‏ ‎начальную ‎вершину‏ ‎А ‎мы‏ ‎можем ‎попасть ‎единственным ‎путём: ‎просто‏ ‎оказаться‏ ‎там.‏ ‎Значит ‎в‏ ‎А ‎ведёт‏ ‎один ‎возможный‏ ‎путь.‏ ‎Отметим ‎его‏ ‎возле ‎начальной ‎вершины.

2) Теперь ‎на ‎каждой‏ ‎связи, ‎выходящей‏ ‎из‏ ‎А, ‎запишем ‎число,‏ ‎равное ‎сумме‏ ‎чисел, ‎входящих ‎в ‎А‏ ‎(то‏ ‎есть ‎везде‏ ‎единицы).

3) То ‎же‏ ‎самое ‎повторим ‎для ‎всех ‎следующих‏ ‎вершин:‏ ‎на ‎связях,‏ ‎выходящих ‎из‏ ‎вершины, ‎будем ‎писать ‎число, ‎равное‏ ‎сумме‏ ‎чисел‏ ‎на ‎связях,‏ ‎входящих ‎в‏ ‎эту ‎вершину.

Например, в‏ ‎D‏ ‎входит ‎одна‏ ‎единица, ‎значит ‎у ‎связи ‎D-E‏ ‎ставим ‎тоже‏ ‎единицу.‏ ‎А ‎вот ‎в‏ ‎Е ‎теперь‏ ‎входят ‎две ‎связи ‎с‏ ‎единицами,‏ ‎значит ‎на‏ ‎связях ‎Е-G‏ ‎и ‎E-H ‎поставим ‎двойки.

И ‎так‏ ‎до‏ ‎конца. ‎Главное:‏ ‎для ‎каждой‏ ‎вершины ‎нам ‎уже ‎должны ‎быть‏ ‎известны‏ ‎числа‏ ‎входящих ‎в‏ ‎неё ‎связей.

4) А‏ ‎теперь ‎самое‏ ‎вкусное.‏ ‎Посчитаем ‎сумму‏ ‎чисел ‎всех ‎связей, ‎входящих ‎в‏ ‎последнюю ‎вершину‏ ‎F‏ ‎и ‎— ‎вуаля!‏ ‎Мы ‎получили‏ ‎готовый ‎ответ:


ДОПОЛНИТЕЛЬНЫЕ ‎УСЛОВИЯ

Пусть ‎теперь‏ ‎в‏ ‎этой ‎задаче‏ ‎нам ‎нельзя‏ ‎проходить через ‎вершину ‎D. ‎Тогда ‎в‏ ‎начало‏ ‎добавим ‎ещё‏ ‎один ‎этап:‏ ‎нужно ‎вычеркнуть ‎все ‎участки ‎маршрута,‏ ‎проходящие‏ ‎через‏ ‎D.

В ‎нашем‏ ‎случае ‎пропадут‏ ‎связи ‎А-D,‏ ‎D-E‏ ‎и ‎D-G.‏ ‎Все ‎остальные ‎останутся ‎«рабочими».

Осталось ‎расставить‏ ‎числа, ‎как‏ ‎мы‏ ‎это ‎делали ‎раньше:

Видите?‏ ‎Теперь ‎из‏ ‎Е ‎выходит ‎сумма ‎1,‏ ‎потому‏ ‎что ‎связь‏ ‎D-E ‎нерабочая.‏ ‎А ‎в ‎G ‎суммируются ‎три‏ ‎связи,‏ ‎а ‎не‏ ‎четыре. ‎И‏ ‎результат ‎получился ‎5.

Для ‎задач ‎с‏ ‎дополнительными‏ ‎условиями‏ ‎результат ‎всегда‏ ‎получится ‎меньше,‏ ‎чем ‎для‏ ‎простой‏ ‎задачи ‎на‏ ‎том ‎же ‎графе.


Теперь ‎пусть ‎мы,‏ ‎наоборот, ‎обязаны‏ ‎пройти через‏ ‎вершину ‎D. ‎Значит,‏ ‎нам ‎нужно‏ ‎вычеркнуть ‎все ‎связи, ‎пройдя‏ ‎через‏ ‎которые ‎мы‏ ‎в ‎D‏ ‎не ‎попадаем.

Например, ‎A-C ‎и ‎следующая‏ ‎C-G:‏ ‎из ‎вершины‏ ‎С ‎нам‏ ‎уже ‎никак ‎не ‎вернуться ‎в‏ ‎D.‏ ‎То‏ ‎же ‎для‏ ‎A-B ‎и‏ ‎затем ‎B-F.

A-E‏ ‎вычёркиваем,‏ ‎но ‎сама‏ ‎вершина ‎Е ‎будет ‎работать, ‎ведь‏ ‎мы ‎можем‏ ‎попасть‏ ‎в ‎неё ‎из‏ ‎D ‎и‏ ‎пойти ‎дальше ‎— ‎в‏ ‎Н‏ ‎и ‎G.

1

Расставим‏ ‎числа-суммы ‎как‏ ‎раньше.

Получилось ‎ещё ‎меньше ‎— ‎4. Логично:‏ ‎чем‏ ‎меньше ‎связей‏ ‎участвует ‎в‏ ‎расчёте, ‎тем ‎меньшим ‎количеством ‎разных‏ ‎путей‏ ‎мы‏ ‎можем ‎добраться‏ ‎из ‎начальной‏ ‎вершины ‎до‏ ‎конечной.

Теперь‏ ‎вы ‎точно‏ ‎знаете, ‎как ‎решать ‎задачу ‎№‏ ‎9 ‎из‏ ‎ОГЭ‏ ‎по ‎информатике. ‎Осталось‏ ‎потренироваться!


Подарить подписку

Будет создан код, который позволит адресату получить бесплатный для него доступ на определённый уровень подписки.

Оплата за этого пользователя будет списываться с вашей карты вплоть до отмены подписки. Код может быть показан на экране или отправлен по почте вместе с инструкцией.

Будет создан код, который позволит адресату получить сумму на баланс.

Разово будет списана указанная сумма и зачислена на баланс пользователя, воспользовавшегося данным промокодом.

Добавить карту
0/2048