Занятие 1

Практическое занятие 1: Основные алгоритмические конструкции языка Python

Цель: Вспомнить основные алгоритмические конструкции

Задачи:

  1. Вспомнить основные определения
  2. Познакомиться с инструментом Jupyter Notebook.
  3. Вспомнить синтаксис и основные алгоритмические конструкции языка Python на основе библиотеки ColabTurtle.
  4. Попрактиковаться в написании кода на Python

Основные определения

Алгоритм

В основе программирования лежит понятие алгоритма. Если кратко, то алгоритм — это вычислимая функция. Если вам не понятно, давайте обратимся к школьному определению:

Алгоритм — это:

  1. последовательность команд
  2. на формальном языке исполнителя,
  3. приводящая к цели
  4. за конечное время.

Алгоритмические конструкции

  1. Линейный алгоритм (последовательное выполнение)
  2. Цикл
  3. Ветвление (условное выполнение)

Практические занятия будут проходить в среде Jupyter notebook, с использованием языка программирования Python.

Jupyter Notebook

Jupyter Notebook является мощным и удобным инструментом анализа данных, а также отлично подходит для практикума программирования на Python! Более подробную информацию Вы можете получить на странице проекта, а также воспользовавшись поисковой системой.

Python

Далее мы будем использовать только версию 3 языка

Снова "Hello world"

Простота языка Python хорошо видна на примере традиционной первой программы всех программистов (выполните ее, нажав на кнопку Run):

In [9]:
print('Hello  World!')
Hello  World!

Сравним ее с той же программой на языке C:

#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("Hello, World!\n");
    return 0;
}

Лаконичность кода Python становится еще более очевидной из сравнения основных алгоритмических конструкций языка Python и, например, языка C:

Язык Python — цикл for:

sum = 0
for i in range(5):
    sum += i
   print("sum = ", sum)

Язык C — цикл for:

#include <stdio.h>
int sum = 0;
int main(int argc, char* argv[])
{
    for(int i = 0; i < 5; i++)
    {
        sum += i;
    }
    printf("sum = %d", sum);
    return 0;
}

Язык Python — ветвление:

a = 16
b = 7

if a > b:
    max = a
else:
    max = b

print("max = ", max)

Язык C — ветвление:

#include <stdio.h>
int max, a = 16, b = 7;
int main(int argc, char* argv[])
{
    if(a > b)
    {
        max = a;
    }
    else
    {
        max = b;
    }
    printf("max = %d", max);
    return 0;
}

Синтаксис Python с Черепашкой

Вспоминать синтаксис и основные алгоритмические конструкции мы будем на базе языка Python с помощью Черепашки — исполнителя, реализованного в модуле ColabTurtle. В интерактивном режиме, при запуске программы на компьютере пользователя, должен быть использован оригинальный модуль turtle. Он подключается так:

from turtle import *

Однако, на наших практических занятиях мы будем пользоваться модулем ColabTurtle, который работает прямо в Jupyter Notebook и в Google Colab. Он подключается так:

from ColabTurtle.Turtle import *

Для того, чтобы он заработал, нужно один раз установить этот модуль вот такой командой (вам необходимо выполнить следующую ячейку):

In [1]:
!pip3 install ColabTurtle
Collecting ColabTurtle
  Downloading ColabTurtle-2.1.0.tar.gz (6.8 kB)
Using legacy 'setup.py install' for ColabTurtle, since package 'wheel' is not installed.
Installing collected packages: ColabTurtle
    Running setup.py install for ColabTurtle: started
    Running setup.py install for ColabTurtle: finished with status 'done'
Successfully installed ColabTurtle-2.1.0
WARNING: You are using pip version 21.2.3; however, version 22.2.2 is available.
You should consider upgrading via the 'C:\Users\ICPC-NB-XX\AppData\Local\Programs\Python\Python310\python.exe -m pip install --upgrade pip' command.

Код ниже подключает фукции управления Черепашкой из только что установленной библиотеки — выполните его:

In [2]:
from ColabTurtle.Turtle import *

Команды исполнителя Черепаха

