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 ₽ месяц
Доступны сообщения

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

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

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

Черепаха на бумаге и в Питоне

А ‎теперь‏ ‎решим ‎ту ‎же ‎задачу ‎№‏ ‎6 ‎из‏ ‎ЕГЭ‏ ‎— ‎на ‎Черепаху‏ ‎— ‎в‏ ‎Python.


Как ‎известно, ‎в ‎прошлом‏ ‎году‏ ‎КУМИР ‎выкинули‏ ‎из ‎списка‏ ‎обязательного ‎ПО ‎для ‎экзаменационных ‎компьютеров.‏ ‎То‏ ‎есть ‎задача‏ ‎на ‎Черепаху‏ ‎есть, ‎а ‎КУМИРа ‎нет. Значит, ‎будем‏ ‎решать‏ ‎её‏ ‎при ‎помощи‏ ‎Python, ‎благо‏ ‎в ‎его‏ ‎«коробке»‏ ‎есть ‎библиотека‏ ‎turtle.

Напомню ‎классическую ‎задачу ‎на ‎Черепаху:

Черепахе‏ ‎был ‎дан‏ ‎для‏ ‎исполнения ‎следующий ‎алгоритм:‏ ‎повтори ‎9‏ ‎[вперед(5) ‎вправо ‎(60)] Постройте ‎многоугольник‏ ‎в‏ ‎среде ‎исполнителя‏ ‎«Черепаха» ‎программы‏ ‎Кумир ‎и ‎посчитайте ‎количество ‎точек‏ ‎с‏ ‎целыми ‎координатами,‏ ‎которые ‎находятся‏ ‎внутри ‎фигуры ‎(точки ‎на ‎границе‏ ‎считать‏ ‎не‏ ‎нужно).


Библиотека ‎turtle

Подключаем‏ ‎библиотеку ‎обычным‏ ‎образом. ‎Выберем‏ ‎вариант‏ ‎подключения ‎через‏ ‎псевдоним, ‎чтобы ‎сразу ‎было ‎видно,‏ ‎какие ‎элементы‏ ‎программы‏ ‎относятся ‎к ‎Черепахе,‏ ‎а ‎какие‏ ‎— ‎нет.

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


Каркас‏ ‎программы‏ ‎с ‎Черепахой:

import‏ ‎turtle ‎as‏ ‎tr

‎tr.done()‏

‎

В‏ ‎отличие ‎от‏ ‎Черепахи ‎из ‎бумажных ‎задач ‎начальное‏ ‎положение ‎turtle‏ ‎—‏ ‎носом ‎вправо. Здесь ‎мы‏ ‎установили ‎курсор‏ ‎в ‎вид ‎«черепашка».

Начало ‎координат‏ ‎—‏ ‎точка ‎(0,0)‏ ‎— ‎в‏ ‎центре ‎графического ‎окна. ‎Оси ‎координат‏ ‎направлены‏ ‎как ‎в‏ ‎математике.


Методы ‎рисования

up()‏ ‎/ ‎down(): поднять ‎хвост ‎/ ‎опустить‏ ‎хвост‏ ‎—‏ ‎Черепаха ‎рисует‏ ‎при ‎опущенном‏ ‎хвосте

goto(x, ‎y): перемещает‏ ‎Черепаху‏ ‎в ‎точку‏ ‎(х, ‎у), ‎если ‎хвост ‎опущен‏ ‎— ‎рисуется‏ ‎линия

setpos(x,‏ ‎y): перемещает ‎Черепаху ‎в‏ ‎точку ‎(х,‏ ‎у) ‎без ‎отрисовки

dot(n): ставим ‎точку‏ ‎размером‏ ‎n ‎пикселов‏ ‎(при ‎этом‏ ‎неважно, ‎опущен ‎хвост ‎или ‎поднят)

forward(n)‏ ‎/‏ ‎backward(n): движение ‎вперёд‏ ‎/ ‎назад‏ ‎на ‎n ‎пикселов

right(n) ‎/ ‎left(n): поворот‏ ‎направо‏ ‎/‏ ‎налево ‎на‏ ‎n ‎градусов


Методы‏ ‎настройки

exitonclick(): выход ‎из‏ ‎программы‏ ‎при ‎клике‏ ‎на ‎окне

shape(«turtle»): вид ‎курсора ‎(turtle ‎—‏ ‎черепашка)

tracer(n): длительность ‎отрисовки,‏ ‎мс‏ ‎(0 ‎— ‎мгновенно)

screensize(x,‏ ‎y): размер ‎графического‏ ‎окна


НеЕГЭшные ‎методы

color(«red»): цвет ‎контуров ‎(параметр‏ ‎—‏ ‎название ‎цвета)

width(n): толщина‏ ‎линий ‎в‏ ‎пикселах

clearscreen(): очищает ‎окно

pos() ‎: возвращает ‎позицию ‎Черепахи‏ ‎в‏ ‎виде ‎кортежа‏ ‎(x, ‎y)

circle®‏ ‎: рисует ‎круг ‎радиусом ‎r ‎из‏ ‎точки,‏ ‎где‏ ‎находится ‎Черепаха‏ ‎(текущая ‎точка‏ ‎— ‎это‏ ‎нижняя‏ ‎точка ‎круга,‏ ‎если ‎Черепаха ‎направлена ‎вправо)


fillcolor(«blue»): цвет ‎заливки

begin_fill(): начать‏ ‎заливку, ‎после‏ ‎этого‏ ‎замкнутая ‎фигура ‎будет‏ ‎закрашена ‎выбранным‏ ‎в ‎.fillcolor ‎цветом

end_fill(): остановить ‎заливку


Вывод‏ ‎текста

