Занятие 1
Практическое занятие 1: Основные алгоритмические конструкции языка Python¶
Цель: Вспомнить основные алгоритмические конструкции¶
Задачи:¶
- Вспомнить основные определения
- Познакомиться с инструментом Jupyter Notebook.
- Вспомнить синтаксис и основные алгоритмические конструкции языка Python на основе библиотеки ColabTurtle.
- Попрактиковаться в написании кода на Python
Основные определения¶
Алгоритм¶
В основе программирования лежит понятие алгоритма. Если кратко, то алгоритм — это вычислимая функция. Если вам не понятно, давайте обратимся к школьному определению:
Алгоритм — это:
- последовательность команд
- на формальном языке исполнителя,
- приводящая к цели
- за конечное время.
Алгоритмические конструкции¶
- Линейный алгоритм (последовательное выполнение)
- Цикл
- Ветвление (условное выполнение)
Практические занятия будут проходить в среде Jupyter notebook, с использованием языка программирования Python.
Jupyter Notebook¶
Jupyter Notebook является мощным и удобным инструментом анализа данных, а также отлично подходит для практикума программирования на Python! Более подробную информацию Вы можете получить на странице проекта, а также воспользовавшись поисковой системой.
Python¶
Далее мы будем использовать только версию 3 языка
Снова "Hello world"¶
Простота языка Python хорошо видна на примере традиционной первой программы всех программистов (выполните ее, нажав на кнопку Run):
print('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 *
Для того, чтобы он заработал, нужно один раз установить этот модуль вот такой командой (вам необходимо выполнить следующую ячейку):
!pip3 install ColabTurtle
Код ниже подключает фукции управления Черепашкой из только что установленной библиотеки — выполните его:
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 выполните ее:
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: Нарисуйте квадрат
- Задача 2: Нарисуйте прямоугольник
- Задача 3: Нарисуйте прямоугольный треугольник
- Задача 4: Нарисуйте равностороннй треугольник
Задача 5: Напишите ФБВТ
Для этого добавьте в ячейки ниже соответствующие программы и выполните их.
Циклы и вложенные циклы¶
Одна из замечательных возможностей программирования — циклы, которые дают возможность зацикливать выполнение команд.
Для это используется две синтаксические конструкции языка: цикл while
и цикл for
.
На этом занятии мы познакомимся с простым циклом for.
Цикл for
состоит из заголовка и тела цикла:
for счётчик in значения, которые, нужно, перебрать:
команды
тела
цикла
сдвинуты
вправо
команда_вне_цикла
Команды тела цикла выполняются столько раз, сколько значений требуется перебрать в списке из заголовка. При этом текущее значение доступно в счётчике цикла.
Команды тела цикла должны быть сдвинуты вправо на 4 пробела. А первая же команда без отступа — это уже команда за пределами цикла, а значит её выполнение не будет повторяться.
Циклы удобны для рисования многоугольников. Нарисуем шестиугольник:
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()
.
from ColabTurtle.Turtle import *
initializeTurtle()
speed(5)
for side in 1, 2, 3:
forward(120)
left(120)
print("Это треугольник.")
В программе выше мы подвинули функцию print()
вправо, и теперь она стала частью тела цикла. Поэтому мы и видим надпись "Это треугольник." три раза.
Ниже пример с простым многоугольником. Обратите внимание, что форма фигуры зависит не только и не столько от количества итераций, сколько от угла поворота:
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 нарисуйте с помощью Черепашки следующие фигуры
- Задача 6: Нарисуйте квадрат
- Задача 7: Нарисуйте прямоугольник
- Задача 8: Нарисуйте окружность. Воспользуйтесь тем фактом, что правильный многоугольник с большим числом сторон будет выглядеть как окружность
Для этого добавьте в ячейки ниже соответствующие программы и выполните их.
Вложенные циклы¶
Теперь давайте посмотрим что будет, если поместить цикл из программы, рисующей треугольник, в программу для восьмиугольника. Это называется вложенные циклы:
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 нарисуйте с помощью Черепашки следующие фигуры
- Задача 9: Нарисуйте 10 вложенных квадратов
- Задача 10: Нарисуйте спираль См. теорию
- Задача 11: Нарисуйте «квадратную» спираль
Для этого добавьте в ячейки ниже соответствующие программы и выполните их.
Условное выполнение действий¶
Как видите, программный код представляет из себя уже не простую последовательность команд, но может содержать и циклы, и вложенные циклы. Однако можно поставить выполнение какой-то команды на определённое условие, и выполнять только тогда, когда оно истинно.
Синтаксис условной команды (команды ветвления) таков: пишется оператор if
, затем логическое условие, двоеточие, а затем сама команда или несколько команд, но все они должны быть сдвинуты на 4 пробела от уровня оператора if
:
if условие + выполнения > 0:
тут_условно_выполняющаяся_команда
команда_вот_тут_выполняется = по-любому
Обратите внимание, что первая же команда, которая не сдвинута на 4 пробела, выполняется всегда, без всяхких условий. Ниже программа, которая "отражает" Черепашку от горизонтальных стен — выполните программу и исследуйте используемые команды.
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())
Задачи:¶
- Задача 12: Используя идеи из программы выше, напишите программу, в которой Черепашка будет отражаться от всех четырех стен.
- Задача 13: Используя вложенные циклы, напишите программу, которая рисует прямоугольник, по каждой стороне которого находятся пятиугольники:
Для этого добавьте в ячейки ниже соответствующие программы и выполните их.
Функции¶
Функции нужны для повышения читаемости и удобства отладки кода. Пусть у нас есть последовательность команд, посредством которых Черепашка рисует на экране треугольник:
for side in range(3):
forward(120)
left(120)
Если мы хотим выполнять эту последовательность действий более одного раза (например, с разными данными), то необходимо оформить эту последовательность действий в объект типа "функция", т.к. это сокращает код и делает его более читаемым. В Python синтаксис определения функции, которая не возвращает значение, выглядит следующим образом:
def Имя_функции(аргумент 1, аргумент 2, ...):
блок команд (тело функции)
Например, ниже в ячейке Code приведен код с определением и последующим вызовом функции triangle(length)
, рисующей равносторонний треугольник со стороной length
from ColabTurtle.Turtle import *
def triangle(length):
for side in range(3):
forward(length)
left(120)
initializeTurtle()
speed(8)
triangle(120)
- Задача 15: Нарисуйте «цветок» из окружностей. Используйте функцию, рисующую окружность. Пример:
- Задача 16: Нарисуйте две звезды: одну с 5 вершинами, другую — с 11. Используйте функцию, рисующую звезду с n вершинами
Для этого добавьте в ячейки ниже соответствующие программы и выполните их.