Модуль ColabTurtle содержит набор функций, позволяющих управлять Черепашкой — исполнителем, рисующим на экране. Основные команды нашей Черепашки те же, что и у классического исполнителя, а именно:

КомандаДействие
forward(X)Пройти вперёд X пикселей
backward(X)Пройти назад X пикселей
left(X)Повернуться налево на X градусов
right(X)Повернуться направо на X градусов
penup()Не оставлять след при движении
pendown()Оставлять след при движении
shape(X)Изменить значок черепахи (“turtle”, “circle”)
color()Установить цвет
width()Установить толщину линии
goto(x, y)Переместить черепашку в точку (x, y)

С полным набором команд можно ознакомиться по ссылке

Например, следующая программа рисует букву S выполните ее:

In [12]:
initializeTurtle()

speed(3)
pensize(3)

right(90)
forward(50)
left(90)
forward(50)
left(90)
forward(50)
right(90)
forward(50)
right(90)
forward(50)

Приведенный выше код является примером линейного алгоритма — команды выполняются друг за другом, каждая только один раз.

Задачи:

С использованием простой последовательности команд (линейного алгоритма) нарисуйте с помощью Черепашки следующие фигуры

  1. Задача 1: Нарисуйте квадрат
  2. Задача 2: Нарисуйте прямоугольник
  3. Задача 3: Нарисуйте прямоугольный треугольник
  4. Задача 4: Нарисуйте равностороннй треугольник
  5. Задача 5: Напишите ФБВТ

    Для этого добавьте в ячейки ниже соответствующие программы и выполните их.

In [ ]:

In [ ]:

In [ ]:

In [ ]:

In [ ]:

Циклы и вложенные циклы

Одна из замечательных возможностей программирования — циклы, которые дают возможность зацикливать выполнение команд.

Для это используется две синтаксические конструкции языка: цикл while и цикл for. На этом занятии мы познакомимся с простым циклом for.

Цикл for состоит из заголовка и тела цикла:

for счётчик in значения, которые, нужно, перебрать:
    команды
    тела
    цикла
    сдвинуты
    вправо
команда_вне_цикла

Команды тела цикла выполняются столько раз, сколько значений требуется перебрать в списке из заголовка. При этом текущее значение доступно в счётчике цикла.

Команды тела цикла должны быть сдвинуты вправо на 4 пробела. А первая же команда без отступа — это уже команда за пределами цикла, а значит её выполнение не будет повторяться.

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

In [3]:
from ColabTurtle.Turtle import *
initializeTurtle()
speed(5)
for step in 1, 2, 3, 4, 5, 6, 7, 8:
    forward(120)
    right(360 / 8)
print("Это восьмиугольник.")
Это восьмиугольник.

Обратите внимание, что команды движения вперёд и поворота направо написаны один раз, а выполнились восемь раз.

Однократное выполнение команд тела цикла называется итерацией. Допустимо говорить так: "в цикле восемь итераций", "на первой итерации рисуется первое ребро", "на последней итерации ломаная замыкается в восьмиугольник".

Также мы увидели результат функции печати текста print().

In [14]:
from ColabTurtle.Turtle import *
initializeTurtle()
speed(5)
for side in 1, 2, 3:
    forward(120)
    left(120)
    print("Это треугольник.")
Это треугольник.
Это треугольник.
Это треугольник.

В программе выше мы подвинули функцию print() вправо, и теперь она стала частью тела цикла. Поэтому мы и видим надпись "Это треугольник." три раза.

Ниже пример с простым многоугольником. Обратите внимание, что форма фигуры зависит не только и не столько от количества итераций, сколько от угла поворота:

In [4]:
from ColabTurtle.Turtle import *
initializeTurtle()
speed(5)

for step in range(10):
    forward(120)
    right(45)

Угол 45 градусов является "внешним" углом восьмиугольником, поэтому получается восьмиугольник, хотя итераций и 10 штук. В данной программе количество итераций формируется с помощью функции range(10) — функция формирует последовательность 0, 1, 2, ... 9, по которой "пробегается" переменная цикла step.

Задачи:

