Примеры задач

Пройти первые 25 уроков и попробовать написать первые программы можно бесплатно. Для этого нужно толькозарегистрироваться

Ниже вы найдете примеры задач, которые пройдете ближе к концу курса. Разумеется, все темы, которые необходимы для их решения, есть в курсе.

Пример № 1. Рикошетящие круги.

Перед тем, как начать делать это задание, перейдите на урок «Бесконечный цикл» из раздела «Цикл while и модули». Прочитайте условия и вспомните, как вы сделали «летающий» туда-сюда прямоугольник.

В этом уроке надо написать программу, которая будет рисовать рикошетящие круги. Выглядеть это должно примерно так:

Bouncing balls

Размеры холста в этом уроки должны быть 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. Случайные круги.

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

Bouncing balls

В этом уроке нужно создать холст с размерами 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.

Если за три попытки пользователь так и не угадал числа, программа должна вывести на экран текст:

Вы проиграли