Файл: Учебное пособие по изучению языка программировани Python Л. Самыкбаева, А. Беляев, А. Палитаев, И. Ташиев, С. Маматов.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 258

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
setheading(90)
#поворачиваем перо на 90˚
down()
#опускаем перо для начала рисования
circ(15, 10, 150)
#передаем значения параметрам
screen.mainloop()
#останавливаем выполнение программы
Кроме вывода различных фигур, в окне для графики можно рисовать текст.
Для этого используется команда write()
с множеством параметров:
write(text, move, align, font = (fontname, fontsize, fontstyle))
- в параметр text пишется сам текст в кавычках;
-
align принимает значения «left»

right»

center» и изменяет положе- ние текста относительно черепашки; значения пишутся в кавычках;
-
font
принимает значения fontname, fontsize, fontstyle:
• в fontname пишется название шрифта в кавычках;

fontsize отвечает за размер шрифта;

fontstyle отвечает за стиль текста (normal – обычный, bold

полу- жирный, italic

курсивный, bold italic

полужирный текст).

55
РАБОТА С ГРАФИКОЙ В PY THON
Задача 2. Напишем программу для вывода форматированного текста:
from
turtle
import
*
color (
'blue'
)
write(
'Мы изучаем Python'
,
'center'
, font=(
'Roboto'
, 24,
'bold italic'
))
>>>
Команды clear() и reset() очищают экран от рисунков и перемещают перо в центр.
Работа с Tkinter для создания графических объектов
Модуль Tkinter для работы с графической библиотекой Tk позволяет созда- вать программы с более продвинутой графикой и анимацией. Так же как и с модулем turtle, модуль tkinter нужно сначала подключить командой:
from
tkinter
import
*.
Задача 3. Попробуем для начала создать обычную кнопку. Для этого мы используем виджет Button, где в скобках задаем параметры кнопки.
С помощью значения text устанав- ливаем надпись на кнопке. Запишем программу:
from
tkinter
import
*
tk = Tk()
#создадим форму Tk
(объект) с именем tk
btn = Button(tk, text=
'Пуск'
)
#создадим кнопку с текстом
«Пуск»
btn.pack()
#располагаем
кнопку внутри окна
>>>
Однако при нажатии этой кнопки ничего не происхо- дит. Для того чтобы нажатие сопровождалось каким-то действием, введем в программу функцию, результат которой выведется через команду command
:
Виджеты
– это базовые блоки для создания графического интерфейса программы, неко- торые из которых стандартны во всех языках программиро- вания. Например, это виджеты кнопок, флажки или полоса прокрутки. Они могут лишь отличаться названиями: на- пример, классические флажки
(check box) в Tkinter называют- ся check button.
ЭТО ИНТЕРЕСНО!


ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PY THON
56
from
tkinter
import
*
def
btn_act
():
#добавляем функцию, которая выводит на консоли
print
(
'Игра началась!'
)
#слова «Игра началась!»
tk = Tk()
btn = Button (tk, text=
'Пуск'
, command=btn_act)
#при нажатии
на кнопку выводится сообщение из функции
btn.pack()
Теперь, после нажатия на кнопку, в консоли выведется сообщение:
>>>
«Игра началась!»
Другой виджет – Canvas (англ. холст) позволяет ри- совать на заданном холсте. Рисование начинается с указания размеров холста, а именно с указания ее ширины (width) и высоты (height).
Для обозначения стартовой точки рисунка на хол- сте используются координаты X и Y.
Координаты определяют, насколько пиксель (точка) отступает от левого края холста по горизонтали (Х) и от верхнего края холста по вертикали (Y).
Для создания линии используется метод
create_line(), где в скобках ука- зываются четыре числа. Первые два числа – это координаты начала линии, вторые два – координаты конца линии. Запишем программу:
from
tkinter
import
*
tk = Tk()
canvas = Canvas(tk, width=300, height=300)
canvas.pack()
canvas.create_line(0, 0, 300, 300)
Для создания круга используется метод create.oval():
canvas.create_oval(10, 10, 80, 80, outline=
'red'
, fill=
'green'
, width=2)
В данной записи первые 4 параметра определяют ограничивающие коор- динаты фигуры. Другими словами, это x и y координаты верхней левой и правой нижней точек квадрата, в который помещен круг.
Задача 4. Напишем программу для создания на холсте кругов, диаметры и цвета которых выбираются случайным образом.

57
РАБОТА С ГРАФИКОЙ В PY THON
from
random
import
*
#загружаем функцию randint и choice из
модуля random
from
tkinter
import
*
size = 500
#вводим переменную size
tk = Tk()
diapason = 0
#вводим переменную diapason для ограничения
кол-ва кругов
my_canvas = Canvas (tk, width=size, height=size)
#создаем
холст, используя значение переменной size
my_canvas.pack()
#распологаем холст внутри окна
while
diapason <1000:
#цикл повторяется до этого условия
color = choice([
'green'
,
'red'
,
'blue'
,
'orange'
,
'yellow'
,
'pink'
,
'purple'
,
'violet'
,
'magenta'
,
'cyan'
])
#создаем список для случайного выбора цветов кругов
x1 = randint(0,size)
#случайный выбор координат х и у
y1 = randint(0,size)
d=randint(0,size/5)
#произвольный выбор диаметра круга,
но не более size/5
my_canvas.create_oval(x1,y1,x1+d,y1+d,fill=color)
#создаем
круги и заливаем случайным цветом
tk.update()
diapason+=1
#шаг цикла, счетчик
КОМПЬЮТЕРНЫЙ ПРАКТИКУМ:
1) Нарисуйте с помощью модуля turtle ковер из кругов, где круги име­
ют один цвет, а фон ковра – другой.
2) Напишите с помощью модуля tkinter программу, которая выводит на холст линии, толщина и цвет которых выбираются случайным образом.


ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PY THON
58
14. Тема:
Рекурсия
Из курса 8 класса вы помните, что часто одна функция может вызывать другую функцию. Но функция также может вызывать и саму себя. Ситуация, когда программа вызывает сама себя непосредственно (простая рекур- сия) или косвенно (через другие функции), например, функция A вызывает функцию B, а функция B – функцию A называется рекурсией.
Заметим, что при косвенном обращении все функции в цепочке – рекур- сивные.
Популярные примеры рекурсивных объектов – фракталы. Так в матема- тике называют геометрические фигуры, обладающие самоподобием. Это значит, что они составлены из фигур меньшего размера, каждая из которых подобна целой фигуре.
Рис.1. Треугольник Серпинского (один из первых фракталов, предложенных в
1915 году польским математиком В. Серпинским).
Равносторонний треугольник делится на 4 равных треугольника меньше- го размера (левый рисунок), затем каждый из полученных треугольников, кроме центрального, снова делится на 4 еще более мелких треугольника и т.д.

59
РЕК УРСИЯ
Задача 1. Рассмотрим, как работает рекурсия на примере вычисления факториала для n!. Например, чтобы вычислить факториал числа 3, нужно
3*2*1, то есть число n*(n-1)*((n-1)-1).
def
factorial
(n):
if
n == 0:
return
1
else
:
return
n * factorial(n
- 1)
print
(factorial(3))
>>>
6
#результат
Рекурсивные функции решают много задач в программировании, но к сожалению, при их написании часто возникают ошибки. Одна из распро- страненных ошибок – это бесконечная рекурсия, когда цепочка вызовов функций никогда не завершается и продолжается, пока не закончится сво- бодная память в компьютере.
Две наиболее частые причины для бесконечной рекурсии:
Неправильная запись выхода из рекурсии. Например, если мы в про- грамме вычисления факториала забудем поставить проверку
if n ==
0
, то factorial(0) вызовет factorial(-1), тот вызовет factorial(-2) и т. д.
Неправильная запись параметров в функции. Например, если функция factorial(n) будет вызывать factorial(n), то также получится бесконечная цепочка.
Поэтому при разработке рекурсивной функции в первую очередь нужно оформить условие завершения рекурсии, которое также называется базо-
вым условием рекурсии.
Прямой и обратный ход рекурсии
Действия, выполняемые функцией до входа на следующий уровень рекур- сии, называются выполняющимися на прямом ходу рекурсии, а действия, выполняемые по возврату с более глубокого уровня к текущему, – выпол- няющимися на обратном ходу рекурсии.
Факториалом числа n назы- вается произведение всех натуральных чисел от 1 до n:
n!=1*2*3*4*...*n
Например, факториал числа
5 равен 120 (5!=1*2*3*4*5).
ВСПОМНИ


ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PY THON
60
Задача 2. Составим процедуру, которая переводит натуральное число в двоичную систему. Стандартный алгоритм перевода числа в двоичную систему можно записать, например, так:
def
printBin
( n ):
while
n!= 0:
print
(n % 2, end =
''
)
n = n // 2
printBin(14)
#для вызова функции введем для примера число 14
>>>
0111
#результат
Проблема в том, что двоичное число выводится «задом наперед», то есть первым будет выведен последний разряд.
Есть разные способы решения этой задачи, которые сводятся к тому, чтобы запоминать остатки от деления (например, в символьной строке) и затем, когда результат полностью получен, вывести его на экран.
Пробуем использовать рекурсию. Идея такова: чтобы вывести двоичную запись числа n, нужно сначала вывести двоичную запись числа n // 2, а за- тем вычислить ее остаток (n%2). Если полученное число – параметр равно нулю, нужно выйти из процедуры. Возьмем для примера число 14:
14 // 2 = 7, 7 % 2 = 1 7 // 2 = 3, 3 % 2 = 1 3 // 2 = 1, 3 % 2 = 1 1 // 2 = 0, выход
Такой алгоритм очень просто программируется. Запишем функцию с назва- нием
print_bin
:
def
print_bin
( n ):
if
n == 0:
return
0
print_bin ( n // 2 )
print
( n % 2, end =
''
)
#записывает остатки в одну
строку
printBin (14)
#для вызова функции введем для примера
число 14
>>>
1110
#результат

61
РЕК УРСИЯ
То же самое можно было сделать и с помощью цикла. Отсюда следует важный вывод: рекурсия заменяет цикл. При этом программа во многих случаях становится более понятной.
Задача 3. Запишем рекурсивную функцию для возведения числа а в сте- пень b (a**b).
При возведении числа в степень, алгоритм делает следующее:
(a *…(a * (a * (a *(a * 1)))))
Из курса математики мы знаем, что a**0 = 1.
Решение задачи:
def
func_step
(a, b):
if
b == 0:
return
1
else
:
return
a * func_step(a, b-1)
print
(func_step(2, 4))
#например, 2 в 4 степени
>>>
16
#результат
Для остановки вывода результатов бесконечной рекур- сии нужно нажать на Ctrl+C.
ЗАПОМНИ
КОМПЬЮТЕРНЫЙ ПРАКТИКУМ:
1) Дано натуральное число n. Выведите все числа от 1 до n.
2) Запишите рекурсивную функцию, которая для заданного числа n вычисляет сумму всех чисел от 1 до n.
Примеры рекурсии в жизни человека