С использованием цикла for нарисуйте с помощью Черепашки следующие фигуры

  1. Задача 6: Нарисуйте квадрат
  2. Задача 7: Нарисуйте прямоугольник
  3. Задача 8: Нарисуйте окружность. Воспользуйтесь тем фактом, что правильный многоугольник с большим числом сторон будет выглядеть как окружность

Для этого добавьте в ячейки ниже соответствующие программы и выполните их.

In [ ]:

In [ ]:

In [ ]:

Вложенные циклы

Теперь давайте посмотрим что будет, если поместить цикл из программы, рисующей треугольник, в программу для восьмиугольника. Это называется вложенные циклы:

In [9]:
from ColabTurtle.Turtle import *
initializeTurtle()
speed(5)

for step in range(8):
    forward(60)
    right(360 / 8)
    for side in range(3):
        forward(60)
        left(120)

Задачи:

С использованием цикла for нарисуйте с помощью Черепашки следующие фигуры

  1. Задача 9: Нарисуйте 10 вложенных квадратов
  2. Задача 10: Нарисуйте спираль См. теорию
  3. Задача 11: Нарисуйте «квадратную» спираль

Для этого добавьте в ячейки ниже соответствующие программы и выполните их.

In [ ]:

In [ ]:

In [ ]:

Условное выполнение действий

Как видите, программный код представляет из себя уже не простую последовательность команд, но может содержать и циклы, и вложенные циклы. Однако можно поставить выполнение какой-то команды на определённое условие, и выполнять только тогда, когда оно истинно.

Синтаксис условной команды (команды ветвления) таков: пишется оператор if, затем логическое условие, двоеточие, а затем сама команда или несколько команд, но все они должны быть сдвинуты на 4 пробела от уровня оператора if:

if условие + выполнения > 0:
    тут_условно_выполняющаяся_команда
команда_вот_тут_выполняется = по-любому

Обратите внимание, что первая же команда, которая не сдвинута на 4 пробела, выполняется всегда, без всяхких условий. Ниже программа, которая "отражает" Черепашку от горизонтальных стен — выполните программу и исследуйте используемые команды.

In [10]:
from ColabTurtle.Turtle import *
initializeTurtle()
speed(8)
goto(300, 100)
face(170)
for step in range(200):
    forward(10)
    if getx() < 0 or getx() > 800:
        face(180 - heading())

Задачи:

  1. Задача 12: Используя идеи из программы выше, напишите программу, в которой Черепашка будет отражаться от всех четырех стен.
  2. Задача 13: Используя вложенные циклы, напишите программу, которая рисует прямоугольник, по каждой стороне которого находятся пятиугольники: Case13.png

Для этого добавьте в ячейки ниже соответствующие программы и выполните их.

In [ ]:

In [ ]:

Функции

Функции нужны для повышения читаемости и удобства отладки кода. Пусть у нас есть последовательность команд, посредством которых Черепашка рисует на экране треугольник:

for side in range(3):
    forward(120)
    left(120)

Если мы хотим выполнять эту последовательность действий более одного раза (например, с разными данными), то необходимо оформить эту последовательность действий в объект типа "функция", т.к. это сокращает код и делает его более читаемым. В Python синтаксис определения функции, которая не возвращает значение, выглядит следующим образом:

def Имя_функции(аргумент 1, аргумент 2, ...):
    блок команд (тело функции)

Например, ниже в ячейке Code приведен код с определением и последующим вызовом функции triangle(length), рисующей равносторонний треугольник со стороной length

In [14]:
from ColabTurtle.Turtle import *
def triangle(length):
    for side in range(3):
        forward(length)
        left(120)

initializeTurtle()
speed(8)

triangle(120)

Задачи:

  1. Задача 14: Нарисуйте 10 вложенных правильных многоугольников. Используйте функцию, рисующую правильный n-угольник. Формулы для нахождения радиуса описанной окружности. Пример: Case14.png
  1. Задача 15: Нарисуйте «цветок» из окружностей. Используйте функцию, рисующую окружность. Пример: Case15.png
  2. Задача 16: Нарисуйте две звезды: одну с 5 вершинами, другую — с 11. Используйте функцию, рисующую звезду с n вершинами

Для этого добавьте в ячейки ниже соответствующие программы и выполните их.

In [ ]:

In [ ]:

In [ ]: