Команды перемещения Черепашки
Управлять Черепашкой можно не только указывая ей на сколько перейти вперед или назад. У нее есть команды которые могут переместить ее в указанную точку. Поле по которому передвигается Черепашка — это система координат. Таким образом указав координату мы переместим Черепашку в эту точку. Если при этом будет опущено перо, то Черепашка оставит линию. Таким образом мы сможем рисовать фигуры по координатам.
Для того, чтобы указать точку, куда надо переместить Черепашку, есть команда goto(). В качестве аргументов передаем два числа через запятую, это x и y координаты.
#Перемещаем Черепашку в координаты 100 по x и 150 по y turtle.goto(100,150)
Так же для перемещения можно использовать команды turtle.setpos() и turtle.setposition().
В случае, если необходимо переместить Черепашку по какой-либо оси, есть команды turtle.setx() и turtle.sety(). Которые перемещают в определенную точку по оси x и оси y соответственно. Другая координата при этом не меняется.
Развернуть Черепашку можно используя абсолютные величины командой turtle.setheading() или turtle.seth(). В качестве аргумента передаем угол, на который будет смотреть Черепашка. В этом случае 0 — это восток (направо), 90 — север (наверх), 180 — запад (налево) и 270 — юг (вниз).
Вернуть Черепашку в начало координат (в точку с координатами x = 0 и y = 0) можно командой turtle.home(). Команда используется без аргументов. Если начало координат не изменено, то Черепашка должна появиться в центре холста.
#Переместим Черепашку в центр экрана turtle.home()
Команда speed() задает скорость перемещения Черепашки. В скобках передается значение скорости от 0 до 10. Чем выше значение, тем быстрее Черепашка рисует фигуры. 1 — медленно, 10 — быстро. 0 означает, что выполнять команды Черепашка будет без анимации.
#Задаем скорость перемещения Черепашки turtle.speed(5)
Методика преподавания основ алгоритмизации на базе системы «КуМир». Лекция 8
Пределы роста произхводительности вычислительных систем. Виртуальные и реальные исполнители в системе «КуМир». Lego-робот — программно-управляемый исполнитель «КуМира». Подготовка заданий для учащихся и их автоматическая проверка. Итоговая работа.
Технологии автоматизации вычислений с помощью электронных вычислительных машин возникли в середине XX века, и сегодня этим технологиям менее 70 лет. ЭВМ моложе пушек и ракет; моложе паровозов, автомобилей и самолетов; моложе телеграфа, телефона и телевидения; моложе теории относительности, атомной бомбы и антибиотиков.
С точки зрения истории нашей цивилизации 70 лет — ничтожно малый период. Но за это время производительность технологии вычислений на ЭВМ возросла в триллион раз: от тысячи арифметических операций в секунду в 1950 году до тысячи триллионов операций в 2008 году. Технология вычислений на ЭВМ — единственная в истории человечества технология, продемонстрировавшая подобный рост эффективности.
Электронные вычислительные машины собираются из так называемых “СБИС” — СверхБольших Интегральных Схем, состоящих из множества однотипных элементарных ячеек, нанесенных на монолитный кристалл кремния размером от нескольких миллиметров до 1–2 сантиметров.
Лекция 8. Виртуальные и реальные исполнители в системе “КуМир”. Исполнитель Чертежник. Лего-Робот — программно управляемый исполнитель “КуМира”. Гипертексты в системе “КуМир”. Подготовка заданий для учащихся и их автоматическая проверка.
Экспоненциальный рост производительности
ЭВМ — рост в геометрической прогрессии — описывается законом Мура: производительность одного кристалла растет в геометрической прогрессии — удваивается каждые 1–2 года. До недавнего времени на одном кристалле умещалась логика одной законченной вычислительной системы — один процессор. Выполнение закона Мура обеспечивалось уменьшением размера одной элементарной ячейки и уменьшением времени переключения (ростом тактовой частоты).
Сегодня тактовая частота стабилизировалась, но размеры элементарной ячейки продолжают уменьшаться, и на одном кристалле умещается уже не один, а несколько процессоров (их сегодня называют вычислительными ядрами, или просто ядрами, сохраняя термин “микропроцессор” за многоядерным кристаллом в целом). Таким образом, закон Мура сегодня может быть перефразирован так: количество вычислительных ядер на одном кристалле удваивается каждые несколько лет.
Если речь идет о массово производимых персональных ЭВМ, то такая ЭВМ по экономическим соображениям имеет в своем составе минимальное количество “вычислительных” кристаллов (как правило, один). Еще пять лет назад на этом кристалле умещалось одно вычислительное ядро, а сегодня умещается 2–4 ядра. Микропроцессоры становятся многоядерными.
Но науке и промышленности производительности персональных ЭВМ не хватает, нужны ЭВМ гораздо большей производительности — так называемые “суперЭВМ”, или “суперкомпьютеры”. Поэтому инженеры научились собирать в единой конструкции тысячи и миллионы вычислительных ядер, а программисты и математики научились задействовать это огромное множество ядер для решения сложнейших вычислительных задач.
Производительность суперЭВМ измеряется во флопсах — количестве операций над дробными (плавающими) числами, выполняемыми в секунду. Для описания громадных производительностей суперЭВМ недостаточно всем известных слов “миллион”, “миллиард”, “триллион”. Приходится использовать так называемые “метрические приставки”, введенные в обиход еще во времена Великой французской революции (1793 г.) и продолжающие ряд “кило — тысяча, мега — миллион (тысяча в квадрате), гига — миллиард (тысяча в кубе)”:
1 Кфлопс = 10 3 Флопс;
1 Мфлопс = 10 6 Флопс;
1 Гигафлопс = 1 Гфлопс = 10 9 Флопс (гига, от греч. — “великан”);
1 Терафлопс = 1 Тфлопс = 10 12 Флопс (тера, от греч. — “чудовище”);
1 Петафлопс = 1 Пфлопс = 10 15 Флопс (тысяча в пятой степени, от греч. пета — “пять”);
1 Экзафлопс = 1 Эфлопс = 10 18 Флопс (тысяча в шестой степени, от греч. экза — “шесть”);
1 Зетафлопс = 1 Зфлопс = 10 21 Флопс (тысяча в седьмой степени, от греч. зета — “семь”).
Как скоро нам придется привыкать к этим словам? Очень скоро. Тем, кто увлекается компьютерными играми (или тем, у кого есть дети), начинать придется уже сегодня: производительность игровых приставок или графических плат для игровых компьютеров сегодня начинает измеряться в терафлопсах (тысячах миллиардов операций в секунду).
А вот петафлопсные производительности — это уже дело не персональное, а государственное: в ближайшие годы в России запланировано догнать Америку, Евросоюз, Японию и Китай и создать суперкомпьютер петафлопсной производительности. Следующая единица производительности — экзафлопс — только входит в обиход: в США планируется создать суперкомпьютер такой производительности к 2020 году.
А про зетафлопс сегодня рассуждают в основном ученые. Скептики-экономисты размышляют о том, кто будет готов за такие компьютеры платить, оптимисты-математики размышляют над тем, как заставить компьютеры подобной производительности работать эффективно, а вот пессимисты-физики размышляют о том, не запрещают ли известные физические законы создать вычислительное устройство подобной громадной производительности.
Несколько слов о физических пределах роста скорости вычислений.
Человечество создало множество полезных устройств и приборов: колесо, ветряная мельница, паровой двигатель, автомобиль, космический корабль. Идеи новых конструкций, устройств и приборов вначале возникают в головах изобретателей. Не все придуманное изобретателем превращается в реальность. Мысленный анализ придумок показывает, что некоторые изобретения оказались бы слишком дорогими в производстве, некоторые оказались бы слишком капризными или опасными в эксплуатации. Некоторые изобретения имеют столь малую область применения, что просто нет смысла тратить время, силы и деньги на их разработку. Но ряд изобретений оказывается нереализуемым принципиально, поскольку их реализация противоречила бы известным законам физики. Общеизвестный пример нереализуемой идеи — вечный двигатель. Каждый год появляются идеи все новых и новых конструкций вечных двигателей, но для доказательства невозможности их осуществления специалисту нет необходимости разбирать детали конструкции. Достаточно лишь заметить, что работоспособность конструкции нарушала бы закон сохранения энергии.
По аналогичным причинам невозможны конструкции космических кораблей, перемещающих путешественников быстрее скорости света. Теория относительности утверждает, что такое быстрое движение невозможно в принципе.
Вычисление в конечном счете является физическим процессом, а вычислительная машина является физическим прибором, подчиняющимся законам физики. Пытаясь придумать конструкции сверхпроизводительных компьютеров, мы должны спросить себя, не окажется ли сам факт существования таких конструкций противоречащим тем законам физики, в справедливости которых мы сегодня убеждены.
Оказывается, что законы физики действительно налагают некоторые принципиальные ограничения на производительность компьютеров данного размера, работающих при данной температуре. Эти ограничения были поняты на заре зарождения компьютерных технологий, но практическую значимость стали обретать лишь в наши дни.
И, наконец, перевод на русский язык статьи двух основоположников физических аспектов теории вычислений, опубликованный в журнале “В мире науки” в сентябре 1985 года: Шарль Г. Бенне, Рольф Ландауэр “Физические пределы вычислений”: http://vivovoco.rsl.ru/VV/PAPERS/NATURE/CALC/CALC.HTM.
Вот, вкратце, что можно извлечь из этих и других публикаций.
Вычисление, независимо от того, выполняется оно электронными устройствами, на обычных счетах или биологической системой, такой, как мозг, — это физический процесс. К нему применимы те же понятия, что и к другим физическим процессам. Какое количество энергии необходимо, чтобы выполнить то или иное вычисление? Сколько времени потребуется на это? Каких размеров должно быть вычисляющее устройство? Другими словами, каковы физические ограничения, накладываемые на процесс вычисления?
Станем на точку зрения физика, для которого информация — это не математическая абстракция, а физическая сущность, независимо от того, где она содержится — на наших российских счетах или перфокартах ЭВМ. Один из изобретателей ЭВМ, известный математик и физик Джон фон Нейман, обдумывая принципы работы ЭВМ, поставил вопрос: сколько энергии потребляет каждый шаг компьютерных вычислений?
Фон Нейман был уверен, что каждый элементарный шаг вычислений, вычисление одного бита, требует, как минимум, затрат “теплового кванта” энергии, а именно затрат энергии в размере kB·T·ln2, где kB — константа Больцмана 1 , a T — абсолютная температура физического устройства, выполняющего вычисление. При комнатной температуре (Т = 300K) “тепловой квант” примерно равен 5 x 10 –21 Дж, а значит, компьютер, вычисляющий тысячу 64-битных чисел в секунду, по фон Нейману должен был бы рассеивать не менее 3 x 10 -15 Дж/сек. = 3 x 10 –15 Ватт.
Подход Неймана оказался плодотворным, но не вполне верным. Молодой физик Р.Ландауэр, пришедший в компанию IBM в 1952 году, в знаменитой статье 1961 года подправил утверждение фон Неймана следующим парадоксальным образом: “минимальных затрат энергии в размере “теплового кванта” требует не вычисление бита, а, наоборот, его забывание, стирание”. Точка зрения Ландауэра состоит в том, что по определению, при любом вычислении выходная информация уже содержится неявным образом во входной. Поэтому можно считать, что никакое вычисление не порождает информации. А целью вычисления является, как это ни удивительно, не генерация новой информации, а уничтожение лишней, бесполезной информации. Например, выражение “2 + 2” содержит больше информации, чем выражение “= 4”. Если нам известно лишь то, что число 4 было получено в результате сложения двух чисел, то мы не сможем определить, какие именно числа складывались: 1 + 3,
2 + 2, 0 + 4 или какая-нибудь другая пара чисел. Так что целью сложения 2 + 2 является уничтожение не интересующей нас информации о том, из каких именно слагаемых был составлен результат 4.
При сложении двух n-значных двоичных чисел мы получаем одно (n + 1)-значное число, так что на первый взгляд кажется, что любое сложение уничтожает, как минимум, (n – 1) бит информации и потому проведение в процессе вычисления любого сложения n-значных чисел потребует затрат энергии, пропорциональных n.
Оказывается, этот пессимистический вывод неверен. В 1972 году другой сотрудник компании IBM (США), Шарль Г. Бенне, показал следующее. Ценой усложнения конструкции вычислительного устройства можно добиться того, что при любом вычислении энергетические затраты на любые промежуточные этапы окажутся близки к нулю, и энергию придется потратить лишь на запись окончательного результата в память (то есть на стирание содержимого памяти в той области, куда записывается результат). Этот подход называют “обратимые вычисления”, и в последние годы им стали интересоваться не только теоретики, но и компьютерные инженеры.
Если бы удалось изготовить нано-суперкомпьютер зетафлопсного класса (10 21 операций в секунду), кодируя каждый бит информации состоянием одного атома, работающий по принципам обратимых вычислений при комнатной температуре (Т = 300К) и записывающий 64-битный результат каждой арифметической операции в память, то согласно формуле фон Неймана – Ландауэра теоретически неизбежная рассеиваемая мощность такого компьютера составила бы всего лишь около 300 Ватт. Даже если считать, что практически рассеиваемая мощность была бы на 2 порядка выше, получилась бы приемлемая технически и экономически рассеиваемая мощность 30 кВатт.
Если же предположить, что зетафлопсный компьютер будет изготовлен по используемой сегодня (необратимой) логике и в кодировании одного бита будет задействован фрагмент кристалла, содержащий 10 тысяч атомов, то теоретически неизбежная рассеиваемая мощность составит 70 мВатт. И если принять, что практически рассеиваемая мощность окажется на два порядка выше, то получится, что путь к экономически и технически приемлемому зетафлопсу могут открыть только новые технологии, нацеленные на радикальное понижение энергопотребления:
обратимые вычисления, одноэлектронные переключательные устройства, неэлектронные принципы хранения и обработки информации, квантовые вычисления, размещение суперкомпьютеров в космосе (T = 3K) и другие изобретения XXI века, о которых мы сегодня даже не подозреваем.
Виртуальные и реальные исполнители в системе “КуМир”
Курс преподавания информатики, использующий систему “КуМир”, как и многие подобные курсы, имеет специфический недостаток. Несмотря на то что курс информатики вполне “настоящий” 2 , исполнители, которыми управляют школьники непосредственно или из программы на “КуМире”, в реальном мире не существуют. Можно сказать, что все изучаемые в курсе исполнители — виртуальны.
Здесь речь идет совсем не об ограниченности набора исполнителей. Кроме упомянутых в лекциях исполнителей Робот и Чертежник (а также Черепаха), в комплекте Учебных Миров существует еще множество других программных исполнителей. Например, простейшие исполнители Водолей и Кузнечик, Двуног и другие.
Кроме того, преподаватель или ученик могут самостоятельно создать исполнителя, просто написав его на алгоритмическом языке.
За последним алгоритмом программы может идти одна или несколько конструкций исполнитель . То есть программа может иметь такой вид:
Развитие средств обучения основам программирования во второй половине XX – начале XXI века Текст научной статьи по специальности «Науки об образовании»
развитие средств обучения основам программирования / исполнитель алгоритма / информатика в общеобразовательной школе / evolution of tools for teaching the basics of programming / algorithm executor / informatics in general education
Аннотация научной статьи по наукам об образовании, автор научной работы — Стоянов Никита Эдуардович, Тарасова Валентина Николаевна
В статье проанализирована история развития отечественных и зарубежных средств обучения основам программирования по таким свойствам, как тип языка программирования, тип визуализации выполнения программы, место системы в образовательном процессе. На основе выявленных закономерностей изменения свойств в соответствии с законами усложнения технических систем и перехода системы в надсистему определено четыре этапа развития средств обучения основам программирования . Применение VR/ AR-технологий и персонализация в обучении основам программирования определены как перспективные направления развития.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по наукам об образовании , автор научной работы — Стоянов Никита Эдуардович, Тарасова Валентина Николаевна
Развивающий эффект обучения программированию: психолого-педагогические аспекты
Симор Паперт и мы. Конструкционизм — образовательная философия XXI века
Возможности и перспективы применения технологий и средств визуального программирования при обучении школьников
Программная система обучения параллельному программированию на базе языка «Кубик»
О языке начального обучения параллельному программированию
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
EVOLUTION OF THE TOOLS FOR TEACHING BASICS OF PROGRAMMING IN THE SECOND HALF OF XX – THE BEGINNING OF XXI CENTURY
The paper analyzes the history of evolution of Russian and foreign tools for teaching basics of programming by such properties as type of programming, visualization of program’s execution, the place of the system in the educational process. Based on the revealed patterns of changes in properties in accordance with the laws of complication of technical systems and the transition of the system into a suprasystem, 4 stages of the development of teaching the basics of programming are determined. The use of VR/AR-technologies and personalization in tools for teaching the basics of programming are identified as perspective areas of evolution.
Текст научной работы на тему «Развитие средств обучения основам программирования во второй половине XX – начале XXI века»
Развитие средств обучения основам программирования во второй половине XX -начале XXI века
Стоянов Н.Э., Тарасова В.Н.
Российский университет транспорта, 127994, Москва, Россия
ORCID: https://orcid.org/0000-0001-7566-4299, Е-mail: ferrum0k@yandex.ru
ORCID: https://orcid.org/0000-0003-4825-8994, E-mail: tarasovavn@mail.ru
Резюме: В статье проанализирована история развития отечественных и зарубежных средств обучения основам программирования по таким свойствам, как тип языка программирования, тип визуализации выполнения программы, место системы в образовательном процессе. На основе выявленных закономерностей изменения свойств в соответствии с законами усложнения технических систем и перехода системы в надсистему определено четыре этапа развития средств обучения основам программирования. Применение VR/ AR-технологий и персонализация в обучении основам программирования определены как перспективные направления развития. Ключевые слова: развитие средств обучения основам программирования, исполнитель алгоритма, информатика в общеобразовательной школе.
Для цитирования: Стоянов Н.Э., Тарасова В.Н. Развитие средств обучения основам программирования во второй половине XX —
начале XXI века // История и педагогика естествознания. 2022. № 2-3. С. 74-79.
EVOLUTION OF THE TOOLS FOR TEACHING BASICS OF PROGRAMMING IN THE SECOND HALF OF XX — THE BEGINNING OF XXI CENTURY Nikita E. Stoyanov, Valentina N. Tarasova Russian University of Transport, 127994, Moscow, Russia ORCID: https://orcid.org/0000-0001-7566-4299, E-mail: ferrum0k@yandex.ru ORCID: https://orcid.org/0000-0003-4825-8994, E-mail: tarasovavn@mail.ru
Abstract: The paper analyzes the history of evolution of Russian and foreign tools for teaching basics of programming by such properties as type of programming, visualization of program’s execution, the place of the system in the educational process. Based on the revealed patterns of changes in properties in accordance with the laws of complication of technical systems and the transition of the system into a suprasystem, 4 stages of the development of teaching the basics of programming are determined. The use of VR/AR-technologies and personalization in tools for teaching the basics of programming are identified as perspective areas of evolution. Keywords: evolution of tools for teaching the basics of programming, algorithm executor, informatics in general education. For citation: Stoyanov N.E., Tarasova V.N. EVOLUTION OF THE TOOLS FOR TEACHING BASICS OF PROGRAMMING IN THE SECOND HALF OF XX — THE BEGINNING OF XXI CENTURY. History and Pedagogy of Natural Science. 2022, no. 2-3, pp. 74-79. DOI:10.24412/2226-2296-2022-2-3-74-79
Разработка средств обучения основам программирования началась в конце 1960-х годов. В числе первых С. Пей-перт создал язык программирования Logo [1].
Первые эксперименты по обучению учащихся основам программирования проводились на ЭВМ второго поколения [2], которые отличались значительной стоимостью, большими габаритами и высоким энергопотреблением [3], что значительно затрудняло их использование в общеобразовательной школе. Создание многотерминальных систем разделения времени для ЭВМ третьего поколения позволило перенести эксперименты по обучению программированию в учебный класс [4].
С. Пейперт использовал эту технологию в рамках апробации учебного языка программирования Logo в школах США, А.П. Ершов — в экспериментах по обучению программированию в школах СССР. Часто использовалось удаленное терминальное подключение к ЭВМ, расположенной в вычислительном центре, где в качестве терминала выступали телетайпы [5, 6]. Благодаря возможности проведения образовательных экспериментов был дан толчок к поиску и созданию уникальных технических и программных решений
с целью повышения эффективности обучения учащихся основам программирования.
Средства обучения основам программирования на протяжении своего развития изменяли свои свойства, такие как тип языка программирования, тип визуализации выполнения программы, кроссплатформенность системы [7], место системы в образовательном процессе и др.
Тип языка программирования
Для облегчения проведения расчетов на ЭВМ пользователями, не имеющими прямого отношения к программированию, а также обучения студентов в вузах были созданы универсальные учебные языки программирования Basic (1964), Pascal (1970) и др. Одновременно разрабатывались специализированные языки для обучения учащихся общеобразовательных школ, в том числе Logo (США, конец 1960-х годов), Рапира/Робик (СССР, конец 1970-х годов) [8]. Они имели упрощенный синтаксис, диалоговый режим, низкий порог входа, а также средства визуализации выполнения программы. Ввод команд производился учащимися с помо-
щью клавиатуры терминала аналогично стандартным языкам программирования. Такой способ ввода для обучения учащихся младшего и среднего школьного возраста имеет недостатки, в том числе низкую скорость набора команд, высокую вероятность опечаток при наборе на клавиатуре, неэффективность командной работы за терминалом, в ходе которой только один учащийся может одномоментно печатать на клавиатуре [9].
Подход к обучению программированию с помощью взаимодействия с объектами реального мира (осязаемого программирования) был разработан с целью улучшения взаимодействия ученика младшего школьного возраста и обучающей системы. Учащийся управлял исполнителем не с помощью набора текстовых команд на клавиатуре ЭВМ, а путем взаимодействия с объектами в реальном мире. В середине 1970-х годов в MIT (Massachusetts Institute of Technology) была разработана система TORTIS Button Box & Slot Machine. Учащийся разрабатывал программу управления роботом-«черепахой» путем размещения специальных пластиковых карточек, обозначающих команды для исполнителя, в специальные коробки [10].
Схожий принцип использовался в таких обучающих средствах, как Algo Blocks (1993) [9], MIT Tangible Bricks (1998) [11], Terrapin BeeBot [12]. Помимо ускорения вовлеченности учащихся в образовательный процесс, избавления от опечаток при наборе, осязаемое программирование позволяет решить проблему совместной работы, так как несколько учащихся могут одновременно взаимодействовать с реальными объектами в рамках создания программы.
В конце 1980-х — начале 1990-х годов разработка операционных систем с графическим интерфейсом пользователя и увеличение разрешающей способности мониторов привели к появлению нового типа языков визуального программирования. Вместо набора текста на клавиатуре или использования дополнительных технических средств для осязаемого программирования учащийся перетаскивает блоки команд на экране монитора с помощью мыши методом drag-and-drop. Блок команд может представлять собой геометрическую фигуру с написанным внутри текстом (Logo Blocks, Alice, Scratch) [13], иконку (Lego Mindstorms) или текст с изображением и полями для ввода (AgentSheets) [14].
Преимуществами описанных типов языков программирования являются максимальное приближение текстового ввода к реальным языкам программирования, эффективность «осязаемого» программирования в командной работе учащихся начальной школы, решение проблем с опечатками, синтаксическими ошибками и низкой скоростью набора на клавиатуре с помощью визуального программирования. Некоторые средства обучения основам программирования смешивают данные типы. Например, Toon Talk (1995) предлагает учащимся писать программу в формате визуального программирования, где в качестве блоков используются метафорические объекты и события из реального мира (передача информации — перелет почтового голубя, операция сравнения — взвешивание на весах и т.д.) [15]. В Кодвардс (Россия) и Code Monkey (Израиль) учащийся может записывать команды как путем набора текста на клавиатуре, так и с помощью визуального программирования [16, 17].
Тип визуализации выполнения программы
Первые программы для обучения алгоритмическим основам и базовым навыкам программирования работали в консольном режиме. За рубежом и в СССР разработчики курса информатики в общеобразовательной школе пришли к идее наглядной визуализации выполнения программы для обучения учащихся. Один из первых примеров такой визуа-
Рис. 1. Визуализация результата выполнения программы для ученика
# Е П Е FE #ЕПЕРЕ #ЕПЕРЕ
Рис. 2. Исполнитель «Машинист» в «Робик»
Рис. 3. Мультиагентная образовательная среда программирования в AgentSheets
Рис. 4. Образовательная среда с 3D-исполнителями Рис. 5. Обучающая игра на онлайн-платформе Кодвардс
лизации — Logo Turtle (1970-е годы; рис. 1) был разработан в виде экранного «исполнителя», отображающего свое передвижение в виде геометрических линий на экране ЭВМ или принтере/графопостроителе, а также в виде реального технического устройства — робота, подключающегося к терминалу по проводу. «Черепаха» имела строго заданную систему команд движения в различных направлениях, поворота вокруг своей оси, начала и окончания отрисовки пути [18].
«Исполнители» 1980-х годов получили способность взаимодействовать с окружающей их виртуальной средой. В Karel, The Robot исполнитель передвигался по клетчатому полю и мог оставлять в клетках поля различные объекты [19]. Образовательные программные продукты 1980-х годов включали несколько исполнителей, каждый из которых имел свою собственную систему команд. Например, «Робик» включал в себя исполнителей «Муравей», «Машинист» (рис. 2), «Дежурик» [8, 20]. В рамках работы с исполнителем учащимся предлагалось разработать алгоритм действий для решения поставленной задачи. «Машинисту» рекомендовалось перевезти вагоны с одного железнодорожного пути на другой, «Дежурику» — провести дежурство в школьном кабинете. Е-Практикум 86 (в дальнейшем — КуМир) включал в себя исполнителей «Робот» и «Чертежник». «Робот» передвигался по двумерному дискретному клетчатому полю, закрашивал клетки, замерял установленные в них параметры (уровень «радиации» и «температуры»), а «Чертежник» мог отрисовывать геометрические фигуры на графике [21].
Развитие технологий отображения двумерной графики и повышение разрешающей способности мониторов значительно повлияли на визуализацию выполнения программы. Благодаря мультиагентным системам AgentSheets (1991), ToonTalk (1995), Scratch (2007) и другим удалось реализовать обучение учащихся школ и студентов вузов концепциям объектно-ориентированного и событийно-ориентированного программирования. В данных системах учащиеся могли создавать исполнителей («агентов») и программировать их поведение. «Агент» представляет собой 2D-изображе-ние, которое учащиеся могут перерисовать во встроенном в систему графическом редакторе [14]. В рабочей области может находиться сразу несколько «агентов», способных передавать информацию друг другу (рис. 3). В большинстве систем у «агентов» нет четко заданных команд. Учащимся доступны все стандартные операции с объектами графического интерфейса в рамках событийной модели программирования: события взаимодействия курсора с объектом,
«агентов» — друг с другом: столкновение, движение, получение/отправка сообщений, нажатие на клавиши клавиатуры.
В конце 1980-х годов активно развивались технологии отображения трехмерных объектов. Мощности центральных процессоров персональных ЭВМ 1990-х годов было достаточно для отображения 3D-графики без подключения 3D-ускорителя [22]. Появились первые среды (рис. 4), нацеленные на обучение программированию, где 2D-изобра-жения заменили 3D-модели (Alice, 2001; AgentCubes, 2006). 3D-анимация позволяла обеспечить более глубокий образовательный контекст для учащихся и помогала визуализировать обьектно-ориентированные концепции программирования [23].
В настоящее время трендом в обучении учащихся основам программирования является геймификация обучающих средств. Современные средства обучения основам программирования (рис. 5) включают оформление задач в виде игровых уровней, «баллы» за прохождение учебного уровня (CodeMonkey, Swift Playgrounds, «Кодвардс» (конец 2010-х годов и др.). Применение игровых механик способно повысить вовлеченность и интерес учащихся младшего школьного возраста [24].
Место системы в образовательном процессе
В начале 1970-х годов С. Пейперт рассматривал язык Logo и робота-«черепаху» как средство обучения физике, математике, биологии. Концепцию равновесия в физике предполагалось демонстрировать с помощью движения вперед и назад, при этом «черепаха» должна была удерживать вертикально установленный на шарнире стержень. Датчики, подключенные к «черепахе», выступали в образе органов чувств в биологии, в том числе — осязания, зрения и т.д. [25]. Язык Logo также использовался в экспериментах команды Пейперта по применению ЭВМ для программированного обучения математике [1].
Благодаря доступной цене персональные ЭВМ четвертого поколения начали массово поступать в общеобразовательные школы в 1980-е годы. Это послужило толчком к разработке общеобразовательных курсов информатики в СССР, Великобритании, Франции, Австралии и других странах. Средства обучения основам программирования стали частью общеобразовательного курса по освоению информатики. В СССР были разработаны пакет прикладных программ автоматизации школьного учебного процесса «Школьница» на языке программирования «Робик» с набо-
ром исполнителей и Е-Практикум. За рубежом применялись различные версии языка Logo с использованием экранной и «физической» «черепахи».
С 1990-х гг. начали разрабатывать самостоятельные инструменты для создания учащимися собственных проектов. С помощью Lego Mindstorms учащиеся могли запрограммировать робота, выполняющего задачу в реальном мире, Scratch — создать мультфильм или простую игру, Alice — запрограммировать 3D-анимацию, MIT AppInventor — разработать приложение для мобильных устройств.
С развитием Web и глобальным распространением интернета средства обучения основам программирования начали приобретать новые функции, не связанные непосредственно с написанием программ и визуализацией их выполнения. Scratch был дополнен функцией социальной сети, в которой учащиеся могут делиться своими проектами друг с другом, CodeMonkey, помимо платформы, включает в себя набор задач и учебных материалов, а отечественный «Кодвардс» в дополнение к учебным материалам — элементы LMS, позволяющие учителю отслеживать образовательный прогресс учащихся. В 2010-е годы появление web-вер-сий образовательных средств также позволило решить проблему кроссплатформенности. Web-версия обучающей платформы может работать на любой операционной системе, имеющей в своем составе web-браузер.
Во второй половине XX — начале XXI вв. средства обучения основам программирования претерпели значительные изменения. Эволюционный процесс их развития тесно связан с достижениями в области электронно-вычислительной техники. Многотерминальный доступ к ЭВМ третьего поколения позволил проводить эксперименты в обучении учащихся в компьютерном классе, что привело к разработке первых образцов средств обучения основам программирования. Благодаря появлению микропроцессоров и персональных ЭВМ четвертого поколения удалось популяризировать программирование путем включения дисциплины «Информатика» в общеобразовательную программу школ. Развитие графических интерфейсов пользователя (GUI), технологий обработки 2D и 3D-графики, а также повышение разрешающей способности компьютерных мониторов создало предпосылки к появлению нового типа языков программирования: визуального программирования и муль-тиагентных систем обучения (рис. 6). Развитие интернета позволило внедрить функции обмена контентом, замену школьного учебника и др.
Наиболее заметные изменения затрагивали такие свойства, как тип языка программирования, тип визуализации выполнения программы, кроссплатформенность системы, место системы в образовательном процессе.
Развитие средств обучения основам программирования подчиняется закону усложнения технических систем. Следуя ему, они повышали свою сложность и технологичность. В последнее десятилетие прослеживается применимость закона перехода системы в надсистему. Язык программирования и визуализация выполнения программы становятся частью большей технической системы: социальной сети, образовательной платформы, полноценным учебным курсом.
На основе выявленных закономерностей изменения свойств в соответствии с законами усложнения технических систем и перехода системы в надсистему определены четыре этапа развития средств обучения основам программирования:
1970-е — начало 1980-х годов — экспериментальный этап. Первые «исполнители» имеют строго заданный набор ко-
Рис. 6. Эволюция типов визуализации выполнения программы
манд, консольный интерфейс, применяются средства для обучения программированию в рамках естественно-научных дисциплин (Logo).
Начало 1980-х — начало 1990-х гг. — визуализация исполнителей на экране монитора персональной ЭВМ. Системы включают исполнителей, с помощью которых можно объяснять теоретические концепты и принципы программирования, средства для обучения основам программирования используются как часть предмета информатики (Рапира/ Робик, версии языка Logo и др.).
Начало 1990-х — конец нулевых годов — новый тип языков программирования. Визуальное программирование, новый подход к визуализации программ: мультиагентные системы. Переход в визуализации от символьной графики к 2D-спрайтам и 3D-моделям. Системы становятся самостоятельными инструментами, предназначенными для создания различных проектов (AgentSheets, Lego Mindstorms, Scratch и др.).
л » щ Jji’ ИСТОРИЯ НАУКИ И ТЕХНИКИ
Начало 2010 х годов — настоящее время. Образовательные системы реализуются с помощью геймификации. Распространение интернета позволило перенести обучающие средства в Web, что создало возможность уйти от проблем кроссплатформенности и необходимости поддержки ПО в образовательных организациях. Системы приобретают новые функции и включают набор теоретических материалов и практических задач — уровней) (Code Monkey), становятся социальными сетями для обмена контентом между пользователями (Scratch, Kodland Hub), входят в состав образовательной платформы (Codewards и др.).
В ближайшие годы перспективным направлением развития для средств обучения основам программирования могут стать технологии виртуальной и дополненной реаль-
ности. Их применение в образовательном процессе будет способствовать визуализации работы программы, повышению вовлеченности и мотивации учащихся [26]. Российский проект Varwin Education позволяет учащимся создавать 3D-модели, разрабатывать с их помощью проекты с использованием визуального языка программирования (Blockly) и визуализировать результат в виртуальной реальности [27, 28]. Еще одно перспективное направление — персонали-зация образовательных средств. С применением технологий машинного обучения образовательные средства могут автоматически подбирать (или генерировать) задачи для каждого ученика, учитывая его индивидуальный образовательный прогресс. Такой подход разрабатывается в отечественных проектах: «Фоксфорд», Mark.Online и др. [29, 30].
1. Feurzeig, W., S. Peipert, PROGRAMMING-LANGUAGES AS A CONCEPTUAL FRAMEWORK FOR TEACHING MATHEMATICS // BOLT BERANEK AND NEWMAN INC., 1969
2. История учреждения, ГБОУ Школа № 444, Москва. URL: https://schv444.mskobr.ru/obwie_svedeniya/history (дата обращения: 26.01.2022).
3. ЭЦВМ «Урал-1». Виртуальный компьютерный музей. URL: https://www.computer-museum.ru/histussr/ural1.htm (дата обращения 26.01.2022).
4. Feurzeig W. Toward a culture of creativity: A personal perspective on Logo’s early years and ongoing potential. International Journal of Computers for Mathematical Learning. 2010. Т. 15. №. 3. С. 257-265.
5. Solomon, C. Logo, Papert and Constructionist Learning. Logothings. URL: https://web.archive.org/web/20111207111525/httpylogothings.wikispac-es.com/ (дата обращения 24.01.2022).
6. Первин Ю.А. Школьная информатика (концепции, состояние, перспективы). URL: http://ershov.iis.nsk.su/ru/node/805749 (дата обращения 24.01.2022).
7. Стоянов Н.Э., Тарасова В.Н. Развитие технических средств обучения программированию в общеобразовательной школе / Мат. XXVII годичной науч. межд. конф. Института истории естествознания и техники им. С.И. Вавилова РАН. М.: Изд-во ИИЕТ РАН, 2021. С. 318-321.
8. Звенигородский Г.А. Описание языка Робик URL: http://ershov.iis.nsk.su/ru/node/772572 (дата обращения 24.01.2022).
9. Suzuki H., Kato H. AlgoBlock: a tangible programming language, a tool for collaborative learning. Proceedings of 4th European Logo Conference. 1993. С. 297-303.
10.Perlman R. Using computer technology to provide a creative learning environment for preschool children. MIT Artificial Intelligence Lab. 1976. URL: https://dspace.mit.edu/handle/ (accessed 24 January 2022).
11.McNerney T. S. Tangible programming bricks: An approach to making programming accessible to everyone. Massachusetts Institute of Technology, 1999.
12.Bee-Bot Family. Terrapin — Tools for thinking. URL: https://www.terrapinlogo.com/bee-bot-family.html (accessed 24 January 2022).
13. Begel A. LogoBlocks: A graphical programming language for interacting with the world. Electrical Engineering and Computer Science Department, MIT, Boston, MA. 1996. С. 62-64.
14. Repenning A., Ambach J. Tactile programming: A unified manipulation paradigm supporting program comprehension, composition and sharing // Proceedings 1996 IEEE Symposium on Visual Languages. — IEEE, 1996. С. 102-109.
15.Morgado L., Kahn K. Towards a specification of the ToonTalk language. Journal of Visual Languages & Computing. 2008. Т. 19. No. 5. Pp. 574-597.
16. Онлайн-платформа для обучения детей основам программирования. Кодвардс. URL: https://codewards.ru/# (дата обращения 24.01.2022).
17.CODING FOR KIDS INTRODUCING PROGRAMMING GAMES FOR THE NEXT GENERATION. CodeMonkey. URL: https://www.codemonkey.com/ (accessed 24 January 2022).
18.Papert S. A. A computer laboratory for elementary schools. // MIT Artificial Intelligence Lab. 1971. URL: https://dspace.mit.edu/han-dle/1721.1/5834 (accessed 24 January 2022).
19.Dr, Roland. Untch. Karel the Robot: Fundamentals // CS Community Computer Science Department @ MTSU. URL: https://www.cs.mtsu. edu/~untch/karel/fundamentals.html#world (accessed 24 January 2022).
20.Тихонова Т.И. Исполнители Звенигородского: эпоха от «Агатов» 1980-х до современности // Мат. IV междунар. конф. «Развитие вычислительной техники в России и странах бывшего СССР: история и перспективы». М.: ФГБОУ «РЭУ им. Г.В. Плеханова, 2017. С. 358360.
21.Кушниренко А.Г., Леонов А.Г. КуМир вернулся! URL: https://inf.1sept.ru/view article.php?ID = 200900603 (accessed 24 January 2022).
22. Pierce J. S. et al. Alice: easy to use interactive 3D graphics // Proceedings of the 10th annual ACM symposium on User interface software and technology. 1997. С. 77-78.
23.Cooper S., Dann W., Pausch R. Teaching objects-first in introductory computer science. Acm Sigcse Bulletin. 2003. Т. 35. №. 1. С. 191-195.
24.Певзнер В.В., Погорелов В.И., Шуклин Д.А. Некоторые особенности применения геймификации в процессе обучения. URL: https://cyberleninka. ru/article/n/nekotorye-osobennosti-primeneniya-geymifikatsii-v-protsesse-obucheniya (accessed 24 January 2022).
25.Papert S. et al. Twenty things to do with a computer //Studying the novice programmer. Lawrence Erlbaum Associates, Inc., 1971? pp. 3-28. URL: https://dspace.mit.edu/bitstream/handle/1721.1/5836/AIM-248.pdf?sequence=2 (accessed 24 January 2022).
26.Сотников А.М., Тычков А.Ю., Золотарев Р.В. и др. Дополненная и виртуальная реальность в образовании как инструмент осознанного обучения URL: https://cyberleninka.ru/article/n/dopolnennaya-i-virtualnaya-realnost-v-obrazovanii-kak-instrument-osoznannogo-obucheniya (accessed 24 January 2022).
27.Использование технологий виртуальной реальности в образовании. URL: https://education.varwin.com/ru/opportunities/ (accessed 24 January 2022).
28.Varwin XRMS — платформа для создания и управления образовательными и другими решениями в виртуальной реальности URL: https://naviga-tor.sk.ru/orn/1123545 (accessed 24 January 2022).
29.Фоксфорд — платформа школьного онлайн-образования и LMS с собственной уникальной системой индивидуального подбора заданий на основе технологий искусственного интеллекта. URL: https://navigator.sk.ru/orn/1123160 (accessed 24 January 2022).
30.Платформа обучения детей программированию Mark Online. URL: https://navigator.sk.ru/orn/1123657 (accessed 24 January 2022).
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
1. Feurzeig W., Peipert S. programming-languages as a conceptual framework for teaching mathematics. Proc. of BOLT BERANEK AND NEWMAN INC. 1969.
2. Istoriya uchrezhdeniya, GBOU Shkola №444, Moskva (History of the institution, GBOU School No. 444, Moscow) Available at: https://schv444. mskobr.ru/obwie_svedeniya/history (accessed 26 January 2022).
3. ETSVM «Ural-1». Virtual’nyy komp’yuternyy muzey (ETSVM «Ural-1». Virtual computer museum) Available at: https://www.computer-museum.ru/ histussr/urall.htm (accessed 26 January 2022).
4. Feurzeig W. Toward a culture of creativity: A personal perspective on Logo’s early years and ongoing potential. International Journal of Computers for Mathematical Learning, 2010, vol. 15, no. 3, pp. 257-265.
5. Solomon C. Logo, papert and constructionist learning. Logothings Available at: https://web.archive.org/web/20111207111525/httpylogothings. wikispaces.com/ (accessed 24 January 2022).
6. Pervin YU.A. Shkol’naya informatika (kontseptsii, sostoyaniye, perspektivy> (School informatics (concepts, state, prospects)) Available at: http:// ershov.iis.nsk.su/ru/node/805749 (accessed 24 January 2022).
7. Stoyanov N.E., Tarasova V.N. Razvitiye tekhnicheskikh sredstv obucheniya programmirovaniyu v obshcheobrazovatel’noy shkole [Development of technical means of teaching programming in a secondary school]. TrudyXXVIIgodichnaya nauch. mezhd. konf. Instituta istoriiyestestvoznaniya i tekhniki im. S.I. Vavilova RAN [Proc. of XXVII year scientific. int. conf. of the Institute of the History of Natural Science and Technology named after S.I. Vavilov RAS]. Moscow, 2021, pp. 318-321.
8. Zvenigorodskiy G.A. Opisaniye yazyka Robik (Description of the Robik language) Available at: http://ershov.iis.nsk.su/ru/node/772572 (accessed 24 January 2022).
9. Suzuki H., Kato H. AlgoBlock: a tangible programming language, a tool for collaborative learning. Proc. of 4th European Logo Conference. 1993, pp. 297-303.
10. Perlman R. Using computer technology to provide a creative learning environment for preschool children. MIT Artificial Intelligence Lab. 1976 Available at: https://dspace.mit.edu/handle/ (accessed 24 January 2022).
11. McNerney T. S. Tangible programming bricks: An approach to making programming accessible to everyone. Massachusetts Institute of Technology. 1999.
12. Bee-Bot Family. Terrapin — Tools for thinking Available at: https://www.terrapinlogo.com/bee-bot-family.html (accessed 24 January 2022).
13. Begel A. LogoBlocks: A graphical programming language for interacting with the world. Proc. of Electrical Engineering and Computer Science Department, MIT. Boston, 1996, pp. 62-64.
14. Repenning A., Ambach J. Tactile programming: A unified manipulation paradigm supporting program comprehension, composition and sharing. Proc. of 1996 IEEE Symposium on Visual Languages. — IEEE. 1996, pp. 102-109.
15. Morgado L., Kahn K. Towards a specification of the ToonTalk language. Journal of Visual Languages & Computing, 2008, vol. 19, no. 5, pp. 574597.
16. Onlayn-platforma dlya obucheniya detey osnovam programmirovaniya. Kodvards (Online platform for teaching children the basics of programming. Codwards) Available at: https://codewards.ru/# (accessed 24 January 2022).
17. CODING FOR KIDS INTRODUCING PROGRAMMING GAMES FOR THE NEXT GENERATION. CodeMonkey Available at: https://www.codemonkey.com/ (accessed 24 January 2022).
18. Papert S. A. A computer laboratory for elementary schools. MIT Artificial Intelligence Lab. 1971 Available at: https://dspace.mit.edu/han-dle/1721.1/5834 (accessed 24 January 2022).
19. Dr, Roland. Untch. Karel the Robot: Fundamentals. CS Community Computer Science Department @ MTSU Available at: https://www.cs.mtsu. edu/~untch/karel/fundamentals.html#world (accessed 24 January 2022).
20. Tikhonova T. I. Ispolniteli Zvenigorodskogo: epokha ot «Agatov» 1980-kh do sovremennosti [Performers of Zvenigorodsky: the era from the «Agates» of the 1980s to the present]. Trudy IVmezhd. konf. «Razvitiye vychislitel’noy tekhniki v Rossii i stranakh byvshego SSSR: istoriya i perspektivy» [Proc. of IV int. conf. «The development of computer technology in Russia and the countries of the former USSR: history and prospects»]. Zelenograd, 2017, pp. 358-360.
21. Kushnirenko A.G., Leonov A.G. KuMir vernulsya! (Kumir is back!) Available at: https://inf.1sept.ru/view_article.php?ID = 200900603 (accessed 24 January 2022).
22. Pierce J. S. Alice: easy to use interactive 3D graphics. Proc. of the 10th annual ACM symposium on User interface software and technology. 1997, pp. 77-78.
23. Cooper S., Dann W., Pausch R. Teaching objects-first in introductory computer science. Acm Sigcse Bulletin, 2003, vol. 35, no. 1, pp. 191-195.
24. Pevzner V.V., Pogorelov V.I., Shuklin D.A. Nekotoryye osobennostiprimeneniya geymifikatsii vprotsesse obucheniya (Some features of the use of gamification in the learning process) Available at: https://cyberleninka.ru/article/n/nekotorye-osobennosti-primeneniya-geymifikatsii-v-protsesse-obu-cheniya (accessed 24 January 2022).
25. Papert S. Twenty things to do with a computer. Studying the novice programmer Available at: https://dspace.mit.edu/bitstream/han-dle/1721.1/5836/AIM-248.pdf?sequence=2 (accessed 24 January 2022).
26. Sotnikov A.M., Tychkov A.YU., Zolotarev R.V. Dopolnennaya i virtual’naya real’nost’ v obrazovanii kak instrument osoznannogo obucheniya (Augmented and virtual reality in education as a tool for conscious learning) Available at: https://cyberleninka.ru/article/n/dopolnennaya-i-virtualnaya-real-nost-v-obrazovanii-kak-instrument-osoznannogo-obucheniya (accessed 24 January 2022).
27. Ispol’zovaniye tekhnologiy virtual’noy real’nosti v obrazovanii (The use of virtual reality technologies in education) Available at: https://education. varwin.com/ru/opportunities/ (accessed 24 January 2022).
28. Varwin XRMS — platforma dlya sozdaniya i upravleniya obrazovatel’nymi i drugimi resheniyami v virtual’noy real’nosti (Varwin XRMS is a platform for creating and managing educational and other solutions in virtual reality) Available at: https://navigator.sk.ru/orn/1123545 (accessed 24 January 2022).
29. Foksford — platforma shkol’nogo onlayn-obrazovaniya i LMS s sobstvennoy unikal’noy sistemoy individual’nogo podbora zadaniy na osnove tekhnologiy iskusstvennogo intellekta (Foxford is an online school education platform and LMS with its own unique system of individual selection of tasks based on artificial intelligence technologies) Available at: https://navigator.sk.ru/orn/1123160 (accessed 24 January 2022).
30. Platforma obucheniya detey programmirovaniyu «Mark Online» (Mark Online Platform for teaching children programming) Available at: https://navi-gator.sk.ru/orn/1123657 (accessed 24 January 2022).
ИНФОРМАЦИЯ ОБ АВТОРАХ / INFORMATION ABOUT THE AUTHORS
Стоянов Никита Эдуардович, аспирант, Российский университет транспорта.
Тарасова Валентина Николаевна, д.и.н., проф., Российский университет транспорта.
Nikita E. Stoyanov, Graduate Student, Russian University of Transport. Valentina N. Tarasova, Dr. Sci. (Hist.), Prof., Russian University of Transport.
turtle — Черепашья графика¶
Черепашья графика является популярным способом знакомства с программированием для детей. Была частью оригинального языка программирования Logo, разработанного Уолли Фейрцейгом (Wally Feurzeig), Сеймуром Папертом (Seymour Papert) и Синтией Соломон (Cynthia Solomon) в 1967 году.
Представьте себе роботизированную черепаху, начинающуюся с (0, 0) в плоскости x-y. После import turtle дайте ей команду turtle.forward(15) и она переместится (на экране!) на 15 пикселей в направлении, к которому она обращена, рисуя линию по мере движения. Передайте ей команду turtle.right(25) , и она повернётся на месте на 25 градусов по часовой стрелке.
Черепаха может рисовать сложные формы с помощью программ, которые повторяют простые ходы.
from turtle import * color('red', 'yellow') begin_fill() while True: forward(200) left(170) if abs(pos()) 1: break end_fill() done()
Комбинируя эти и подобные команды, можно легко рисовать сложные формы и изображения.
Модуль turtle — это расширенная реализация одноименного модуля из стандартного дистрибутива Python до версии Python 2.5.
Он пытается сохранить достоинства старого модуля turtle и быть (почти) на 100% совместимым с ним. Это означает, в первую очередь, чтобы дать возможность обучающемуся программисту использовать все команды, классы и методы в интерактивном режиме при использовании модуля из IDLE, запущенного с переключателем -n .
Модуль turtle предоставляет примитивы черепашьей графики, как объектно-ориентированными, так и процедурно-ориентированными способами. Поскольку он использует tkinter для базовой графики, ему необходима версия Python, установленная с поддержкой Tk.
Объектно-ориентированный интерфейс использует по существу два+два класса:
-
Класс TurtleScreen определяет графические окна как площадку для рисования черепах. Его конструктору требуется аргумент tkinter.Canvas или ScrolledCanvas . Его следует использовать, когда turtle применяется как часть какого-либо приложения. Функция Screen() возвращает объект одиночку подкласса TurtleScreen . Функцию следует использовать, когда turtle используется как автономный инструмент для создания графики. Т. к. это объект одиночка, наследование от его класса невозможно. Все методы TurtleScreen/Screen также существуют как функции, т. е. как часть интерфейса, ориентированного на процедуры.
Процедурный интерфейс предоставляет функции, производные от методов классов Screen и Turtle . У них те же имена, что и соответствующие методы. Объект экрана создаётся автоматически при каждом вызове функции, производной от метода Screen. Объект черепахи (без имени) автоматически создаётся при каждом вызове любой функции, производной от метода черепахи.
Для использования нескольких черепах на экране необходимо использовать объектно-ориентированный интерфейс.
В следующей документации приведён список аргументов для функций. У методов, конечно, есть дополнительный первый аргумент self который здесь пропущен.
Обзор доступных методов Turtle и Screen¶
Методы Turtle¶
Движение черепахи Двигаться и рисовать
Рассказать о состоянии Черепахи
Настройка и измерение
Управление Pen Состояние рисования
Управление цветом
Заполнение
Больше контроля рисования
Состояние черепахи Видимость
Внешний вид
Использование событий
Специальные методы Turtle
Методы TurtleScreen/Screen¶
Управление окном
Управление анимацией
Использование событий экрана
Настройки и специальные методы
Методы ввода
Методы, специфичные для Screen
Методы RawTurtle/Turtle и соответствующие функции¶
Большинство примеров в этом разделе относятся к сущности черепахи под названием turtle .
Движение черепахи¶
turtle. forward ( distance ) ¶ turtle. fd ( distance ) ¶
| Параметры: | distance – число (целое число или число с плавающей запятой) |
|---|
Двигать черепаху вперёд на указанный distance, в сторону направляется черепахи.
>>> turtle.position() (0.00,0.00) >>> turtle.forward(25) >>> turtle.position() (25.00,0.00) >>> turtle.forward(-75) >>> turtle.position() (-50.00,0.00)
turtle. back ( distance ) ¶ turtle. bk ( distance ) ¶ turtle. backward ( distance ) ¶
| Параметры: | distance – число |
|---|
Переместить черепаху назад на distance, противоположную направлению, в котором движется черепаха. Не меняет направление черепахи.
>>> turtle.position() (0.00,0.00) >>> turtle.backward(30) >>> turtle.position() (-30.00,0.00)
turtle. right ( angle ) ¶ turtle. rt ( angle ) ¶
| Параметры: | angle – число (целое число или число с плавающей запятой) |
|---|
Повернуть черепаху направо на angle единиц. (Единицы измерения по умолчанию являются градусами, но могут быть установлены с помощью функций degrees() и radians() ). Ориентация угла зависит от режима черепахи, см. mode() .
>>> turtle.heading() 22.0 >>> turtle.right(45) >>> turtle.heading() 337.0
turtle. left ( angle ) ¶ turtle. lt ( angle ) ¶
| Параметры: | angle – число (целое число или число с плавающей запятой) |
|---|
Повернуть черепаху налево на angle единиц. (Единицы измерения по умолчанию являются градусами, но могут устанавливаться с помощью функций degrees() и radians() ). Ориентация угла зависит от режима черепахи, см. mode() .
>>> turtle.heading() 22.0 >>> turtle.left(45) >>> turtle.heading() 67.0
Если y равно None , x должна быть пара координат или Vec2D (например, как возвращенный pos() ).
Переместить черепаху в абсолютное положение. Если перо расположено вниз, провести линию. Не меняя ориентацию черепахи.
>>> tp = turtle.pos() >>> tp (0.00,0.00) >>> turtle.setpos(60,30) >>> turtle.pos() (60.00,30.00) >>> turtle.setpos((20,80)) >>> turtle.pos() (20.00,80.00) >>> turtle.setpos(tp) >>> turtle.pos() (0.00,0.00)
turtle. setx ( x ) ¶
| Параметры: | x – число (целое число или число с плавающей запятой) |
|---|
Установить первую координату черепахи на x, а вторую оставить без изменений.
>>> turtle.position() (0.00,240.00) >>> turtle.setx(10) >>> turtle.position() (10.00,240.00)
turtle. sety ( y ) ¶
| Параметры: | y – число (целое число или число с плавающей запятой) |
|---|
Задать для второй координаты черепахи значение y, оставляя первую координату неизменной.
>>> turtle.position() (0.00,40.00) >>> turtle.sety(-10) >>> turtle.position() (0.00,-10.00)
turtle. setheading ( to_angle ) ¶ turtle. seth ( to_angle ) ¶
| Параметры: | to_angle – число (целое число или число с плавающей запятой) |
|---|
Установить ориентацию черепахи на to_angle. Вот некоторые общие направления в градусах:
| стандартный режим | logo режим |
|---|---|
| 0 — восток | 0 — север |
| 90 — север | 90 — восток |
| 180 — запад | 180 — юг |
| 270 — юг | 270 — запад |
>>> turtle.setheading(90) >>> turtle.heading() 90.0
turtle. home ( ) ¶
Переместить черепаху в исходную точку — координаты (0,0) и повернув её голову в её начальное положение (которая зависит от режима, см. mode() ).
>>> turtle.heading() 90.0 >>> turtle.position() (0.00,-10.00) >>> turtle.home() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0
Нарисовать круг с заданным radius. Центр — это radius единиц слева от черепахи; угол extent определяет, какая часть окружности нарисована. Если extent не указан, нарисовать весь круг. Если extent не является полным кругом, одна конечная точка дуги является текущим положением пера. Провести дугу против часовой стрелки, если radius положительный, в противном случае — по часовой стрелке. Наконец, направление черепахи изменяется на extent.
Поскольку окружность аппроксимируется вписанным правильным многоугольником, steps определяет количество шагов для использования. Если он не указан, он будет рассчитан автоматически. Может использоваться для построения правильных многоугольников.
>>> turtle.home() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0 >>> turtle.circle(50) >>> turtle.position() (-0.00,0.00) >>> turtle.heading() 0.0 >>> turtle.circle(120, 180) # нарисовать полукруг >>> turtle.position() (0.00,240.00) >>> turtle.heading() 180.0
Нарисовать круглую точку диаметром size, используя color. Если size не указан, используется максимум pensize+4 и 2*pensize.
>>> turtle.home() >>> turtle.dot() >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) >>> turtle.position() (100.00,-0.00) >>> turtle.heading() 0.0
turtle. stamp ( ) ¶
Отметить копию формы черепахи на холсте в текущем положении черепахи. Возвращает stamp_id для этого штампа, который можно использовать для удаления путём вызова clearstamp(stamp_id) .
>>> turtle.color("blue") >>> turtle.stamp() 11 >>> turtle.fd(50)
turtle. clearstamp ( stampid ) ¶
| Параметры: | stampid – целое число, должно быть возвращено значением предыдущего вызова stamp() |
|---|
Удалить штамп с заданным stampid.
>>> turtle.position() (150.00,-0.00) >>> turtle.color("blue") >>> astamp = turtle.stamp() >>> turtle.fd(50) >>> turtle.position() (200.00,-0.00) >>> turtle.clearstamp(astamp) >>> turtle.position() (200.00,-0.00)
turtle. clearstamps ( n=None ) ¶
| Параметры: | n – целое число (или None ) |
|---|
Удалить все или первый/последний n черепашьих штампов. Если n None , удалить все штампы, если n > 0 удалить первые штампы n, а если n < 0 удалить последние n штампы.
>>> for i in range(8): . turtle.stamp(); turtle.fd(30) 13 14 15 16 17 18 19 20 >>> turtle.clearstamps(2) >>> turtle.clearstamps(-2) >>> turtle.clearstamps()
turtle. undo ( ) ¶
Отменить (повторно) последнее действие (действия) черепахи. Количество доступных действий отмены определяется размером undobuffer.
>>> for i in range(4): . turtle.fd(50); turtle.lt(80) . >>> for i in range(8): . turtle.undo()
turtle. speed ( speed=None ) ¶
| Параметры: | speed – целое число в диапазоне 0..10 или speedstring (см. ниже) |
|---|
Задать скорость черепахи целым числом в диапазоне 0..10. Если аргумент не указан, вернуть текущую скорость.
Если введено число больше 10 или меньше 0.5, скорость устанавливается на 0. Строки скорости сопоставляются со значениями скорости следующим образом:
- «fastest»: 0
- «fast»: 10
- «normal»: 6
- «slow»: 3
- «slowest»: 1
Скорости от 1 до 10 ускоряют анимацию рисования линий и поворота черепах.
Внимание: speed = 0 означает, что анимация не используется. forward/back заставляет черепаху прыгать и также влево/вправо заставляет черепаху мгновенно повернуться.
>>> turtle.speed() 3 >>> turtle.speed('normal') >>> turtle.speed() 6 >>> turtle.speed(9) >>> turtle.speed() 9
Спросить о состоянии черепахи¶
turtle. position ( ) ¶ turtle. pos ( ) ¶
Возвращает текущее местоположение черепахи (x, y) (как вектор Vec2D ).
>>> turtle.pos() (440.00,-0.00)
Возвращает угол между линией от положения черепахи к положению, заданному (x, y), вектором или другой черепахой. Это зависит от начальной ориентации черепахи, которая зависит от режима — «standard»/«world» или «logo».
>>> turtle.goto(10, 10) >>> turtle.towards(0,0) 225.0
turtle. xcor ( ) ¶
Возвращает координату x черепахи.
>>> turtle.home() >>> turtle.left(50) >>> turtle.forward(100) >>> turtle.pos() (64.28,76.60) >>> print(round(turtle.xcor(), 5)) 64.27876
turtle. ycor ( ) ¶
Возвращает координату y черепахи.
>>> turtle.home() >>> turtle.left(60) >>> turtle.forward(100) >>> print(turtle.pos()) (50.00,86.60) >>> print(round(turtle.ycor(), 5)) 86.60254
turtle. heading ( ) ¶
Возвращает текущий курс черепахи (значение зависит от режима черепахи, см. mode() ).
>>> turtle.home() >>> turtle.left(67) >>> turtle.heading() 67.0
Возвращает расстояние от черепахи до (x, y), заданного вектора или другой черепахи в шаговых единицах черепахи.
>>> turtle.home() >>> turtle.distance(30,40) 50.0 >>> turtle.distance((30,40)) 50.0 >>> joe = Turtle() >>> joe.forward(77) >>> turtle.distance(joe) 77.0
Параметры измерения¶
turtle. degrees ( fullcircle=360.0 ) ¶
| Параметры: | fullcircle – число |
|---|
Установить единицы измерения угла, т. е. Задать число «градусов» для полного круга. Значение по умолчанию — 360 градусов.
>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 Изменить единицу измерения угла на град (также известный как gon, grade или gradian и равный 1/100-й от прямого угла.) >>> turtle.degrees(400.0) >>> turtle.heading() 100.0 >>> turtle.degrees(360) >>> turtle.heading() 90.0
turtle. radians ( ) ¶
Установить единицы измерения угла в радианы. Эквивалентно degrees(2*math.pi) .
>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 >>> turtle.radians() >>> turtle.heading() 1.5707963267948966
Контроль за пером¶
Состояние рисунка¶
turtle. pendown ( ) ¶ turtle. pd ( ) ¶ turtle. down ( ) ¶
Поместить перо вниз — рисование при движении.
turtle. penup ( ) ¶ turtle. pu ( ) ¶ turtle. up ( ) ¶
Поместить перо вверх — никакого рисунка при движении.
turtle. pensize ( width=None ) ¶ turtle. width ( width=None ) ¶
| Параметры: | width – положительное число |
|---|
Установить толщину линии на width или вернуть её. Если для resizemode установлено значение «auto», а turtleshape является polygon, этот многоугольник рисуется с одинаковой толщиной линии. Если аргумент не указан, возвращается текущий размер пера.
>>> turtle.pensize() 1 >>> turtle.pensize(10) # отсюда нарисованы линии шириной 10
- pen – словарь с некоторыми или всеми перечисленными ниже ключами
- pendict – один или несколько ключевых аргументов с перечисленными ниже ключами
Вернуть или установить атрибуты пера в «словарь пера» со следующими парами ключ/значение:
- «shown»: True/False
- «pendown»: True/False
- «pencolor»: цветная строка или цветовой кортеж
- «fillcolor»: цветная строка или цветовой кортеж
- «pensize»: положительное число
- «speed»: число в диапазоне 0..10
- «resizemode»: «auto» или «user» или «noresize»
- «stretchfactor»: (положительное число, положительное число)
- «outline»: положительное число
- «tilt»: число
Словарь можно использовать в качестве аргумента для последующего вызова pen() для восстановления прежнего состояния пера. Более того, один или несколько из этих атрибутов могут быть предоставлены как ключевые аргументы. Это можно использовать для установки нескольких атрибутов пера в одном операторе.
>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) >>> sorted(turtle.pen().items()) [('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'), ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'), ('shearfactor', 0.0), ('shown', True), ('speed', 9), ('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)] >>> penstate=turtle.pen() >>> turtle.color("yellow", "") >>> turtle.penup() >>> sorted(turtle.pen().items())[:3] [('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow')] >>> turtle.pen(penstate, fillcolor="green") >>> sorted(turtle.pen().items())[:3] [('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red')]
turtle. isdown ( ) ¶
Возвращает True если перо внизу, False если она вверху.
>>> turtle.penup() >>> turtle.isdown() False >>> turtle.pendown() >>> turtle.isdown() True
Цветной контроль¶
turtle. pencolor ( *args ) ¶
Вернуть или установить цвет пера.
Допустимы четыре формата ввода:
pencolor() Возвращает текущую цвет пера как спецификацию цвета строки или как кортеж (см. пример). Может использоваться в качестве ввода для другого вызова color/pencolor/fillcolor. pencolor(colorstring) Задать для цвета пера значение colorstring, которое является строкой цветовой спецификации Tk, например «red» , «yellow» или «#33cc8c» . pencolor((r, g, b)) Установить цвет пера в RGB, представленный кортежем r, g и b. Каждый из r, g и b должен находиться в диапазоне 0..colormode, где colormode принимает значения от 1.0 до 255 (см. colormode() ). pencolor(r, g, b) Установить для пера цвет RGB, представленный r, g и b. Каждый из r, g и b должен находиться в диапазоне 0..colormode.
Если фигурка представляет собой многоугольник, контур этого многоугольника рисуется с помощью только что заданного цвета пера.
>>> colormode() 1.0 >>> turtle.pencolor() 'red' >>> turtle.pencolor("brown") >>> turtle.pencolor() 'brown' >>> tup = (0.2, 0.8, 0.55) >>> turtle.pencolor(tup) >>> turtle.pencolor() (0.2, 0.8, 0.5490196078431373) >>> colormode(255) >>> turtle.pencolor() (51.0, 204.0, 140.0) >>> turtle.pencolor('#32c18f') >>> turtle.pencolor() (50.0, 193.0, 143.0)
turtle. fillcolor ( *args ) ¶
Возвращает или задаёт цвет заливки.
Допустимы четыре формата ввода:
fillcolor() Вернуть текущий цвет заливки как строку спецификации цвета, возможно, в формате кортежа (см. пример). Может использоваться как ввод для другого вызова color/pencolor/fillcolor. fillcolor(colorstring) Установить для fillcolor значение colorstring, которое является строкой спецификации цвета Tk, например «red» , «yellow» или «#33cc8c» . fillcolor((r, g, b)) Установить цвет заливки на цвет RGB, представленный кортежем r, g и b. Каждый из r, g и b должен находиться в диапазоне 0..colormode, где colormode равен 1.0 или 255 (см. colormode() ). fillcolor(r, g, b) Установить цвет заливки на цвет RGB, представленный r, g и b. Каждый из r, g и b должен находиться в диапазоне 0..colormode.
Если форма turtleshape представляет собой многоугольник, внутренняя часть этого многоугольника рисуется с помощью вновь заданного цвета заливки.
>>> turtle.fillcolor("violet") >>> turtle.fillcolor() 'violet' >>> turtle.pencolor() (50.0, 193.0, 143.0) >>> turtle.fillcolor((50, 193, 143)) # Целые числа, а не числа с плавающей точкой >>> turtle.fillcolor() (50.0, 193.0, 143.0) >>> turtle.fillcolor('#ffffff') >>> turtle.fillcolor() (255.0, 255.0, 255.0)
turtle. color ( *args ) ¶
Вернуть или установить цвет пера и цвет заливки.
Допускается несколько форматов ввода. Они используют от 0 до 3 аргументов следующим образом:
color() Возвращает текущий цвет пера и текущий цвет заливки в виде пары строк или кортежей спецификации цвета, возвращаемых pencolor() и fillcolor() . color(colorstring) , color((r,g,b)) , color(r,g,b) Входные данные, как в pencolor() , устанавливают для обоих цветов заливки и цвета пера заданное значение. color(colorstring1, colorstring2) , color((r1,g1,b1), (r2,g2,b2)) Эквивалентно pencolor(colorstring1) и fillcolor(colorstring2) и аналогично, если используется другой формат ввода.
Если turtleshape — многоугольник, контур и внутренняя часть этого многоугольника вырисовывается с новыми установленными цветами.
>>> turtle.color("red", "green") >>> turtle.color() ('red', 'green') >>> color("#285078", "#a0c8f0") >>> color() ((40.0, 80.0, 120.0), (160.0, 200.0, 240.0))
См. также: colormode() метода экрана.
Заполнение¶
turtle. filling ( ) ¶
Вернуть состояние заполнения ( True при заполнении, False в противном случае).
>>> turtle.begin_fill() >>> if turtle.filling(): . turtle.pensize(5) . else: . turtle.pensize(3)
turtle. begin_fill ( ) ¶
Вызывается непосредственно перед рисованием формы для заливки.
Независимо от того, заполняются ли области перекрытия для самопересекающихся многоугольников или нескольких фигур, зависит от графики операционной системы, типа перекрытия и количества перекрытий. Например, звезда «Черепаха» может быть либо полностью жёлтой, либо содержать несколько белых областей.
>>> turtle.color("black", "red") >>> turtle.begin_fill() >>> turtle.circle(80) >>> turtle.end_fill()
Больше контроля над рисованием¶
turtle. reset ( )
Удалить рисунки черепахи с экрана, заново отцентрировать черепаху и установить для переменных значения по умолчанию.
>>> turtle.goto(0,-22) >>> turtle.left(100) >>> turtle.position() (0.00,-22.00) >>> turtle.heading() 100.0 >>> turtle.reset() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0
turtle. clear ( )
Удалить рисунки черепахи с экрана. Не перемещать черепаху. Состояние и положение черепахи, а также рисунки других черепах не меняются.
Написать текст — строковое представление arg в текущей позиции черепахи по align («left», «center» или «right») и с заданным шрифтом. Если у move значение true, перо перемещается в правый нижний угол текста. По умолчанию move равно False .
>>> turtle.write("Home p">, True, align="center") >>> turtle.write((0,0), True)
Состояние черепахи¶
Видимость¶
turtle. hideturtle ( ) ¶ turtle. ht ( ) ¶
Сделать черепаху невидимой. Это хорошая идея, когда вы занимаетесь сложным рисунком, потому что скрытие черепахи заметно ускоряет рисование.
>>> turtle.hideturtle()
turtle. showturtle ( ) ¶ turtle. st ( ) ¶
Сделать черепаху видимой.
>>> turtle.showturtle()
turtle. isvisible ( ) ¶
Возвращает True если черепаха видима, False если она скрыта.
>>> turtle.hideturtle() >>> turtle.isvisible() False >>> turtle.showturtle() >>> turtle.isvisible() True
Внешность¶
turtle. shape ( name=None ) ¶
| Параметры: | name – строка, которая является допустимым именем фигуры |
|---|
Установить форму черепахи в форму с заданным name или, если имя не указано, вернуть имя текущей формы. Форма с name должна существовать в словаре форм TurtleScreen. Изначально существуют многоугольники следующих форм: «arrow», «turtle», «circle», «square», «triangle», «classic». Чтобы узнать, как работать с формами, см. Screen метод register_shape() .
>>> turtle.shape() 'classic' >>> turtle.shape("turtle") >>> turtle.shape() 'turtle'
turtle. resizemode ( rmode=None ) ¶
| Параметры: | rmode – одна из строк «auto», «user», «noresize» |
|---|
Установить для resizemode одно из значений: «auto», «user», «noresize». Если rmode не указан, вернуть текущий режим изменения размера. У различных режимов изменения размера есть следующие эффекты:
- «auto»: адаптирует внешний вид черепахи в соответствии со значением pensize.
- «user»: адаптирует внешний вид черепахи в соответствии со значениями stretchfactor и outlinewidth (контура), которые установлены shapesize() .
- «noresize»: никакой адаптации внешнего вида черепахи не происходит.
resizemode(«user») вызывается shapesize() при использовании с аргументами.
>>> turtle.resizemode() 'noresize' >>> turtle.resizemode("auto") >>> turtle.resizemode() 'auto'
- stretch_wid – положительное число
- stretch_len – положительное число
- outline – положительное число
Вернуть или установить атрибуты пера x/y-факторы растяжения и/или контура. Установить resizemode на «user». Если и только если для resizemode установлено значение «user», черепаха будет отображаться растянутой в соответствии с её факторами растяжения: stretch_wid — это фактор растяжения, перпендикулярный её ориентации, stretch_len — фактор растяжения в направлении её ориентации, outline определяет ширину контура фигур.
>>> turtle.shapesize() (1.0, 1.0, 1) >>> turtle.resizemode("user") >>> turtle.shapesize(5, 5, 12) >>> turtle.shapesize() (5, 5, 12) >>> turtle.shapesize(outline=8) >>> turtle.shapesize() (5, 5, 8)
turtle. shearfactor ( shear=None ) ¶
| Параметры: | shear – число (необязательно) |
|---|
Установить или вернуть текущий коэффициент сдвига. Сдвинуть форму черепахи в соответствии с заданным коэффициентом сдвига, который является тангенсом угла сдвига. У черепахи не изменяется курс (направление движения). Если сдвиг не задан: вернуть текущий коэффициент сдвига, т.е. её тангенс угла сдвига, по которому разделяются линии, параллельные направлению движения черепахи.
>>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.shearfactor(0.5) >>> turtle.shearfactor() 0.5
turtle. tilt ( angle ) ¶
| Параметры: | angle – число |
|---|
Повернуть фигуру черепахи на angle от её текущего угла наклона, но не изменяя направление черепахи (направление движения).
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.tilt(30) >>> turtle.fd(50) >>> turtle.tilt(30) >>> turtle.fd(50)
turtle. settiltangle ( angle ) ¶
| Параметры: | angle – число |
|---|
Повернуть фигуру черепахи так, чтобы она указывала в направлении, указанном angle, независимо от текущего угла наклона. Не меняет курс (направление движения) черепахи.
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.settiltangle(45) >>> turtle.fd(50) >>> turtle.settiltangle(-45) >>> turtle.fd(50)
Не рекомендуется, начиная с версии 3.1.
turtle. tiltangle ( angle=None ) ¶
| Параметры: | angle – число (необязательно) |
|---|
Установить или вернуть текущий угол наклона. Если угол задан, повернуть фигуру черепахи так, чтобы она указывала в направлении, заданном углом, независимо от текущего угла наклона. Не меняет курс (направление движения) черепахи. Если угол не указан: вернуть текущий угол наклона, т.е. её угол между ориентацией формы черепахи и курсом черепахи (направление её движения).
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.tilt(45) >>> turtle.tiltangle() 45.0
Установка или возвращение текущей матрицы преобразования формы черепахи.
Если ни один из элементов матрицы не задан, вернуть матрицу преобразования как кортеж из 4 элементов. В противном случае установить данные элементы и преобразовать форму черепахи в соответствии с матрицей, состоящей из первой строки t11, t12 и второй строки t21, t22. Определитель t11 * t22 — t12 * t21 не должен быть нулевым, иначе возникает ошибка. Изменяет коэффициент растяжения, коэффициент сдвига и угол наклона в соответствии с заданной матрицей.
>>> turtle = Turtle() >>> turtle.shape("square") >>> turtle.shapesize(4,2) >>> turtle.shearfactor(-0.5) >>> turtle.shapetransform() (4.0, -1.0, -0.0, 2.0)
turtle. get_shapepoly ( ) ¶
Возвращает текущий многоугольник формы как кортеж пар координат. Её можно использовать для определения новой формы или компонентов составной формы.
>>> turtle.shape("square") >>> turtle.shapetransform(4, -1, 0, 2) >>> turtle.get_shapepoly() ((50, -20), (30, 20), (-50, 20), (-30, -20))
Использование событий¶
- fun – функция с двумя аргументами, которая будет вызвана с координатами точки клика на холсте
- btn – номер кнопки мыши, по умолчанию — 1 (левая кнопка мыши)
- add – True или False – если True , то будет добавлен новый биндинг, в противном случае он заменит прежний биндинг
Привязать fun к событиям щелчка мыши для черепахи. Если fun None , существующие привязки удаляются. Пример для анонимной черепахи, т. е. процедурный способ:
>>> def turn(x, y): . left(180) . >>> onclick(turn) # Теперь щелчок в черепаху включит её. >>> onclick(None) # привязка к событию будет удалена
- fun – функция с двумя аргументами, которая будет вызвана с координатами точки клика на холсте
- btn – номер кнопки мыши, по умолчанию — 1 (левая кнопка мыши)
- add – True или False – если True , то будет добавлен новый биндинг, в противном случае он заменит прежний биндинг
Связать fun с событиями отпускания кнопки мыши на черепахе. Если fun — None , существующие привязки удаляются.
>>> class MyTurtle(Turtle): . def glow(self,x,y): . self.fillcolor("red") . def unglow(self,x,y): . self.fillcolor("") . >>> turtle = MyTurtle() >>> turtle.onclick(turtle.glow) # нажав на черепаху, цвет заливки становится красным, >>> turtle.onrelease(turtle.unglow) # отпускание превращает её в прозрачный.
- fun – функция с двумя аргументами, которая будет вызвана с координатами точки клика на холсте
- btn – номер кнопки мыши, по умолчанию — 1 (левая кнопка мыши)
- add – True или False – если True , то будет добавлен новый биндинг, в противном случае он заменит прежний биндинг
Связать fun с событиями перемещения мыши на этой черепахе. Если fun — None , существующие привязки удаляются.
Замечание: каждой последовательности событий перемещения мыши на черепахе предшествует событие щелчка мыши на этой черепахе.
>>> turtle.ondrag(turtle.goto)
Впоследствии щелчок и перетаскивание черепахи будет перемещать её по экрану, создавая рисунки от руки (если перо опущено).
Специальные методы черепахи¶
turtle. begin_poly ( ) ¶
Начать запись вершин многоугольника. Текущее положение черепахи — первая вершина многоугольника.
Остановить запись вершин многоугольника. Текущее положение черепахи является последней вершиной многоугольника. Будет связано с первой вершиной.
Возвращает последний записанный многоугольник.
>>> turtle.home() >>> turtle.begin_poly() >>> turtle.fd(100) >>> turtle.left(20) >>> turtle.fd(30) >>> turtle.left(60) >>> turtle.fd(50) >>> turtle.end_poly() >>> p = turtle.get_poly() >>> register_shape("myFavouriteShape", p)
turtle. clone ( ) ¶
Создаёт и возвращает клон черепахи с одинаковым положением, заголовком и свойствами черепахи.
>>> mick = Turtle() >>> joe = mick.clone()
turtle. getturtle ( ) ¶ turtle. getpen ( ) ¶
Вернуть сам объект черепахи. Единственное разумное использование: как функция для возврата «анонимной черепахи»:
>>> pet = getturtle() >>> pet.fd(50) >>> pet
turtle. getscreen ( ) ¶
Вернуть объект TurtleScreen , на котором рисует черепаха. Затем для этого объекта можно вызвать методы TurtleScreen.
>>> ts = turtle.getscreen() >>> ts >>> ts.bgcolor("pink")
turtle. setundobuffer ( size ) ¶
| Параметры: | size – целое число или None |
|---|
Установить или отключить буфер отмены. Если size является целым числом, устанавливается пустой буфер отмены заданного размера. size дает максимальное количество действий черепахи, которые можно отменить с помощью метода/функции undo() . Если size — None , буфер отмены отключён.
>>> turtle.setundobuffer(42)
turtle. undobufferentries ( ) ¶
Возвращает количество записей в буфере отмены.
>>> while undobufferentries(): . undo()
Составные формы¶
Чтобы использовать составные формы черепах, состоящие из нескольких многоугольников разного цвета, необходимо явно использовать класс помощник Shape как описано ниже:
- Создать пустой объект Shape типа «составной».
- Добавить к этому объекту необходимое количество компонентов с помощью метода addcomponent() . Например:
>>> s = Shape("compound") >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5)) >>> s.addcomponent(poly1, "red", "blue") >>> poly2 = ((0,0),(10,-5),(-10,-5)) >>> s.addcomponent(poly2, "blue", "red")
>>> register_shape("myshape", s) >>> shape("myshape")
Класс Shape используется внутри метода register_shape() по-разному. Программист приложения должен работать с классом Shape только при использовании составных фигур, как показано выше!
Методы TurtleScreen/Screen и соответствующие функции¶
Большинство примеров в этом разделе относятся к сущности TurtleScreen под названием screen .
Контроль за окном¶
turtle. bgcolor ( *args ) ¶
| Параметры: | args – цвет-строка или три числа в диапазоне 0..colormode или 3-кортеж таких чисел |
|---|
Установить или вернуть цвет фона экрана TurtleScreen.
>>> screen.bgcolor("orange") >>> screen.bgcolor() 'orange' >>> screen.bgcolor("#800080") >>> screen.bgcolor() (128.0, 0.0, 128.0)
turtle. bgpic ( picname=None ) ¶
| Параметры: | picname – строка, имя gif-файла, «nopic» или None |
|---|
Устанавливает фоновое изображение или возвращает имя текущего фонового изображения. Если picname — имя файла, установить соответствующее изображение в качестве фона. Если picname — «nopic» , удалить фоновое изображение, если оно есть. Если picname — None , вернуть имя файла текущего фонового изображения.
>>> screen.bgpic() 'nopic' >>> screen.bgpic("landscape.gif") >>> screen.bgpic() "landscape.gif"
turtle. clear ( ) ¶ turtle. clearscreen ( ) ¶
Удаляет все рисунки и всех черепах с экрана TurtleScreen. Сбрасывает пустой TurtleScreen в исходное состояние: белый фон, без фонового изображения, без привязки событий и трассировки.
Метод TurtleScreen доступен как глобальная функция только под именем clearscreen . Глобальная функция clear является другой функцией, производной от Turtle метода clear .
turtle. reset ( ) ¶ turtle. resetscreen ( ) ¶
Сбрасывает все черепахи на экране в исходное состояние.
Метод TurtleScreen доступен как глобальная функция только под именем resetscreen . Глобальная функция reset является другой функцией, производной от Turtle метода reset .
- canvwidth – положительное целое число, новая ширина холста в пикселях
- canvheight – положительное целое число, новая высота холста в пикселях
- bg – цветная строка или кортеж, новый цвет фона
Если аргументы не указаны, вернуть текущее значение (ширина холста, высота холста). Или изменить размер холста, на котором рисуют черепахи. Не изменяет окно рисования. Для наблюдения за скрытыми частями холста используйте полосы прокрутки. С помощью этого метода можно сделать видимыми те части рисунка, которые раньше находились за пределами холста.
>>> screen.screensize() (400, 300) >>> screen.screensize(2000,1500) >>> screen.screensize() (2000, 1500)
например, для поиска ошибочно сбежавшей черепахи; -)
- llx – число, координата x нижнего левого угла холста
- lly – число, координата y нижнего левого угла холста
- urx – число, координата x правого верхнего угла холста
- ury – число, координата y правого верхнего угла холста
Настроить пользовательскую систему координат и при необходимости переключитесь в режим «world». Выполняет screen.reset() . Если режим «world» уже активирован, все рисунки перерисовываются в соответствии с новыми координатами.
ВНИМАНИЕ: в пользовательских системах координат углы могут показаться искажёнными.
>>> screen.reset() >>> screen.setworldcoordinates(-50,-7.5,50,7.5) >>> for _ in range(72): . left(10) . >>> for _ in range(8): . left(45); fd(2) # обычный восьмиугольник
Управление анимацией¶
turtle. delay ( delay=None ) ¶
| Параметры: | delay – положительное целое число |
|---|
Установить или вернуть рисунок через delay в миллисекундах. (Это приблизительно временной интервал между двумя последовательными обновлениями холста.) Чем больше задержка рисования, тем медленнее анимация.
>>> screen.delay() 10 >>> screen.delay(5) >>> screen.delay() 5
Включить/выключить анимацию черепахи и установить задержку для обновления рисунков. Если задан n, действительно выполняется только каждое n-е регулярное обновление экрана. (Может использоваться для ускорения рисования сложной графики.) При вызове без аргументов возвращает текущее сохраненное значение n. Второй аргумент устанавливает значение задержки (см. delay() ).
>>> screen.tracer(8, 25) >>> dist = 2 >>> for i in range(200): . fd(dist) . rt(90) . dist += 2
turtle. update ( ) ¶
Выполнить обновление экрана черепахи. Используется при выключенном трассировщике.
См. также speed() метод RawTurtle/Turtle.
Использование событий экрана¶
turtle. listen ( xdummy=None, ydummy=None ) ¶
Установить фокус на экран черепахи (в порядке собора ключевых событий). Для передачи listen() методу onclick предоставляются фиктивные аргументы.
Связать fun с событием отпускания клавиши для клавиши. Если fun — None , привязки событий удаляются. Примечание: чтобы иметь возможность регистрировать ключевые события, у экрана черепахи должен быть фокус. (См. метод listen() .)
>>> def f(): . fd(50) . lt(60) . >>> screen.onkey(f, "Up") >>> screen.listen()
Привязать fun с событием нажатия клавиши для клавиши, если клавиша задана, или с любым событием нажатия клавиши, если клавиша не указана. Примечание: чтобы иметь возможность регистрировать ключевые события, у экрана черепахи должен быть фокус. (См. метод listen() .)
>>> def f(): . fd(50) . >>> screen.onkey(f, "Up") >>> screen.listen()
- fun – функция с двумя аргументами, которая будет вызвана с координатами точки клика на холсте
- btn – номер кнопки мыши, по умолчанию — 1 (левая кнопка мыши)
- add – True или False – если True , то будет добавлен новый биндинг, в противном случае он заменит прежний биндинг
Привязать fun к событиям щелчка мыши на экране. Если fun None , существующие привязки удаляются.
Пример для экземпляра TurtleScreen с именем screen и экземпляра Turtle с именем turtle :
>>> screen.onclick(turtle.goto) # Впоследствии нажатие на TurtleScreen будет >>> # заставлять черепаху двигаться в точку щелчка. >>> screen.onclick(None) # снова удалить биндинг событий
Метод TurtleScreen доступен как глобальная функция только под именем onscreenclick . Глобальная функция onclick является другой функцией, производной от Turtle метода onclick .
Установить таймер, вызывающий fun через t миллисекунд.
>>> running = True >>> def f(): . if running: . fd(50) . lt(60) . screen.ontimer(f, 250) >>> f() ### заставляет черепаху маршировать вокруг >>> running = False
turtle. mainloop ( ) ¶ turtle. done ( ) ¶
Запускает цикл событий — вызов функции основного цикла Tkinter. Должен быть последним оператором в графической программе черепахи. Не должно использоваться, если сценарий запускается из IDLE в режиме -n (без подпроцесса) — для интерактивного использования графики черепахи.
>>> screen.mainloop()
Методы ввода¶
Открывает диалоговое окно для ввода строки. title параметр — заголовок диалогового окна, prompt — текст, в основном определяющий вводимую информацию. Возвращает введённую строку. Если диалоговое окно отменено, возвращает None :
>>> screen.textinput("NIM", "Name of first player:")
Открывает диалоговое окно для ввода числа. title — заголовок диалогового окна, prompt — в основном определяющий текст, какую числовую информацию ввести. По умолчанию: значение по умолчанию, minval: минимальное значение для ввода, maxval: максимального значения для ввода числа и должен находиться в диапазоне minval..maxval, если они даны. В противном случае выдается подсказка, и диалоговое окно остается открытым для исправления. Возвращает введённый номер. Если диалоговое окно отменено, возвращает None :
>>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)
Настройки и специальные методы¶
turtle. mode ( mode=None ) ¶
| Параметры: | mode – одно из строк «standard», «logo» или «world» |
|---|
Устанавливает режим черепахи («standard», «logo» или «world») и выполняет сброс. Если режим не задан, возвращает текущий режим.
Режим «standard» совместим со старым turtle . Режим «logo» совместим с большинством Logo изображений черепахи. В режиме «world» используются определенные пользователем «мировые координаты». Внимание: в этом режиме углы искажаются, если x/y удельное соотношение не равно 1.
| Режим | Начальный заголовок черепахи | положительные углы |
|---|---|---|
| «standard» | направо (восток) | против часовой стрелки |
| «logo» | вверх (север) | по часовой стрелке |
>>> mode("logo") # сбрасывает черепаху, направляющуюся на север >>> mode() 'logo'
turtle. colormode ( cmode=None ) ¶
| Параметры: | cmode – одно из значений 1.0 или 255 |
|---|
Возвращает цветовой код или устанавливает для него значение 1.0 или 255. В дальнейшем r, g, b значения цветовых троек должны находиться в диапазоне 0..cmode.
>>> screen.colormode(1) >>> turtle.pencolor(240, 160, 80) Traceback (most recent call last): . TurtleGraphicsError: bad color sequence: (240, 160, 80) >>> screen.colormode() 1.0 >>> screen.colormode(255) >>> screen.colormode() 255 >>> turtle.pencolor(240,160,80)
turtle. getcanvas ( ) ¶
Вернуть холст TurtleScreen. Полезно для инсайдеров, которые знают, что делать с холстом Tkinter.
>>> cv = screen.getcanvas() >>> cv
turtle. getshapes ( ) ¶
Возвращает список имён всех доступных в настоящее время фигур черепах.
>>> screen.getshapes() ['arrow', 'blank', 'circle', . 'turtle']
turtle. register_shape ( name, shape=None ) ¶ turtle. addshape ( name, shape=None ) ¶
Существует три различных способа вызова этой функции:
-
name — имя gif-файла, а shape None : установить соответствующую фигуру изображения.:
>>> screen.register_shape("turtle.gif")
Примечание Фигуры изображения не вращаются при повороте черепахи, поэтому они не отображают заголовок черепахи!
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
Добавить фигуру черепахи в список фигур TurtleScreen. Только зарегистрированные таким образом формы можно использовать с помощью команды shape(shapename) .
Возвращает список черепах на экране.
>>> for turtle in screen.turtles(): . turtle.color("red")
turtle. window_height ( ) ¶
Возвращает высоту черепашьего окна.
>>> screen.window_height() 480
turtle. window_width ( ) ¶
Возвращает ширину черепашьего окна.
>>> screen.window_width() 640
Методы, специфичные для Screen, не наследуемые от TurtleScreen¶
turtle. bye ( ) ¶
Закрыть окно с туртлеграфикой.
Привязать метод bye() к щелчкам мыши по экрану.
Если значение «using_IDLE» в словаре конфигурации — False (значение по умолчанию), также войти в главный цикл. Примечание: если используется IDLE с переключателем -n (без подпроцесса), это значение должно устанавливаться на True в turtle.cfg . В этом случае собственный главный цикл IDLE также активен для клиентского скрипта.
turtle. setup ( width=_CFG[«width»], height=_CFG[«height»], startx=_CFG[«leftright»], starty=_CFG[«topbottom»] ) ¶
Задать размер и положение главного окна. Значения аргументов по умолчанию хранятся в словаре конфигурации и могут быть изменены с помощью файла turtle.cfg .
- width – если целое число, размер в пикселях, если float, доля экрана; по умолчанию 50% экрана
- height – если целое число, высота в пикселях, если float, доля экрана; по умолчанию 75% экрана
- startx – если положителен, начальная позиция в пикселях от левого края экрана, если отрицательный от правого края, если None , центрировать окно по горизонтали
- starty – если положителен, начальная позиция в пикселях от верхнего края экрана, если отрицательный от нижнего края, если None , центрировать окно по вертикали
>>> screen.setup (width=200, height=200, startx=0, starty=0) >>> # устанавливает окно в 200x200 пикселей, в левом верхнем углу экрана >>> screen.setup(width=.75, height=0.5, startx=None, starty=None) >>> # устанавливает окно на 75% экрана на 50% экрана и центров
turtle. title ( titlestring ) ¶
| Параметры: | titlestring – строка, которая показана в строке заголовка черепахи графического окна |
|---|
Установить заголовок окна черепахи на titlestring.
>>> screen.title("Welcome to the turtle zoo!")
Общественные классы¶
class turtle. RawTurtle ( canvas ) ¶ class turtle. RawPen ( canvas ) ¶
| Параметры: | canvas – tkinter.Canvas , ScrolledCanvas или TurtleScreen |
|---|
Создать черепаху. У черепахи есть все методы, описанные выше как «методы Turtle/RawTurtle».
class turtle. Turtle ¶
Подкласс RawTurtle, содержит тот же интерфейс, но использует объект Screen по умолчанию, созданный автоматически при первой необходимости.
class turtle. TurtleScreen ( cv ) ¶
| Параметры: | cv – tkinter.Canvas |
|---|
Предоставляет методы, ориентированные на экран, такие как setbg() и т. д., описанные выше.
class turtle. Screen ¶
class turtle. ScrolledCanvas ( master ) ¶
| Параметры: | master – некоторый виджет Tkinter для хранения ScrolledCanvas, т. е. Tkinter-холст с добавленными полосами прокрутки |
|---|
Используется классом Screen, который, таким образом, автоматически предоставляет ScrolledCanvas в качестве игровой площадки для черепах.
class turtle. Shape ( type_, data ) ¶
| Параметры: | type_ – один из строк «polygon», «image», «compound» |
|---|
Фигуры моделирования структуры данных. Пара (type_, data) должна соответствовать следующей спецификации:
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5)) >>> s = Shape("compound") >>> s.addcomponent(poly, "red", "blue") >>> # . добавить больше компонентов и затем использовать register_shape()
Класс двумерных векторов, используемый в качестве вспомогательного класса для реализации графики черепахи. Может быть также полезен для черепашьих графических программ. Унаследован от кортежа, поэтому вектор является кортежем!
Предоставляет (для a, векторов b, числа k):
- a + b векторное сложение
- a — b векторное вычитание
- a * b скалярное произведение
- k * a и a * k умножение со скаляром
- abs(a) абсолютное значение а
- a.rotate(angle) вращение
Справка и настройка¶
Как пользоваться помощью¶
Публичные методы классов Screen и Turtle подробно документируются с помощью докстрингов. Таким образом, они могут использоваться как онлайн-справки через справочные средства Python:
- При использовании IDLE в подсказках отображаются сигнатуры и первые строки докстрингов типизированных вызовов функций/методов.
- Вызов help() по методам или функциям отображает докстринги:
>>> help(Screen.bgcolor) Help on method bgcolor in module turtle: bgcolor(self, *args) unbound turtle.Screen method Set or return backgroundcolor of the TurtleScreen. Arguments (if given): a color string or three numbers in the range 0..colormode or a 3-tuple of such numbers. >>> screen.bgcolor("orange") >>> screen.bgcolor() "orange" >>> screen.bgcolor(0.5,0,0.5) >>> screen.bgcolor() "#800080" >>> help(Turtle.penup) Help on method penup in module turtle: penup(self) unbound turtle.Turtle method Pull the pen up -- no drawing when moving. Aliases: penup | pu | up No argument >>> turtle.penup()
>>> help(bgcolor) Help on function bgcolor in module turtle: bgcolor(*args) Set or return backgroundcolor of the TurtleScreen. Arguments (if given): a color string or three numbers in the range 0..colormode or a 3-tuple of such numbers. Example:: >>> bgcolor("orange") >>> bgcolor() "orange" >>> bgcolor(0.5,0,0.5) >>> bgcolor() "#800080" >>> help(penup) Help on function penup in module turtle: penup() Pull the pen up -- no drawing when moving. Aliases: penup | pu | up No argument Example: >>> penup()
Измененные строки документации создаются автоматически вместе с определениями функций, производными от методов во время импорта.
Перевод докстрингов на различные языки¶
Существует утилита для создания словаря, ключами которого являются имена методов, а значениями — строки документации общедоступных методов классов Screen и Turtle.
turtle. write_docstringdict ( filename=»turtle_docstringdict» ) ¶
| Параметры: | filename – строка, используемая как имя файла |
|---|
Создать и записать словарь строк документации в скрипт Python с заданным именем файла. Функция должна вызываться явно (она не используется классами графики черепахи). Словарь строк документации будет записан в сценарий Python filename .py . Он предназначен для использования в качестве шаблона для перевода строк документации на разные языки.
Если вы (или ваши студенты) хотите использовать turtle с помощью онлайн-справки на родном языке, вы должны перевести докстринги и сохранить полученный файл, например, как turtle_docstringdict_german.py .
Если в файле turtle.cfg есть соответствующая запись, этот словарь будет прочитан во время импорта и заменит исходные английские докстринги.
На момент написания этой статьи существует докстринг словари на немецком и итальянском языках. (Запросы пожалуйста присылайте на glingl @ aon . at.)
Руководство по настройке Screen и Turtles¶
Встроенная конфигурация по умолчанию имитирует внешний вид и поведение старого модуля turtle, чтобы сохранить наилучшую совместимость с ним.
Если вы хотите использовать другую конфигурацию, которая лучше отражает особенности данного модуля или лучше соответствует вашим потребностям, например, для использования в классе, вы можете подготовить файл конфигурации turtle.cfg , читаемый во время импорта и изменяющим конфигурацию в соответствии с его настройками.
Встроенная конфигурация будет соответствовать следующей конфигурации turtle.cfg:
width = 0.5 height = 0.75 leftright = None topbottom = None canvwidth = 400 canvheight = 300 mode = standard colormode = 1.0 delay = 10 undobuffersize = 1000 shape = classic pencolor = black fillcolor = black resizemode = noresize visible = True language = english exampleturtle = turtle examplescreen = screen title = Python Turtle Graphics using_IDLE = False
Краткое объяснение выбранных записей:
- Первые четыре строки соответствуют аргументам метода Screen.setup() .
- Строки 5 и 6 соответствуют аргументам метода Screen.screensize() .
- shape может быть любой из встроенных фигур, например: arrow, turtle и т.д. Для получения дополнительной информации выполните help(shape) .
- Если вы не хотите использовать цвет заливки (т. е. сделать черепаху прозрачной), вы должны написать fillcolor = «» (но все заполненный строки не должны содержать кавычек в cfg-файле).
- Если вы хотите отразить состояние черепахи, вы должны использовать resizemode = auto .
- Если установлен, например, language = italian докстринг dict turtle_docstringdict_italian.py будет загружен во время импорта (если присутствует в пути импорта, например, в том же каталоге, что и turtle .)
- Записи exampleturtle и examplescreen определяют имена этих объектов по мере их появления в докстрингах. Преобразование method-докстрингов в function-докстрингов удалит эти имена из докстрингов.
- using_IDLE: Установит значение True , если вы регулярно работаете с IDLE и его переключателем -n («без подпроцесса»). Это предотвратит попадание exitonclick() в основной цикл.
В каталоге, где хранится turtle , может быть файл turtle.cfg и дополнительный файл в текущем рабочем каталоге. Последний переопределит настройки первого.
Каталог Lib/turtledemo содержит файл turtle.cfg . Вы можете изучить его в качестве примера и увидеть его эффекты при запуске демоверсий (желательно не из программы просмотра демо).
turtledemo — Демонстрационные сценарии¶
Пакет turtledemo включает набор демонстрационных сценариев. Эти сценарии можно запускать и просматривать с помощью предоставленного демонстрационного средства просмотра следующим образом:
python -m turtledemo
Кроме того, можно запускать демонстрационные сценарии по отдельности. Например:
python -m turtledemo.bytedesign
Каталог пакета turtledemo содержит:
- Демонстрационный просмотрщик __main__.py который можно использовать для просмотра исходного кода сценариев и одновременного их запуска.
- Несколько сценариев, демонстрирующих различные функции модуля turtle . Доступ к примерам можно получить из меню «Examples». Они также могут выполняться автономно.
- Файл turtle.cfg , служит примером написания и использования таких файлов.
| Имя | Описание | Особенности |
|---|---|---|
| bytedesign | сложный классический черепаший графический шаблон | tracer() , delay, update() |
| chaos | График динамики Верхульста показывает, что компьютерные вычисления могут иногда генерировать результаты против ожиданий здравого смысла | мировые координаты |
| clock | аналоговые часы, отображающие время компьютера | черепахи как ручные часы, ontimer |
| colormixer | эксперимент с r, g, b | ondrag() |
| forest | 3 дерева в ширину | рандомизация |
| fractalcurves | Кривые Гильберта и Коха | рекурсия |
| lindenmayer | этноматематика (индейские коламы) | L-система |
| minimal_hanoi | Башни Ханоя | Прямоугольные черепахи как ханойские диски (форма, размер формы) |
| nim | играть в классическую игру ним с тремя кучами палок против компьютера. | черепахи как нимстики, управляемые событиями (мышь, клавиатура) |
| paint | супер минималистичная программа рисования | onclick() |
| peace | элементарный | черепаха: внешний вид и анимация |
| penrose | апериодическая мозаика с воздушными змеями и дротиками | stamp() |
| planet_and_moon | моделирование гравитационной системы | составные фигуры, Vec2D |
| round_dance | танцующие черепахи вращаются попарно в противоположном направлении | составные фигуры, клонировать форму, наклонять, get_shapepoly, обновлять |
| sorting_animate | наглядная демонстрация различных способов сортировки | простое выравнивание, рандомизация |
| tree | (графическое) первое дерево ширины (с использованием генераторов) | clone() |
| two_canvases | простой дизайн | черепахи на двух полотнах |
| wikipedia | узор из статьи википедии о черепашьей графики | clone() , undo() |
| yinyang | другой элементарный пример | circle() |
Изменения после Python 2.6¶
- Методы Turtle.tracer() , Turtle.window_width() и Turtle.window_height() были исключены. Методы с этими именами и функциональными возможностями теперь доступны только как методы Screen . Функции, полученные на их основе, остаются доступными. (Фактически уже в Python 2.6 эти методы были просто дубликатами соответствующих методов TurtleScreen / Screen .)
- Метод Turtle.fill() исключен. Поведение begin_fill() и end_fill() несколько изменилось: теперь каждый процесс заполнения должен завершаться end_fill() вызовом.
- Добавлен Turtle.filling() метода. Это возвращает логическое значение: True если идет процесс заполнения, False иначе. Это поведение соответствует fill() вызову без аргументов в Python 2.6.
Изменения с Python 3.0¶
- Добавлены методы Turtle.shearfactor() , Turtle.shapetransform() и Turtle.get_shapepoly() . Таким образом, теперь доступно полное множество обычных линейных преобразований для преобразования форм черепахи. Функциональность Turtle.tiltangle() была расширена: теперь её можно использовать для получения или установки угла наклона. Turtle.settiltangle() устарел.
- Метод Screen.onkeypress() был добавлен в качестве дополнения к Screen.onkey() , который фактически связывает действия с событием отпускания клавиши. Соответственно, у последнего есть псевдоним: Screen.onkeyrelease() .
- Добавлен метод Screen.mainloop() . Поэтому при работе только с объектами Screen и Turtle нельзя больше дополнительно импортировать mainloop() .
- Добавлены два метода ввода Screen.textinput() и Screen.numinput() . Эти всплывающие диалоговые окна ввода и возвращают строки и цифры соответственно.
- В каталог tdemo_nim.py добавлены два примера сценариев tdemo_round_dance.py и Lib/turtledemo .