Вы положили деньги в банк под проценты и начисленные про- центы остаются в банке на вашем счете и на них начисляют проценты.
Процесс продолжается пока вы не заберете весь вклад.

Повторяющееся отражение в зеркалах, расположенных напро- тив друг друга – это бесконечная рекурсия.
ЭТО ИНТЕРЕСНО!


ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PY THON
62
15. Тема:
Алгоритмы обработки массивов
В 7 и 8 классах вы уже начали изучать массивы, представленные в виде спи- сков, кортежей и словарей, исполнять некоторые операции с ними, вводить и выводить данные из массива.
В этой теме мы более подробно рас- смотрим основные стандартные алго- ритмы для обработки данных в масси- вах:
• поиска
• модификации
• сортировки
Поиск в массиве
Рассмотрим алгоритм поиска на примере задачи, в которой a – имя масси- ва, n – количество элементов в массиве (целое число), а переменная i будет обозначать индекс элемента списка.
Задача 1. Необходимо найти в массиве элемент, равный значению пере- менной x или сообщить, что его нет. Алгоритм решения – это просмотр всех элементов массива с первого до последнего. Как только найден эле- мент, равный x, нужно выйти из цикла и вывести результат.
Массив
– это группа пере- менных, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Каждая ячейка имеет уникальный номер – индекс.
ВСПОМНИ
СМОТРИ ТАКЖЕ
Тема 3.6
Массивы
8 класс

63
А ЛГОРИТМЫ ОБРАБОТКИ МАССИВОВ
Для этого мы используем цикл с переменной nx, перебираем все элементы массива и досрочно завершаем цикл, если найдено требуемое значение.
a = [1, 5, 4, 31, 10]
#Задан массив с вариантами значений
x =
int
(
input
(
'Введите Х: '
))
#Ввод искомого значения х
nx = 0
#Переменная nx сохраняет номер найденного элемента
for
item
in
a:
#для элементов массива a
if
item == x:
#если элемент будет равен x
nx = item
#то оно запишется в переменную nx
break
#завершает цикл
if
nx > = 1:
#переменная nx – изменилась
print
(
'Нашли!'
)
#выдает что искомое значение найдено
else
:
print
(
'Не нашли'
)
Для выхода из цикла используется оператор break, номер найденного эле- мента сохраняется в переменной «». Если ее значение осталось равным
0 (не изменилось в ходе выполнения цикла), то в массиве нет элемента, равного x.
Эту задачу можно решить еще одним способом: использовать функцию
index для массива, которая возвращает индекс первого найденного эле- мента равного x:
a = [16, 29, -5, -11, 23, 14, -7, 23, 18]
#пример массива
print
(a.index (23))
>>>
4
#результат
Если элемента в массиве нет, программа вернет ошибку и прекратит работу.
Задача 2. Найдем в массиве максимальный элемент, который должен записаться в переменную «m». Для этого надо просмотреть все элементы массива один за другим. Если очередной элемент массива больше, чем максимальный из предыдущих (находящийся в переменной «m»), запом- ним новое значение максимального элемента в «m».
Поскольку содержимое массива неизвестно, можно записать в «m» ноль или отрицательное число. Если это будет m = a[0], то цикл перебора нач- нется со второго элемента, то есть с a[1]: