Учебник «Программирование — это интересно!»
Красивые кривые, интересные последовательности, фракталы
кардиоида эпи-, гипо- циклоиды / трохоиды улитка Паскаля Кривые Лиссажу Числа Фиббоначчи Натуральные … Деревья?
Мышь оставляет след
немного подправить
Выполнять, пока получается. Цикл while
(черновик) рисовать, пока не будет нарисован красный рисовать, пока не будет нарисовано два красных рисовать, пока не будет нарисован красный и синий рисовать, пока не будет нарисован красный или синий while 1 break гонять мяч от стены до стены, пока не удариться 3 раза о любую стену
Ветвление, оператор if
Сделать круг, который двигается вправо (root.after это уже было или нет?) Круг движется вправо и останавливается у правой границы Тоже самое влево, вверх, вниз Круг доходит до правой границы и начинает двигаться в другую сторону Тоже слева Отскакивает от всех стен Круг появляется на экране. По щелчку в круге — появляется в новом месте По […]
Делать определенное количество раз. Цикл for
Мы уже использовали ранее цикл for для повторения действий определенное количество раз, когда управляли Черепашкой. Воспользуемся им еще раз и порисуем. Начнем с одного круга в случайном месте и нарисуем его по щелчку мыши: 1. Нарисовать 20 кругов в случайных местах (изображение вставить) 2. Нарисовать 20 кругов в случайных местах случайного размера, случайного цвета (изображение) […]
Работаем в Tkinter с клавиатурой
Для того, чтобы в Tkinter вызывать действия по нажатию клавиш (реагировать на клавиатуру), используется почти такой же bind, как и для реакции на мышь, только привязывать надо не к холсту (Canvas), а к главному окну (root): root.bind(»,keypress). По нажатию на любую клавишу круг двигается вправо: Чтобы с помощью клавиш управления курсором управлять кругом, нужно знать […]
Удаление всего, отдельного элемента, группы элементов
Рассмотрим удаление элементов на холсте. Для удаления будем использовать метод delete(): canv.delete(ALL) удаляет все объекты на холсте. Если нужно удалить не все, а только часть, то есть два пути: удалять по имени и удалять по тегу (метке) Удаление по имени позволит удалить только один объект. А удаление по метке — сколько угодно, в том числе […]
Работаем с мышью в Tkinter
Возьмем самый простой вариант создания окна и холста: С функциями (командами) вы уже знакомы, так что данный код не должен вызвать непонимание: Сначала создается функция click, которая рисует окружность, а потом эта функция вызывается. Теперь сделаем так, чтобы она вызывалась по щелчку мыши. Однажды мы это уже делали, но с Черепашкой. В Tkinter немного иначе. […]
Черепашка меняет скорость и отражается от стен
В прошлом уроке мы рассмотрели, как остановить Черепашку, когда она дошла до определенной границы. Теперь сделаем так, чтобы Черепашка разворачивалась, когда доходила до правой стороны экрана (x = 200) 1. Черепашка после запуска программы ползет влево и, достигнув координаты x = -200, разворачивается и начинает ползти вправо 2. Черепашка ползает влево-вправо, разворачиваясь на границах x […]
Черепашковый зоопарк. Несколько Черепашек сразу на одном экране
(черновик) Убрать, не делать. Несколько черепашек создать, и запустить Проверка расстояния одной черепашки от другой Хождение цепочкой (одна выбирает случайное направление, а другие идут за ней) Гонки Черепашек
Черепашка рисует фракталы
(черновик) что такое фрактал пару-тройку фракталов
Маршрут для Черепашки
(черновик) Щелкать мышью и запомнить координаты. Черепашке — ползти по ним. Когда закончатся — останавливаться Добавить несколько фигур: слоник, кот, дом, паутина
Черепашка принимает решения
В прошлый раз мы рассмотрели, как научить Черепашку начинать движение после щелчка мыши. Теперь научим ее останавливаться. Чтобы остановить движение Черепашки, нужно отменить вызов ontimer или обнулить скорость. Кроме того, нужно решить, когда останавливать Черепашку. Черепашка ползет вправо, начиная из точки с координатами (0,0). Остановим ее, когда она уползет вправо на 100. Для этого будем […]
Реакция Черепашки на нажатие клавиш
(черновик) Черепашка стоит, по нажатию на стрелки — ползет. … придумать дрифт и хватит нарисовать картинку с дорогой и положить на фон — погонять bgpic(‘bg.gif’) изображение
Реакция Черепашки на щелчки и перемещения мыши
Сделаем так, чтобы Черепашка начинала ползти после щелчка мыши: onscreenclick — указание выполнить команду после щелчка мышью на экране. Команда(функция), которая будет выполнена по щелчку, обязательно должна принять два значения: x,y — координаты щелчка. Передачу параметров в команду(функцию) мы разбирали, когда рисовали фигуры разного размера. Попробуйте изменить fd(100) на fd(1000) и fd(10). Что меняется? Однако, […]
34. Отвлечемся от списков. Простые задачи. Простые игры.
Предлагаю подумать и сделать несколько простых программ (игр). Для тренировки. Никаких подсказок давать не буду, попробуйте придумать и реализовать все сами, от начала и до конца. Разбирать эти задания будем позже. 1. Игра «Ним»: игроки по очереди берут спички из кучи. За один ход можно взять от одной до трех спичек. Выигрывает тот, кто взял […]
33. Решаем проблемы с двумерным списком
На прошлом уроке мы успешно погрузились в трудности, связанные с отображением ячеек двумерного списка. Надеюсь, вы дали себе достаточно времени подумать о проблеме. На самом деле, для ее решения нужно не так уж и много: убрать информацию о позиции ячейки из самой ячейки и передавать ее (r,c) в метод paint при каждой перерисовке. Я настоятельно […]
32. Неразрешимые трудности, дублирование информации, проблема
Продолжаем работать с двумерными списками (таблицами). В прошлом уроке была создана программа для удобной работы с таблицей ячеек: Рассмотрим некоторые задачи предыдущего урока. Отметить всех соседей можно по-разному, например так: Если выделять соседей не только по сторонам, но и по дагоналям, то лучше использовать два цикла: Обратите внимание, чтобы в обоих случаях мы берем и […]
31. Двумерные списки (массивы, матрицы) в Python
Прежде, чем мы сделаем игру «Сапер» и «Блоки» нужно научится работать с двумерными списками. Если просто, то двумерный список — это таблица. У каждой ячейки таблицы есть номер строки и номер столбца. Т.е. каждая ячейка имеет не один номер, как в обычном списке, а два: номер строки и номер столбца. Поэтому такие списки и называют […]
30. Разбор задач предыдущего урока (без новых заданий)
Рассмотрим некоторые задачи предыдушего урока. Не то, чтобы они были сильно важны для работы со списками, но не вижу причины, почему бы не сделать эти задачи сейчас. Перетаскивание шарика. Перетаскивать шарики можно разными способами. Например так: У этого способа есть один недостаток — шарики могут «теряться» при резком движении мыши. Что ж, зайдем с другой […]
29. Списки и геометрия, забавные задачи
Продолжим работать со списками. Теперь шарики не выстроены в ряд, а раскиданы по экрану. Добавим немного геометрии в наши задания. Некоторые задания просто забавны, другие же являются частью будущих игр. Задания выполнять в функции task, вызывать ее нажатием правой кнопки мыши на экране. Левая — очищает и создает новый список. Рассмотрим некоторые приемы, которые понадобятся […]
28. Продолжаем работать со списками
Продолжим работать со списками. На этот раз вернемся к рисованию «шариков» и работе с списком объектов. Задания выполнять в функции task, вызывать ее нажатием правой кнопки мыши на экране. Левая — очищает и создает новый список. 1. Посчитать количество синих 2. Найти общую площадь зеленых 3. Удалить красные 4. Удалить красные, если их граница синяя […]
27. Списки и еще раз списки в Python: отличия числового списка от списка объектов и приемы работы
Сегодня еще один урок, в котором будем работать со списками. Подготовим два списка, один из которых будет заполнен числами, а другой — объектами. Найдем самое большое значение. Начинающие всегда пытаются сравнивать соседние значения, чтобы найти самое большое. Но это тупиковый путь. Представьте что вы находитесь возле 1000 людей, которые стоят в ряд и на вид […]
26. Списки в Python. Несколько вопросов
Продолжаем работать со списками в Python. Прежде, чем двигаться дальше, подведем промежуточные итоги. Напомню, что числовые списки и списки, содержащие объекты различаются по своему «поведению». Когда вы используете перебор по значению, то не можете изменить элемент списка: В первом и втором случае мы видим одни и те же значения, потому что x += 1 повлияет […]
25. Работаем со списками в Python (удалять лучше с конца)
Продолжаем работать со списками. Разберем задания, которые (должны) были вызвать у вас трудности. Напомню, что в данный момент мы работаем с числовыми списками. Для создания списка, заполненного случайными значениями, удобно использовать такой прием: А теперь попробуем удалить все нули. Вариант с использованием count и remove мы рассматривать не будем, надеюсь с ним все понятно. Предположим, […]
24. Работа со списками в Python, часть вторая
В прошлом уроке мы создали список, содержащий объекты ball для отработки приемов работы со списками. В конце урока я дал задания по удалению элементов из списка. Эти задания должны были вызвать проблемы. Прежде, чем мы вернемся к шариками, нужно рассмотреть вариант попроще: список, состоящий из чисел. Этот урок будет полностью посвящен работе с числовым списком. […]
23. Работа с списками в Python
Обработка списков в Python. На прошлом занятии мы подготовили программу, в которой будем работать со списками. Приведу полный код: Теперь, после того, как у нас есть заполненный список «шариков», мы можем с ним поработать. Для начала попробуем выстроить уже имеющийся список в ряд: Однако, мы видим, что все шарики не помещаются на экране. Чтобы изменить […]
22. Создаем список «шариков» для последующих заданий
Мы разобрали уже несколько заданий, в которых фигурировали списки, настал черед поработать с ними посерьезнее. Python дает большие возможности для работы со списками, многие идеи для которых были взяты из языка LISP, название которого прямо указывает, что язык создан для работы со списками. Когда изучают Паскаль или Си, то работают с массивами. Массивы в Python […]
Модификация игры «Пушка»: меньше глобальных переменных, больше объектов, чище код
Другой способ выстрела: удержание левой кнопки мыши увеличивает энергию выстрела. Чтобы выстрелить нужно отпустить левую кнопку.