write(txt,‏ ‎move=False, ‎align="left»,‏ ‎font=(«Arial», ‎12,‏ ‎«normal»)

где

txt ‎— выводимый ‎текст

move ‎— перемещать ‎ли‏ ‎курсор‏ ‎после ‎вывода‏ ‎текста

align ‎= «left»‏ ‎/ ‎«center» ‎/ ‎«right»

font ‎— описание‏ ‎шрифта:‏ ‎кортеж‏ ‎из ‎трёх‏ ‎элементов ‎—‏ ‎гарнитура, ‎размер‏ ‎в‏ ‎пикселах, ‎начертание


Несколько‏ ‎Черепах

Основной ‎объект ‎библиотеки ‎turtle ‎—‏ ‎это ‎Turtle.‏ ‎Мы‏ ‎можем ‎создавать ‎экземпляры‏ ‎этого ‎объекта,‏ ‎чтобы ‎использовать ‎несколько ‎Черепах‏ ‎с‏ ‎разными ‎свойствами:

t1‏ ‎= ‎Turtle()‏
‎t1.color('red')
‎t1.width(3)
‎t1.forward(100)
‎t1.right(90)

‎t2‏ ‎=‏ ‎Turtle()
‎t2.color('green')‏
‎t2.width(1)
‎t2.left(90)‏
‎t2.forward(200)

‎


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


Давайте‏ ‎решим‏ ‎всё ‎ту ‎же‏ ‎задачу ‎№‏ ‎6 ‎на ‎количество ‎точек‏ ‎внутри‏ ‎фигуры.


Вначале ‎переписываем‏ ‎заданную ‎программу

повтори‏ ‎9 ‎[вперед(5) ‎вправо ‎(60)]

‎

при‏ ‎помощи‏ ‎turtle

import ‎turtle‏ ‎as ‎tr‏

‎# ‎устанавливаем ‎черепаху ‎носом ‎вверх,‏ ‎как‏ ‎в‏ ‎задаче
‎tr.left(90)‏

‎# ‎переписываем‏ ‎программу ‎из‏ ‎задачи‏
‎for ‎_‏ ‎in ‎range(9):
    ‎tr.forward(5)
    ‎tr.right(60)
   
‎tr.done()‏
‎

Однако ‎мы‏ ‎обнаружим,‏ ‎что ‎Черепаха ‎нарисовала‏ ‎что-то ‎совсем‏ ‎крошечное. ‎Правильно, ‎ведь ‎параметр‏ ‎методов‏ ‎forward/backward ‎задаётся‏ ‎в ‎пикселах.


Добавим‏ ‎коэффициент ‎укрупнения, на ‎который ‎будем ‎умножать‏ ‎каждый‏ ‎отрезок ‎(но,‏ ‎конечно, ‎не‏ ‎угол ‎😄). ‎Заодно ‎отметим ‎начало‏ ‎координат,‏ ‎чтобы‏ ‎понять, ‎в‏ ‎какой ‎части‏ ‎плоскости ‎оказалась‏ ‎наша‏ ‎фигура.

import ‎turtle‏ ‎as ‎tr

‎# ‎устанавливаем ‎черепаху‏ ‎носом ‎вверх,‏ ‎как‏ ‎в ‎задаче
‎tr.left(90)‏
‎# ‎нарисуем‏ ‎точку ‎в ‎начале ‎координат‏
‎tr.dot(5)‏

‎# ‎коэффициент‏ ‎укрупнения
‎k‏ ‎= ‎30

‎# ‎переписываем ‎программу‏ ‎из‏ ‎задачи
‎for‏ ‎_ ‎in‏ ‎range(9):
    ‎tr.forward(5*k)
    ‎tr.right(60)
   
‎tr.done()

‎

Черепаха‏ ‎нарисовала‏ ‎шестиугольник, да‏ ‎ещё ‎и‏ ‎повторно ‎прошлась‏ ‎по ‎трём‏ ‎его‏ ‎сторонам. ‎Действительно,‏ ‎шагов ‎цикла-то ‎9!

Вся ‎фигура ‎оказалась‏ ‎справа ‎от‏ ‎начала‏ ‎координат. ‎Здесь ‎мы‏ ‎и ‎будем‏ ‎рисовать ‎точки, ‎которые ‎потом‏ ‎посчитаем‏ ‎внутри ‎фигуры.‏ ‎При ‎этом‏ ‎используем ‎тот ‎же ‎коэффициент ‎укрупнения‏ ‎k,‏ ‎чтобы ‎набросать‏ ‎точки ‎с‏ ‎целочисленными ‎координатами.

Заодно ‎давайте ‎сделаем ‎точки‏ ‎синими,‏ ‎чтобы‏ ‎чётко ‎видеть,‏ ‎где ‎фигуры,‏ ‎а ‎где‏ ‎точки.

import‏ ‎turtle ‎as‏ ‎tr

‎# ‎устанавливаем ‎черепаху ‎носом‏ ‎вверх, ‎как‏ ‎в‏ ‎задаче
‎tr.left(90)
‎#‏ ‎нарисуем ‎точку‏ ‎в ‎начале ‎координат
‎tr.dot(5)‏

‎#‏ ‎коэффициент ‎укрупнения‏
‎k ‎=‏ ‎30

‎# ‎переписываем ‎программу ‎из‏ ‎задачи‏
‎for ‎_‏ ‎in ‎range(9):‏
    ‎tr.forward(5*k)
    ‎tr.right(60)

‎# ‎нарисуем ‎сетку‏ ‎из‏ ‎точек‏ ‎0..10 ‎по‏ ‎х ‎и‏ ‎-10..10 ‎по‏ ‎у‏
‎tr.up()
‎tr.color('blue')‏

‎for ‎x ‎in ‎range(10+1):
    ‎for‏ ‎y ‎in‏ ‎range(-10,‏ ‎10+1):
        ‎tr.setpos(x*k, ‎y*k)‏
        ‎tr.dot(3)
   
‎tr.done()‏

‎


Теперь ‎подсчитываем ‎точки, ‎попавшие‏ ‎внутрь‏ ‎шестиугольника. ‎Получаем‏ ‎62 штуки, ‎как‏ ‎при ‎решении ‎через ‎КУМИР.

Если ‎хочется,‏ ‎можно‏ ‎нарисовать ‎не‏ ‎точки, ‎а‏ ‎сетку ‎— ‎клеточки. ‎Попробуйте! ‎У‏ ‎вас‏ ‎есть‏ ‎все ‎нужные‏ ‎инструменты ‎😉


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

Черепаха на бумаге и в КУМИРе

Разберёмся, ‎как‏ ‎решать ‎задачу ‎№ ‎6 ‎ЕГЭ‏ ‎по ‎информатике,‏ ‎а‏ ‎также ‎свеженькую ‎задачу‏ ‎ВПР ‎по‏ ‎информатике ‎для ‎8 ‎классов.


КУМИР‏ ‎— это‏ ‎учебная ‎система,‏ ‎в ‎которой‏ ‎реализован ‎пресловутый ‎«алгоритмический ‎язык» ‎программирования‏ ‎(где‏ ‎операторы ‎по-русски)‏ ‎и ‎множество‏ ‎графических ‎исполнителей. ‎Разработал ‎её ‎институт‏ ‎ФГУ‏ ‎ФНС‏ ‎НИИСИ ‎РАН,‏ ‎и ‎она‏ ‎бесплатна.

На ‎самом‏ ‎деле,‏ ‎весьма ‎прикольная‏ ‎система, ‎на ‎которой ‎отлично ‎изучать‏ ‎алгоритмику ‎в‏ ‎5-7‏ ‎классах.

Составители ‎задач ‎любят‏ ‎использовать ‎исполнителей‏ ‎КУМИР. ‎В ‎ОГЭ ‎много‏ ‎лет‏ ‎существует ‎задача‏ ‎на ‎Робота,‏ ‎а ‎в ‎ЕГЭ ‎последних ‎лет‏ ‎добавили‏ ‎Черепаху. ‎(Правда,‏ ‎при ‎этом‏ ‎запретили ‎ставить ‎на ‎экзаменационные ‎компьютеры‏ ‎КУМИР‏ ‎—‏ ‎интересный ‎такой‏ ‎подход.) ‎В‏ ‎ВПР ‎нынешнего‏ ‎года‏ ‎всё ‎ещё‏ ‎круче: ‎там ‎есть ‎и ‎Робот,‏ ‎и ‎Черепаха,‏ ‎и‏ ‎даже ‎Чертежник.

Но ‎вот‏ ‎беда: ‎когда‏ ‎в ‎задаче ‎нам ‎предлагают‏ ‎программу‏ ‎исполнителя ‎—‏ ‎это ‎не‏ ‎КУМИРовский ‎исполнитель. Команды ‎не ‎совпадают, ‎синтаксис‏ ‎другой.

Такое‏ ‎ощущение, ‎что‏ ‎составители ‎застряли‏ ‎на ‎версии ‎КУМИР ‎какого-нибудь ‎лохматого‏ ‎года,‏ ‎потому‏ ‎что ‎«бумажные»‏ ‎команды ‎нам‏ ‎дают ‎одни‏ ‎и‏ ‎те ‎же.‏ ‎И ‎они ‎всегда ‎не ‎совпадали‏ ‎с ‎реальными.


Давайте‏ ‎посмотрим.‏ ‎Вот ‎классическая ‎задача‏ ‎на ‎Черепаху:

Черепахе‏ ‎был ‎дан ‎для ‎исполнения‏ ‎следующий‏ ‎алгоритм:
повтори ‎9‏ ‎[вперед(5) ‎вправо‏ ‎(60)]
Постройте ‎многоугольник ‎в ‎среде ‎исполнителя‏ ‎«Черепаха»‏ ‎программы ‎Кумир‏ ‎и ‎посчитайте‏ ‎количество ‎точек ‎с ‎целыми ‎координатами,‏ ‎которые‏ ‎находятся‏ ‎внутри ‎фигуры‏ ‎(точки ‎на‏ ‎границе ‎считать‏ ‎не‏ ‎нужно).


Однако, ‎если‏ ‎мы ‎попытаемся ‎перебить ‎программу ‎в‏ ‎КУМИР, ‎получим‏ ‎бэмц‏ ‎в ‎виде ‎красных‏ ‎надписей.


Команды ‎вперед(n)‏ ‎и ‎вправо(m) ‎/ ‎влево(m)‏ ‎у‏ ‎кумировской ‎Черепахи‏ ‎аналогичны ‎задаче.‏ ‎Первая ‎заставляет ‎Черепаху ‎проползти ‎n‏ ‎единиц,‏ ‎вторые ‎поворачивает‏ ‎её ‎направо/налево‏ ‎на ‎m ‎градусов, ‎причём ‎относительно‏ ‎собственного‏ ‎«носа»‏ ‎Черепахи, ‎а‏ ‎не ‎нас.‏ ‎Правда, ‎каждую‏ ‎команду‏ ‎нужно ‎писать‏ ‎на ‎отдельной ‎строке, ‎а ‎не‏ ‎кучей, ‎как‏ ‎в‏ ‎задании.

А ‎вот ‎цикл‏ ‎с ‎фиксированным‏ ‎количеством ‎шагов ‎в ‎КУМИРе‏ ‎выглядит‏ ‎совершенно ‎иначе:

нц‏ ‎х ‎раз‏
    ‎команды
‎кц

‎

где ‎х ‎—‏ ‎количество‏ ‎шагов ‎цикла,‏ ‎а ‎команды‏ ‎— ‎любой ‎набор ‎команд ‎вперед‏ ‎и‏ ‎вправо/влево‏ ‎(каждая ‎команда‏ ‎на ‎своей‏ ‎строке, ‎помните?).


При‏ ‎этом‏ ‎у ‎любой‏ ‎программы ‎в ‎КУМИРе ‎есть ‎чёткая‏ ‎структура:

алг
‎нач‏
    ‎команды‏ ‎программы
‎кон

‎


К‏ ‎тому ‎же‏ ‎в ‎начале ‎каждой ‎программы‏ ‎исполнителя‏ ‎мы ‎обязаны‏ ‎написать

использовать ‎Исполнитель‏

‎

то ‎есть ‎в ‎нашем ‎случае

использовать‏ ‎Черепаха‏

‎

иначе ‎КУМИР‏ ‎не ‎найдёт‏ ‎нужных ‎команд ‎и ‎опять-таки ‎вывалит‏ ‎красные‏ ‎ошибки.


Перепишем‏ ‎получившуюся ‎программу,‏ ‎запустим ‎и…‏ ‎Черепаха ‎что-то‏ ‎там‏ ‎переморгнёт ‎в‏ ‎окне ‎с ‎сеткой ‎и ‎ничего‏ ‎не ‎нарисует.‏ ‎Да‏ ‎что ‎происходит-то?!


Дело ‎в‏ ‎том, ‎что‏ ‎Черепаха ‎рисует ‎хвостом. И, ‎чтобы‏ ‎оставлять‏ ‎за ‎собой‏ ‎след, ‎хвост‏ ‎должен ‎быть ‎опущен. ‎По ‎умолчанию‏ ‎он‏ ‎задран, ‎в‏ ‎отличие ‎от‏ ‎«бумажных» ‎задач. ‎Для ‎хвоста ‎у‏ ‎Черепахи‏ ‎есть‏ ‎ещё ‎две‏ ‎команды:

опустить ‎хвост‏
‎поднять ‎хвост‏

‎


Вот‏ ‎правильная ‎программа‏ ‎для ‎кумировской ‎черепахи.

использовать ‎Черепаха
‎алг‏
‎нач
    ‎опустить‏ ‎хвост‏
    ‎нц ‎9 ‎раз‏
        ‎вперед(5)
        ‎вправо(60)‏
    ‎кц
‎кон
‎


А ‎вот‏ ‎результат:



Ну‏ ‎и ‎сравните‏ ‎этот ‎код‏ ‎с ‎тем, ‎что ‎дан ‎в‏ ‎задаче‏ ‎🤷‍♀️


Но, ‎раз‏ ‎уж ‎мы‏ ‎начали ‎работать ‎с ‎этой ‎задачей,‏ ‎давайте‏ ‎её‏ ‎добьём.

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


Дело‏ ‎в ‎том,‏ ‎что ‎по‏ ‎умолчанию ‎КУМИР ‎показывает ‎поле ‎в‏ ‎автомасштабе‏ ‎—‏ ‎подстраивается ‎под‏ ‎размер ‎окна.‏ ‎И ‎клеточки‏ ‎могут‏ ‎оказаться ‎любого‏ ‎размера. ‎А ‎нам ‎нужно, ‎чтобы‏ ‎строго ‎1:1.

Давайте‏ ‎переустановим‏ ‎масштаб:

► Тыкаем ‎в ‎кнопку-бургер‏ ‎(с ‎тремя‏ ‎полосками)

► Снимаем ‎флажок ‎«авто»

► Вписываем ‎в‏ ‎поле‏ ‎«Сетка» ‎значение‏ ‎1.0

Можно ‎ещё‏ ‎ткнуть ‎в ‎пустую ‎кнопку ‎возле‏ ‎«бургера»‏ ‎— ‎тогда‏ ‎Черепаха ‎превратится‏ ‎в ‎каплю ‎и ‎не ‎будет‏ ‎мешать‏ ‎нам‏ ‎считать ‎точки.


1


Видали!‏ ‎Точек ‎внутри‏ ‎фигуры ‎стало‏ ‎гораздо‏ ‎больше. ‎Если‏ ‎посчитать ‎(потыкав ‎карандашиком, ‎ага ‎😊),‏ ‎окажется, ‎что‏ ‎их‏ ‎14 ‎+ ‎6*8‏ ‎= ‎62 штуки.‏ ‎Вот ‎и ‎ответ.


Но ‎это‏ ‎ещё‏ ‎не ‎всё.‏ ‎Для ‎ЕГЭ‏ ‎нам ‎придётся ‎ту ‎же ‎задачу‏ ‎решать‏ ‎при ‎помощи‏ ‎Python. ‎Но‏ ‎об ‎этом ‎поговорим ‎чуть ‎позже.


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

Сборник «Азы Python»

Все ‎видеошпаргалки‏ ‎по ‎азам ‎программирования ‎на ‎Python.‏ ‎От ‎первой‏ ‎программы‏ ‎до ‎управляющих ‎структур.

1. Первая‏ ‎программа ‎на‏ ‎Python

Чуть ‎больше, ‎чем ‎«Hello,‏ ‎world».


2. Среды‏ ‎разработки ‎на‏ ‎Python

PyCharm, ‎IDLE‏ ‎Python ‎и ‎онлайн-песочница


3. Типы ‎данных. ‎Арифметика

► Целочисленные,‏ ‎вещественные,‏ ‎строковые ‎значения.

► Арифметические‏ ‎операторы.

► Простые ‎вычисления.


4. Переменные.‏ ‎Присваивание

► Именование ‎и ‎объявление ‎переменных

► Оператор ‎присваивания

► Полезные‏ ‎фишки‏ ‎Python‏ ‎(сокращённые ‎операторы‏ ‎присваивания, ‎множественное‏ ‎присваивание, ‎обмен‏ ‎переменных‏ ‎значениями)


5. Вывод ‎в‏ ‎консоль


6. Ввод ‎данных

► И ‎преобразование ‎введённого ‎значения‏ ‎к ‎числовому


7. Условия.‏ ‎Ветвление

► Логические‏ ‎выражения ‎в ‎Python

► Оператор‏ ‎ветвления


8. Циклы. ‎Цикл‏ ‎while

► Типы ‎циклов ‎в ‎алгоритмике‏ ‎и‏ ‎программировании

► Цикл ‎while‏ ‎в ‎Python

► Зацикливание‏ ‎и ‎«игровой ‎цикл»


9. Директивы ‎exit, ‎break,‏ ‎continue,‏ ‎else ‎для‏ ‎циклов

Директивы, ‎позволяющие‏ ‎прервать ‎всю ‎программу ‎(или ‎функцию),‏ ‎цикл,‏ ‎текущий‏ ‎шаг ‎цикла.‏ ‎Else ‎срабатывает,‏ ‎если ‎цикл‏ ‎завершился‏ ‎штатно ‎(не‏ ‎при ‎помощи ‎break).


10. Цикл ‎for

► Цикл ‎с‏ ‎параметром

► Функция-генератор ‎range


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

Полный разбор демо-25 ВПР по информатике для 8 классов

Несмотря ‎на‏ ‎то, ‎что ‎писать ‎будут ‎восьмые,‏ ‎в ‎ВПР‏ ‎присутствуют‏ ‎задачи ‎из ‎ОГЭ,‏ ‎из ‎старого‏ ‎ЕГЭ ‎и ‎(!) ‎из‏ ‎нынешнего‏ ‎ЕГЭ. ‎В‏ ‎общем, ‎всё‏ ‎весело.

Восьмиклашкам ‎— ‎обязательно. ‎Девятиклашкам ‎точно‏ ‎будет‏ ‎полезно. ‎ЕГЭшникам‏ ‎— ‎только‏ ‎задачка ‎про ‎Черепаху.

На ‎данный ‎момент‏ ‎это‏ ‎самое‏ ‎длинное ‎моё‏ ‎видео: ‎более‏ ‎полутора ‎часов.‏ ‎Метки‏ ‎присутствуют.

Тайм-коды:

► 0:00:00 — Вступление

► 0:03:00 — Задачи ‎№‏ ‎1-№ ‎4. ‎Системы ‎счисления:

• перевод ‎чисел‏ ‎между ‎системами‏ ‎счисления,

• найти‏ ‎число, ‎удовлетворяющее ‎неравенству,

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

► 0:23:55 — Задачи ‎№ ‎5-№‏ ‎7.‏ ‎Алгебра ‎логики:

• найти‏ ‎слово ‎по‏ ‎логическому ‎условию;

• заполнить ‎таблицу ‎истинности ‎заданного‏ ‎выражения‏ ‎(с ‎учётом‏ ‎приоритетов ‎выполнения).

► 0:41:35 — Задача‏ ‎№ ‎8. ‎Числовые ‎алгоритмы: ‎составить‏ ‎программу‏ ‎исполнителя‏ ‎из ‎заданного‏ ‎количества ‎команд.

► 0:47:12 — Задача‏ ‎№ ‎9.‏ ‎Чертежник:‏ ‎найти ‎команду,‏ ‎на ‎которую ‎можно ‎заменить ‎всю‏ ‎программу.

► 0:49:21 — Задача ‎№‏ ‎10.‏ ‎Количество ‎запусков ‎программы:‏ ‎анализ ‎программного‏ ‎кода.

► 0:59:19 — Задача ‎№ ‎11. ‎Исполнитель‏ ‎КУМИР‏ ‎Черепаха: ‎переписать‏ ‎программу ‎правильными‏ ‎командами, ‎подсчитать ‎количество ‎точек ‎с‏ ‎целочисленными‏ ‎координатами, ‎попавших‏ ‎внутрь ‎нарисованной‏ ‎фигуры.

► 1:11:56 — Задачи ‎№ ‎12 ‎и ‎№‏ ‎13.‏ ‎Исполнитель‏ ‎КУМИР ‎Робот:‏ ‎написать ‎программу,‏ ‎закрашивающую ‎клетки‏ ‎лабиринта‏ ‎по ‎заданной‏ ‎схеме. ‎Разберёмся, ‎как ‎решить ‎обе‏ ‎задачи ‎одной‏ ‎программой.

________________________________

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

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

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

Читать: 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