Примеры задач
Пройти первые 25 уроков и попробовать написать первые программы можно бесплатно. Для этого нужно толькозарегистрироваться
Ниже вы найдете примеры задач, которые пройдете ближе к концу курса. Разумеется, все темы, которые необходимы для их решения, есть в курсе.
Пример № 1. Рикошетящие круги.
Перед тем, как начать делать это задание, перейдите на урок «Бесконечный цикл» из раздела «Цикл while и модули». Прочитайте условия и вспомните, как вы сделали «летающий» туда-сюда прямоугольник.
В этом уроке надо написать программу, которая будет рисовать рикошетящие круги. Выглядеть это должно примерно так:
Размеры холста в этом уроки должны быть 400 на 400 пикселей. Для изменения размеров холста нужно передать именованные аргументы width
и height
в вызов Canvas
.
Первым делом объявите пустой список, например circles
. Кругов должно быть 5, поэтому после объявления списка сделайте цикл for
или while
на 5 итераций.
В каждой итерации в список circles
должен добавляться словарь с тремя ключами: "dx"
и "dy"
для шагов передвижения по горизонтали и вертикали, а также "id"
для хранения идентификатора.
В ключ "id"
должен быть записан идентификатор, который вернет метод create_oval
. Размеры кругов могут быть любыми, главное, чтобы это были круги. То есть их размеры по вертикали и горизонтали должны быть одинаковыми. Начальные координаты кругов должны быть случайными. Для генерации случайных координат используйте функцию randint
из модуля random
. Важно, чтобы круги не выходили за пределы холста.
Каждый круг должен быть закрашен случайным цветом. Для того чтобы закрасить круг, в метод create_oval
нужно передать именованный аргумент fill
.
canvas.create_oval(100, 100, 200, 200, fill='red')
Все доступные в tkinter
цвета можно посмотреть здесь. Для того чтобы каждый круг закрашивался в случайный цвет, можно создать список colors
, добавить туда несколько понравившихся цветов, а затем выбирать из этого списка случайный элемент при помощи функции choice
модуля random
.
Значения ключей "dx"
и "dy"
должны быть случайными целыми числами в промежутке от -10
до 10
. Для их генерации используйте все ту же функцию randint
из модуля random
.
Полное описание модуля random
и его функций есть в нашем справочнике.
После добавления в список пяти словарей нужно сделать бесконечный цикл. Внутри бесконечного цикла должен быть цикл for
, который «пробегает» по списку кругов circles
.
В каждой итерации этого цикла первым делом нужно проверить, не вышли ли координаты круга за границы холста. Для получения текущих координат круга используйте уже знакомый метод coords
. Если передать в этот метод только один аргумент (идентификатор фигуры), он вернет список с координатами.
for circle in circles:
x0, y0, x1, y1 = canvas.coords(circle['id'])
Если x0
или у0
меньше нуля нужно менять знак соответствующего шага движения на противоположный. То же самое необходимо делать, если x1
или у1
стали больше 400
.
После всех проверок нужно передвинуть круг с помощью метода холста move
. Его первый аргумент — идентификатор фигуры. Второй и третий аргументы — количество пикселей на которое нужно передвинуть фигуру по горизонтали и вертикали соответственно.
example = canvas.create_oval(100, 100, 200, 200, fill='red')
# передвинет круг на 10 пикселей влево
# и на 10 пикселей вниз
canvas.move(example, -10, 10)
После цикла for
нужно обновить содержимое окна с помощью update()
.
Если круги «летают» слишком быстро, после каждой прорисовки кадра можно делать небольшую паузу в одну сотую секунды, используя time.sleep(0.01)
Пример № 2. Случайные круги.
Напишите программу, которая будет делать анимацию кругов в случайных координатах. Цвета могут не такие, как в примере, но в целом должно быть похоже на это:
В этом уроке нужно создать холст с размерами 400
на 400
пикселей. Для изменения размеров холста нужно передать именованные аргументы width
и height
в вызов Canvas
. То есть, вместо привычного
canvas = tkinter.Canvas(window)
используйте код
canvas = tkinter.Canvas(window, width=400, height=400)
Сначала в программе нужно объявить кортеж colors
из названий семи цветов. Каждый цвет — это строка. Цвета можно выбрать из списка на этой странице нашего справочника. Неважно, "Red"
это или "White"
— главное, чтобы цвета существовали и были разные.
Потом в программе должен начаться бесконечный цикл, в каждой итерации которого должна быть анимация появления семи концентрических кругов с цветами из кортежа colors и радиусами 150
, 155
, 160
, 165
, 170
, 175
и 180
пикселей. Для того чтобы сгенерировать последовательность из радиусов, используйте функцию range
с шагом 5
. Убедитесь, что последний радиус именно 180
. Для получения индекса цвета, который будет совпадать с индексом радиуса, используйте функцию enumerate
.
Создавать круги нужно в цикле for
. После создания круга не забудьте вызвать метод update, чтобы созданный круг отобразился на холсте. Если круги появляются слишком быстро, после рисования каждого из кругов делайте паузу в пять сотых секунды. Для того чтобы сделать паузу, импортируйте модуль time
в начале программы, а после создания круга и обновления содержимого окна вызовите time.sleep(0.05)
.
Перед циклом for
нужно получить случайные координаты центра кругов. Сделать это нужно с помощью модуля random
, который отвечает за случайность. Обе координаты можно получить с помощью одинаковой функции randint
— она вернет случайное число от 0
до 400
.
random.randint(0, 400)
Не забудьте импортировать модули random
, tkinter
и time
в начале программы.
P. S. Разумеется, холст не должен очищаться. Наш пример — это зацикленная gif‑ка и поэтому все время начинается с начала.
Пример № 3. Угадай число.
Для того чтобы пройти этот урок, нужно написать программу, в которой предлагается угадать загаданное компьютером случайное число за три попытки.
Первым делом, в программе должна быть объявлена переменная number
, она должна быть целым числом и получена с помощью функции randint
из модуля random
.
После этого, программа должна дать три попытки на то, чтобы пользователь угадал число number
. Для этого, с помощью цикла for
и функции range
надо создать цикл на три итерации.
В каждой итерации программа должна запрашивать у пользователя число. Если загаданное число меньше, чем число, которое ввел пользователь, программа должна вывести на экран:
Загаданное число меньше
Если загаданное число больше, чем число, которое ввел пользователь, программа должна вывести на экран текст:
Загаданное число больше
Если пользователь угадал, на экран должно быть выведено:
Вы выиграли
Цикл при этом должен закончится с помощью break
.
Если за три попытки пользователь так и не угадал числа, программа должна вывести на экран текст:
Вы проиграли