"Использование языка программирования python 3 и модуля L554 на уроках дополнительного образования (или в базовом курсе) школьной информатики в условиях реализации ФГОС"
Сухомлинов Александр Иванович
Санкт-Петербург
2020
Пояснительная записка
Количество недельных часов: 2
Количество часов в год: 68
Уровень программы: базовый.
Нормативными документами для составления рабочей программы по математике 6-7 класса являются:
7. Учебный план ГБОУ Лицея № 554.
В связи с введением ФГОС внеурочная деятельность имеет большое значение для развития личности, здесь в полной мере можно осуществить индивидуальный и дифференцированный подход. Здесь идет оценка развития учащегося в сравнении с самим собой, а не в соответствии нормам и требованиям образования.
Школа должна не только формировать у учащихся прочную основу знаний, умений и навыков, но и максимально развивать их умственную активность: учить мыслить, самостоятельно обновлять и пополнять знания, сознательно использовать их при решении теоретических и практических задач.
Данная программа так же позволяет учащимся ознакомиться со многими интересными вопросами информатики на данном этапе обучения, выходящими за рамки школьной программы, расширить целостное представление о проблеме данной науки.
Решение математических задач, связанных с программированием и логическим мышлением закрепит интерес ребят к познавательной деятельности, будет способствовать вовлечению детей в активную умственную деятельность; развивать гибкость мышления; развивать интуитивное мышление и способствовать общему интеллектуальному развитию.
Не менее важным фактором реализации данной программы является и стремление развить у учащихся умение самостоятельно работать, думать, решать творческие задачи, а так же совершенствовать навыки создания учебных проектов.
Содержание программы соответствует познавательным возможностям среднего школьного возраста и предоставляет им возможность работать на уровне повышенных требований, развивая учебную мотивацию.
Таким образом:
· программа позволяет планомерно вести внеурочную деятельность по предмету;
· позволяет расширить и углубить знания по информатике;
· различные формы проведения занятий, способствуют повышению интереса к предмету;
· рассмотрение более сложных заданий программирования, способствует развитию логического мышления учащихся.
Основные цели и задачи:
· создание условия для пробуждения и развития устойчивого интереса учащихся к информатике и умения применять знания информатики в различных жизненных ситуациях и в изучении всех предметов;
· развитие математических способностей учащегося, разных видов мышления (логического, образного, комбинированного) навыков самостоятельной работы по созданию современных программ, работы с книгой;
· углубление и расширение знаний учащихся по информатике, полученных в школьном курсе информатики, обеспечивающее глубокое и качественное их усвоение, подготовка к продолжения образования.
Общая характеристика программы внеурочной деятельности
Данный курс создан на основе личностно ориентированных, деятельностно- ориентированных и культурно ориентированных принципов; основной целью, которого является формирование функционально грамотной личности, готовой к активной деятельности и непрерывному образованию в современном обществе, владеющей системой математических знаний и умений применить их в программах, позволяющих применять эти знания для решения практических жизненных задач, руководствуясь при этом идейно-нравственными, культурными и этическими принципами, нормами поведения, которые формируются в ходе учебно-воспитательного процесса:
- формирование логического и абстрактного мышления у школьников как основы их дальнейшего эффективного обучения;
- сформировать набор необходимых для дальнейшего обучения предметных и общеучебных умений на основе решения предметных и интегрированных жизненных задач;
- обеспечить интеллектуальное развитие, сформировать качества мышления, характерные для математической и деятельности с использованием современных языков программирования, необходимые для полноценной жизни в обществе;
- сформировать представление об идеях и методах информатики, об информатике как форме описания и методе познания окружающего мира;
- сформировать представление об информатике как части общечеловеческой культуры, понимание значимости информатики для общественного прогресса;
- сформировать устойчивый интерес к информатике на основе дифференцированного подхода к учащимся;
- выявить и развить информационные и творческие способности на основе заданий, носящих нестандартный, занимательный характер.
Разработанная программа внеурочной деятельности «для учеников 8 класса основана на получении знаний по разным разделам информатики, при выборе тем определяющим фактором стало содержание программы курса информатики за 8 класс и расширение в таких темах, как «Программирование на языке Python», так же включены темы по истории информатики, такие избранные вопросы информатики, как решение классических задач, логика высказываний, обработка строк и другие. Включенный материал программы тесно связан с различными сторонами нашей жизни, а также с другими учебными предметами. Отбор заданий подразумевает доступность предлагаемого материала, сложность задач нарастает постепенно. Познавательный материал курса будет способствовать формированию функциональной грамотности – умению воспринимать и анализировать информацию. В программу включено создание графических построений, создание диалоговых программ, игр, проблемных заданий, задачи на оптимизацию, задачи на смекалку и другие, которые способствуют развитию логического мышления. Занятия дают возможность шире и глубже изучать программный материал, больше рассматривать практических задач, а так же работать над ликвидацией пробелов знаний учащихся, внедрять принцип опережения. При организации занятий предполагается использование компьютерного класса, наличие интерактивной доски, возможности ресурсов Интернет, учебных порталов, электронных учебников, и др.
При разработке рабочей программы внеурочной деятельности были учтены основные идеи и положения Программы формирования и развития учебных универсальных действий (познавательных, регулятивных, коммуникативных) для основного общего образования, которые нашли свое отражение в формулировках метапредметных и личностных результатов.
Содержание информационного образования в программе внеурочной деятельности представлено разделами история информатики, системы счисления, информационное общество и другие, которые служат базой для дальнейшего изучения учащимися информатики, и способствует приобретению практических навыков работы с компьютером, необходимых в повседневной жизни.
Содержание курса внеурочной деятельности нацелено на достижение основной предметной компетенции - вычислительной, а также метапредметных и личностных результатов обучения.
Познавательные: в предлагаемом курсе внеурочной деятельности по информатике изучаемые определения и правила становятся основой формирования умений выделять признаки и свойства объектов. В процессе вычислений, измерений, поиска решения задач у учеников формируются основные мыслительные операции (анализа, синтеза, классификации, сравнения, аналогии и т.д.), умения различать обоснованные и необоснованные суждения, обосновывать этапы решения учебной задачи, производить анализ и преобразование информации (используя при решении самых разных информационных задач простейшие предметные, знаковые, графические модели, таблицы, диаграммы, строя и преобразовывая их в соответствии с содержанием задания). Решая задачи, рассматриваемые в данном курсе, можно выстроить индивидуальные пути работы с информационным и математическим содержанием, требующие различного уровня логического мышления и навыков программирования.
Регулятивные: информационное содержание программы внеурочной деятельности позволяет развивать и эту группу умений. В процессе работы ребёнок учится самостоятельно определять цель своей деятельности, планировать её, самостоятельно двигаться по заданному плану, оценивать и корректировать полученный результат.
Коммуникативные: в процессе внеурочной деятельности по информатике осуществляется знакомство с современным языком программирования Python 3, формируются речевые умения: дети учатся высказывать суждения с использованием информационных терминов и понятий, формулировать вопросы и находить ответы в ходе составления и выполнения программ, их отладки тестирования, определение верности или неверности выполненного расчета, обосновывают этапы решения учебной задачи. В зависимости от заданий, дети учатся работать в парах, выполняя заданные проекты в малых группах. Умение достигать результата, используя общие интеллектуальные усилия и практические действия, является важнейшим умением для современного человека. В основе методического аппарата программы внеурочной деятельности лежит проблемно-диалогическая технология, технология правильного типа читательской деятельности и технология оценивания достижений, позволяющие формировать у учащихся умение обучаться с высокой степенью самостоятельности при программировании на современном языке Python.
Описание места предмета внеурочной деятельности в учебном плане
Программа внеурочной деятельности рассчитана на:
68 ч. - в 8 классе (из расчета 2 ч. в неделю)
Продолжительность занятия 90 минут
1. ПЛАНИРУЕМЫЕ РЕЗУЛЬТАТЫ ОСВОЕНИЯ КУРСА
Выпускник научится:
· составлять алгоритмы для решения учебных задач различных типов;
· выражать алгоритм решения задачи различными способами (словесным, графическим, в том числе и в виде блок-схемы, с помощью формальных языков и др.);
· определять наиболее оптимальный способ выражения алгоритма для решения конкретных задач (словесный, графический, с помощью формальных языков);
· определять результат выполнения заданного алгоритма (программы) или его фрагмента;
· использовать термины «исполнитель», «алгоритм», «программа», а также понимать разницу между употреблением этих терминов в обыденной речи и в информатике;
· выполнять без использования компьютера («вручную») несложные алгоритмы управления исполнителями и анализа числовых и текстовых данных, записанные на конкретном язык программирования с использованием основных управляющих конструкций последовательного программирования (линейная программа, ветвление, повторение, вспомогательные алгоритмы);
· составлять несложные алгоритмы управления исполнителями и анализа числовых и текстовых данных с использованием основных управляющих конструкций последовательного программирования и записывать их в виде программ на выбранном языке программирования; выполнять эти программы на компьютере;
· использовать величины (переменные) различных типов, табличные величины (массивы), а также выражения, составленные из этих величин; использовать оператор присваивания;
· анализировать предложенный алгоритм, например, определять какие результаты возможны при заданном множестве исходных значений;
· использовать логические значения, операции и выражения с ними;
· записывать на выбранном языке программирования арифметические и логические выражения и вычислять их значения.
Выпускник получит возможность:
· познакомиться с использованием в программах строковых величин и с операциями со строковыми величинами;
· создавать программы для решения задач, возникающих в процессе учебы и вне ее; · познакомиться с задачами обработки данных и алгоритмами их решения;
· познакомиться с понятием «управление», с примерами того, как компьютер управляет различными системами (роботы, летательные и космические аппараты, станки, оросительные системы, движущиеся модели и др.);
· познакомиться с учебной средой составления программ управления автономными роботами и разобрать примеры алгоритмов управления, разработанными в этой среде.
2. ОСНОВНОЕ СОДЕРЖАНИЕ КУРСА ВНЕУРОЧНОЙ ДЕЯТЕЛЬНОСТИ ПО ИНФОРМАТИКЕ
История языков программирования. Компиляция и интерпретация. Знакомство с Python и средой программирования IDLE.
Типы данных в программировании. Определение переменной. Ввод данных с клавиатуры. Первая программа на Python.
Строки как последовательности символов. Списки — изменяемые последовательности. Замена элементов в списке.
Логические выражения. Условный оператор. Инструкция if - elif - else. Проверка истинности if- elif- else. Цикл For. Цикл While.
Кортежи. Словари. Множества. Основные задачи обработки массивов. Введение в словари.
Сортировка выбором (поиск минимума и перестановка). Сортировка пузырьковым методом.
Функции в программировании. Параметры и аргументы функций. Локальные и глобальные переменные. Процедуры.
Файлы. Работа с файлами. Менеджеры контекста with .. as
Решение задач посредством языка программирования Python: Алгоритм Евклида (нахождение наибольшего общего делителя); вычисление факториала на языке программирования Python; двоичный (бинарный) поиск элемента в массиве; перевод чисел из десятичной системы счисления в двоичную; решето Эратосфена - алгоритм определения простых чисел; сумма и произведение цифр числа; числа Фибоначчи (вычисление с помощью цикла while и рекурсии); тестирование простоты числа методом перебора делителей
3. ТЕМАТИЧЕСКОЕ ПЛАНИРОВАНИЕ С УКАЗАНИЕМ КОЛИЧЕСТВА ЧАСОВ, ОТВОДИМЫХ НА ОСВОЕНИЕ КАЖДОЙ ТЕМЫ КУРСА (34 часа)
№ раздела, темы |
Раздел, тема |
ИТОГО |
1 |
Введение. Знакомство с Python |
|
1.1. |
Знакомство с IDLE Python |
2 |
1.2. |
Вычисления и переменные |
2 |
1.3. |
Первая программа на Python |
2 |
2 |
Построение программы на языке Python |
|
2.1. |
Строки и списки |
2 |
2.2. |
Синтаксис языка Python |
2 |
2.3. |
Операторы Python |
2 |
3. |
Инструкция if - elif - else. Выбор подходящего варианта. Ветвление |
|
3.1. |
Инструкция if- elif – else |
2 |
3.2. |
Проверка истинности if- elif – else |
4 |
4. |
Цикл в языке программирования Python |
|
4.1 |
Цикл for |
8 |
4.2 |
Цикл while |
8 |
4.3 |
Операторы break и continue |
4 |
5. |
Кортежи. Словари. Множества |
|
5.1. |
Кортежи |
2 |
5.2. |
Словари |
2 |
5.3. |
Множества |
2 |
5.4. |
Индексы и срезы |
2 |
6 |
Функции в программировании |
|
6.3. |
Параметры и аргументы функций |
4 |
6.4. |
Локальные и глобальные переменные |
4 |
6.5. |
Процедуры. Рекурсия |
6 |
7 |
Файлы. Работа с файлами |
|
7.1. |
Работа с файлами |
2 |
7.2. |
Менеджеры контекста with .. as |
2 |
7.3. |
Документирование кода в Python |
2 |
7.4. |
Работа с модулями: создание и подключение инструкций import .. from |
2 |
|
Итого |
68 |
УЧЕБНО-ТЕМАТИЧЕСКОЕ ПЛАНИРОВАНИЕ КУРСА
№ урока |
Раздел, тема урока |
Кол-во часов |
Элементы содержания |
Практическая часть |
Примечание |
Раздел. Введение. Знакомство с Python– 6 часов |
|||||
1 |
Знакомство с IDLE Python |
2 |
Язык программирования Python. Знакомство и первая работа в среде разработки IDLE. Открытие, редактирование и сохранение файлов. |
|
|
2 |
Вычисления и переменные |
2 |
Обозначение переменных. Арифметические операторы. Примеры программ простых вычислений. |
|
|
3 |
Первая программа |
2 |
Создание и проверка первой программы «Hello world» и программ простой графики. |
Практическая работа: «Hello world!» |
|
Раздел. Построение программы на языке Python– 6 часов |
|||||
4 |
Строки и списки |
2 |
Знакомство со строками списками |
Практическая работа. Арифметические операции со строками. |
|
5 |
Синтаксис языка Python |
2 |
Работа со строками и списками. Функции и методы строк. Функции и методы списков |
Практическая работа. Сообщение пользователю: написание письма с использованием строк |
|
6 |
Операторы Python |
2 |
Операторы сравнения. Операторы присваивания. Логические операторы |
Практическая работа. Написание программы расчета количества часов в году |
|
Раздел. Инструкция if – elif – else. Выбор подходящего варианта. Ветвление – 6 часов |
|||||
7 |
Инструкция if– elif – else |
2 |
Инструкция if– elif – else. Использавние инструкция if– elif – else |
|
|
8 – 9 |
Проверка истинности if– elif – else |
4 |
Использование инструкции if– elif – else |
Практическая работа. Написание программ с использованием инструкции if – elif – else для определения |
|
|
|
|
|
результата |
|
Раздел. Цикл в языке программирования Python– 20 часов |
|||||
10 – 13 |
Цикл for |
8 |
Цикл for. Требования к записи цикла. Работа цикла. Порядок выполнения программа |
Практическая работа: «Решение задач с циклом for» |
|
14 – 17 |
Цикл while |
8 |
Цикл while. Требования к записи цикла. Работа цикла. Порядок выполнения программа |
Практическая работа: «Решение задач с циклом while» |
|
18 |
Операторы break и continue |
4 |
Оператор прерывания цикла – break. Оператор перехода к следующему шагу цикла – continue. Синтаксис записи программы. |
|
|
Раздел. Кортежи. Словари. Множества – 8 часов |
|||||
19 |
Кортежи |
2 |
Отличие кортежа от списка. Работа с кортежем. Операции с кортежем. |
Практическая работа: «Работа с кортежем -turpl» |
|
20 |
Словари |
2 |
Словари. Работа со словарями. Методы словарей |
Практическая работа: «Работа со словарем -dict» |
|
21 |
Множества |
2 |
Множества. Set и frozenset. |
Практическая работа: «Работа со множествами» |
|
22 |
Индексы и срезы |
2 |
Взятие элемента по индексу. Срезы |
|
|
Раздел. Функции в программировании – 14 часов |
|||||
23 – 24 |
Параметры и аргументы |
4 |
Именные функции. Функция def. |
Практическая работа: |
|
|
функций |
|
Синтаксис программы, содержащей функцию |
«Применение и написание функции def» |
|
25 – 26 |
Локальные и глобальные переменные |
4 |
Аргументы функций. Анонимные функции. Функция lambda. Область видимости |
|
|
27 – 30 |
Процедуры. Рекурсия |
6 |
Понятие рекурсии. Аргументы произвольной длины. Ключевое слово return. Оправданные случаи использования рекурсии |
Практическая работа: «Применение рекурсии. Нахождение факториала» |
|
Раздел. Файлы. Работа с файлами – 8 часов |
|||||
31 |
Работа с файлами |
2 |
Чтение из файла. Запись в файл |
|
|
32 |
Менеджеры контекста with .. as |
2 |
Менеджеры контекста. Определение менеджеров контекста. With .. as |
|
|
33 |
Документирование кодав Python |
2 |
Строки документации. Однострочные строки. Многострочные строки |
|
|
34 |
Работа с модулями: созданиеи подключениеинструкций import .. from |
2 |
Подключение модуля из стандартной библиотеки. Использование псевдонимов. |
Практическая работа: «Инструкция from. Создание своего модуля на Python» |
|
Примеры программ (авторская разработка) на языке Python 3:
Модуль L554.py
Этот модуль должен находиться в папке с основной программой. Подключается вначале текста основной программы командой:
from L554 import *
Добавление этой строки в начале текста основной программы избавляет от необходимости строить в основной программе координатную сетку. Позволяет задать масштаб от 10 до 500 пикселей на одну клетку. Позволяет записывать формулы в основной программе, так как они записаны в тетради – без перевода в пиксели и обратно. Любые координаты, полученные при построении геометрических фигур выводятся по щелчку левой кнопки мыши в нужной точке (например, пересечение графиков функций). Появляется возможность использовать два новых оператора (точки и линии) в синтаксисе которых содержаться координаты, толщина и цвет. Это делает основную программу заметно понятнее и избавляет от большого объема рутинной работы. Все стандартные операторы языка Python 3 работают как обычно.
# L554.py
# Санкт-Петербург, Лицей № 554, июнь 2020
'''
Модуль L554.py версия от 2020-0605.
Модуль представляет собой внешнюю подпрограмму выполняющую
необходимые вспомогательные построения (координатная сетка,
вывод на экран координат курсора по щелчку мыши и т.п.).
1. Должен находиться в папке с запускаемой программой.
2. Модуль в запускаемой программе подключается строкой
from L554 import *
3. Строит координатную сетку в заданном масштабе (например: mset =50)
(50 - количество пикселей на одну клетку - единицу длины);
4. Выводит по щелчку лкм координаты курсора в масштабе сетки.
5. Позволяет дополнительно использовать два оператора: точки и линии,
содержащих все необходимые для построения параметры (координаты,
толщина, цвет).
6. В основной программе исполняемые операторы размещены между строками
комментариев 123 ... 321:
Это значительно упрощает все графические построения и отладку программы.
Учащимся достаточно знать понятия стандартной координатной системы
и синтаксис двух новых операторов (точки и линии:m_pset и m_line).
Учитель точно знает, где искать ошибку обучающегося.
При использовании модуля все стандартные операторы работают штатно.
Для проверки работоспособности модуль может быть запущен как
самостоятельная программа - должно появиться построение наклонной
плоскости.
При первом запуске файла L554.py как модуля (т.е. вызовом из
основной программы (командой:from L554 import *)
создается папка __pycache__ содержащая компилированный файл
L554.cpython-32.pyc
его надо переименовать в L554.pyc (т.е. питоновский, компилированный).
и сохранить в папку с программой (вместо L554.py, папку __pycache__
тоже надо удалить). Т.е. в папке с основной программой будет всего
два файла: файл программы и компилированный файл модуля.
Строка вызова модуля в отлаживаемой программе не меняется,
но использование компилированного файла предохранит сам модуль
от нежелательных изменений (как случайных, так и просто из любопытства).
Можно будет сосредоточиться на отладке основной программы, которая при
импортировании модуля L554.py получится короче за счет использования
одного нового графического оператора (точки, линии) вместо трех.
С первых шагов можно строить значительно более сложные программы.
При этом все стандартные операторы python 3 работают как обычно.
Обновленную версию и разные программы, работающие с ним, можно получить
на сайте turtk.viptop.ru
Желаем успешной работы!
'''
# Модуль L554.py версия от 2020-0605.
#
#
import turtle as t
import turtle
from turtle import *
from math import *
from tkinter import *
# модуль для получения значений ws и hs ширины и высоты экрана
root = Tk()
global ws,hs
# Получение размера экрана пользователя
ScrW = root.winfo_screenwidth() # Получение ширины экрана
ws = ScrW - 10
ScrH = root.winfo_screenheight() # Получение высоты экрана
hs = ScrH - 70
root.destroy()
#====================================================
import turtle as t
t.hideturtle()
#print('ws = ',ws)
#print('hs = ',hs)
t1=Turtle()
t1.hideturtle()
wt=t.Screen()
wt.bgcolor('#ffffe0')
wt.tracer(10) # Скорость 1-10. При 0 - рисует мгновенно.
# Информация для титульной строки
#turtle.title ('Рисуем линии двумя курсорами. СПБ Лицей 554')
wt.title (' СПБ Лицей 554')
# Задаем удобные размеры экрана
wt.setup (ws, hs, 0, 0)
# Перемещаем перо
t.penup(); t.goto ((-ws/2+76), (hs/2-20))
# Задаем цвет
t.color ('navy')
# Этикетка
t.write ('Санкт-Петербург, Лицей №554', font = 'Helvetica 7 bold')
t.penup(); t.goto (0, 0)
t.hideturtle()
'''
t.write ('Санкт-Петербург, Лицей №554', font = ('Times New Roman', 12, 'bold'))
t.penup(); t.goto (0, 0)
t.hideturtle()
label = Label(text='Санкт-Петербург, Лицей №554',
font='Helvetica 7 bold',background='#ffffef')
#label.pack(fill=Y, expand=1)
label.place(x=76,y=10)
'''
def pset(t12,px,py,pw,pc):
t12.hideturtle()
t12.up()
t12.width(pw)
t12.setx(px)
t12.sety(py)
t12.down()
#t12.dot(pw,pc)
t12.dot(pw,pc)
t12.up()
#===================================================
def line(lt,lx1,ly1,lx2,ly2,lw,lc):
lt.hideturtle()
lt.width(lw)
lt.color(lc)
lt.up() # подняли перо
lt.goto(lx1,ly1)
lt.down()
lt.goto(lx2,ly2) # провели линию
lt.up() # подняли перо
#===================================================
def krug(t1,kx,ky,kr,kc):
#t1.speed(0)
r = kr
x0 = kx
y0 = ky
for fi in range (0,360):
x = x0 + r *cos(fi*3.14/180)
y = y0 + r * sin(fi*3.14/180)
t1.up()
t1.goto(x,y)
t1.down()
t1.dot(5,kc)
#===================================================
global mset
def msetout(mset):
global mset2
mset2=mset
pset(turtle,0,0,7,'green') # точка в начале координат
turtle.hideturtle()
def coor(x,y):
global mset2
t.hideturtle()
t.speed(0)
t.width(1)
t.clear()
t.up()
t.goto(-230,0)
t.down()
t.goto(230,0)
t.up()
t.goto(0,230)
t.down()
t.goto(0,-230)
t.up()
# Вычисляем радиус окруж с центр 0,0
# проходящей через точку с коор х,у
r = sqrt(x*x + y*y)
t.goto(x,y)
t.color('#ffffe0')
#t.down()
t.goto(0,0)
t.goto(x,0)
t.goto(x,y)
t.color('black')
t.write('x=%7.2f | y=%7.2f' % (turtle.xcor()/mset2, turtle.ycor()/mset2),
move=False, align="left", font=("Arial", 18, "normal"))
t.dot(7,'red')
t.up()
t.goto(0,-r)
#t.circle(r) # проводим окружность
t.up()
sinus = y/r
cosinus = x/r
k = ((asin(y/r)) *(180/3.14))
if y/r > 0 and x/r > 0:print('a = % 5.1f ' % k)
if y/r > 0 and x/r < 0:print('a = % 5.1f ' % (180 - abs(k)))
if y/r < 0 and x/r < 0:print('a = % 5.1f ' % (180 + abs(k)))
if y/r < 0 and x/r > 0:print('a = % 5.1f ' % (360 - abs(k)))
print('sin(a) = % 5.2f ' % sinus)
print('cos(a) = % 5.2f ' % cosinus)
print()
print('-------------------------')
print()
#===================================================
#===================================================
def setka(mset):
ts=Turtle()
ts.hideturtle()
x=0
while x < ws:
x=x+mset
y1=hs/2
y2=-hs/2
line(t1,x,y1,x,y2,2,'lightblue')
x=mset
while x > -ws:
x=x-mset
y1=hs/2
y2=-hs/2
line(t1,x,y1,x,y2,2,'lightblue')
#
y=0
while y < hs:
y=y+mset
x1=ws/2
x2=-ws/2
line(t1,x1,y,x2,y,2,'lightblue')
y=mset
while y > -hs:
y=y-mset
x1=ws/2
x2=-ws/2
line(t1,x1,y,x2,y,2,'lightblue')
# оси
ts.speed(0)
ts.width(1)
ts.color('black')
#ts.clear()
ts.up()
ts.goto(-500,0)
ts.down()
ts.goto(500,0)
ts.up()
ts.goto(0,230)
ts.down()
ts.goto(0,-230)
ts.up()
ts.hideturtle()
#===================================================
def m_line(mset,tl,x1,y1,x2,y2,lw,lc):
line(tl,x1*mset,y1*mset,x2*mset,y2*mset,lw,lc)
def m_pset(mset,t,px,py,pw,pc):
x=px*mset
y=py*mset
pset(t,x,y,pw,pc)
def m_krug(mset,tk,kx,ky,kr,kc):
kx=kx*mset
krug(tk,kx,ky*mset,kr*mset,kc)
if __name__ == "__main__":
# Вызов стандартных модулей и модуля L554
from L554 import *
import turtle as t
import turtle
from turtle import *
from math import *
label = Label(text=' ТЕСТ МОДУЛЯ L554 \n'
' версия от 2020-0605 \n '
'модуль выполняется как основная программа.',
font='Arial 20 bold',background='#ffffdd')
label.place(x=270,y=13)
t.hideturtle()
t1=Turtle()
t1.hideturtle()
turtle.hideturtle()
global x, y,mset
x=t1.xcor()
y=t1.ycor()
mset =100 # Сколько точек на 1 деление сетки координат
setka(mset) # Построение сетки в заданном масштабе
msetout(mset)
t.onscreenclick(coor) # Вычисление координат
# Эти операторы строят немасштабируемые объекты
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,50,'yellow')
line(t1,-ws/2+10,hs/2-20,-ws/2+50,hs/2-20,10,'white')
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,10,'blue')
line(t1,-ws/2+10,hs/2-40,-ws/2+50,hs/2-40,10,'red')
m_line(mset,t1,-2,-2,4,-2,25,'yellow') # Основание наклонной плоскости
m_line(mset,t1,4,1,4,-2,25,'green') # Вертикальная линия
m_line(mset,t1,4,1,-2,-2,25,'purple') # Наклонная линия
m_pset(mset,t1,4,1,10,'black') # Ось шкива
m_pset(mset,t1,4,-2,10,'brown') # Гвоздик
m_pset(mset,t1,-2,-2,10,'black') # Гвоздик
m_pset(mset,t1,-1,-1.17,35,'red') # Колесо
m_pset(mset,t1,-1,-1.17,5,'black') # Ось колеса
m_pset(mset,t1,0,-0.67,35,'red') # Колесо
m_pset(mset,t1,0,-0.67,5,'black') # Ось колеса
m_line(mset,t1,-1.25,-0.84,-0.15,-0.3,50,'brown') # Корпус тележки
#m_krug(mset,t1,6, 3,0.2,'blue')
# Стрелка вектора скорости
m_line(mset,t1,0.07,-0.19,1.96,0.7,5,'blue') #
m_line(mset,t1,1.69,0.68,1.96,0.7,5,'blue') #
m_line(mset,t1,1.78,0.52,1.96,0.7,5,'blue') #
m_line(mset,t1,2.0,0.72,3.68,1.47,3,'#aaaaaa') # трос вдоль плоскости
m_pset(mset,t1,4,1,120,'red') # шкив max
m_pset(mset,t1,4,1,111,'brown') # шкив mid
m_pset(mset,t1,4,1,10,'black') # Ось шкива
m_line(mset,t1,4.57,0.8,4.57,-0.2,3,'#aaaaaa') # трос вниз к грузу
m_line(mset,t1,4.57,-0.6,4.57,-1.2,75,'#554554') # груз
m_pset(mset,t1,4.57,-0.21,13,'#554554') # крепление груза
m_pset(mset,t1,4.57,-0.21,5,'#ffffff') # отверствие для крепления груза
# крепление троса к тележке
m_pset(mset,t1,0.06,-0.2,11,'brown') #
m_pset(mset,t1,0.06,-0.2,4,'white') #
mainloop()
Для тестирования модуля запускаем его как программу (не импортируя из основной программы). Получим рисунок наклонной плоскости. Можно заменить операторы построения плоскости например на построение графика функции или другие. Однако текст такой программы очень длинный.
Гораздо эффективнее использовать файл L554.py как модуль – импортируя его всего одной строкой как указано выше.
При первом запуске файла L554.py как модуля (т.е. вызовом из основной программы (командой:from L554 import *) создается папка __pycache__ содержащая компилированный файл
L554.cpython-32.pyc
его надо переименовать в L554.pyc (т.е. питоновский, компилированный) и сохранить в папку с программой (вместо L554.py, папку __pycache__
тоже можно удалить). Т.е. в папке с основной программой будет всего
два файла: сам файл программы и компилированный файл модуля, т.е. . L554.pyc
Строка вызова модуля в основной программе не меняется, но использование компилированного файла предохранит сам модуль
от нежелательных изменений (как случайных, так и просто из любопытства).
Обновленную версию и разные программы, работающие с ним, можно получить на сайте turtk.viptop.ru
Текст программы на Python 3, использующей L554 (всё равно – компилированный(предпочтительно) или нет):
'''
Python 3. Алгебра 9 класс. Базовый курс.
509_1-Algebra.-9kl.-Uchebnik_Makarychev-Yu.N-Mindyuk-N.G.-i-dr._2014-271s.pdf
Использование программы позволяет рассмотреть больше вариантов при изложении
материала и подготовить разные задания для проверки усвоения при контроле.
Решение системы уравнений: k1_1*x**2 + k1_2*x + k1_3
и x**2 + y**2 = k2_1 (стр.109,рис.65).
Разрешение экрана 1024*768
Санкт-Петербург, Лицей №554, май 2020
'''
# a9b-s109-r065-25.py
# Вызов стандартных модулей и модуля L554
from L554 import *
import turtle as t
import turtle
from turtle import *
from math import *
t.hideturtle()
t1=Turtle()
t1.hideturtle()
t5=Turtle()
t5.hideturtle()
t6=Turtle()
t6.hideturtle()
t7=Turtle()
t7.hideturtle()
global x, y,mset,k1_1,k1_2,k1_3,k2_1
x=t1.xcor()
y=t1.ycor()
mset =50 # Сколько точек на 1 деление сетки координат
setka(mset) # Построение сетки в заданном масштабе
msetout(mset)
t.onscreenclick(coor) # Вычисление координат
# Выводит в форму значения координат щелчка мыши
# Выводит в shell значения угла в градусах и значения sin и cos
# Линии вверху слева
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,50,'yellow')
line(t1,-ws/2+10,hs/2-20,-ws/2+50,hs/2-20,10,'white')
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,10,'blue')
line(t1,-ws/2+10,hs/2-40,-ws/2+50,hs/2-40,10,'red')
# Вот отсюда начинаем редактировать, дополнять и тд.
# Вместо "Наша школа" пишем свои реквизиты
wt.title ('Наша школа и СПБ Лицей 554')
'''
Параметры оператора линии:
m_line(mset,t5,x1,y1,x2,y2,5,'green')
mset,t5, - оставляем как есть (для параболы t6 для окружности t7).
Далее по порядку: координаты начала и конца линии "х1","у1", "х2","у2"
( все размеры в координатах сетки экрана - т.е. идентично клеткам тетради).
толщина линии в пикселях(не масштабируется), цвет.
Параметры оператора точки.
m_pset(mset,t6,xc,yc,5,'blue')
mset,t6, - оставляем как есть (для параболы t6 для окружности t7).
Далее координаты точки, диаметр (5 пикселей) и цвет.
Построение окружностей и линий функций производим точками.
'''
#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# Подпрограмма отрисовки параболы
def plot_p():
print('PLOT_P')
t5.clear()
x5_1=-7
k1_1 = float(e_k1_1.get())
k1_2 = float(e_k1_2.get())
k1_3 = float(e_k1_3.get())
k2_1 = float(e_k2_1.get())
y5_1= k1_1 * x5_1 + k1_2
x5_2= 7
y5_2= k1_1 * x5_2 + k1_2
scale_k1_1.set(k1_1) # сдвигаем ползунок по значению из окна
scale_k1_2.set(k1_2) # сдвигаем ползунок по значению из окна
scale_k1_3.set(k1_3) # сдвигаем ползунок по значению из окна
scale_k2_1.set(k2_1) # сдвигаем ползунок по значению из окна
draw_p(k1_1,k1_2,k1_3) # При нажатии кнопки
#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# Подпрограмма отрисовки окружности
def plot_c():
#global x, y,mset,k1_1,k1_2,k1_3
print('PLOT_С')
t5.clear()
x5_1=-7
k1_1 = float(e_k1_1.get())
k1_2 = float(e_k1_2.get())
k1_3 = float(e_k1_3.get())
k2_1 = float(e_k2_1.get())
y5_1= k1_1 * x5_1 + k1_2
x5_2= 7
y5_2= k1_1 * x5_2 + k1_2
scale_k1_1.set(k1_1) # сдвигаем ползунок по значению из окна
scale_k1_2.set(k1_2) # сдвигаем ползунок по значению из окна
scale_k1_3.set(k1_3) # сдвигаем ползунок по значению из окна
scale_k2_1.set(k2_1) # сдвигаем ползунок по значению из окна
draw_c(k2_1) # Рисуем окружность после изменения параметров
def plot_scale(ev=None):
t5.clear()
x5_1=-7
k1_1 = float(scale_k1_1.get())
k1_2 = float(scale_k1_2.get()) # значения ползунков
k1_3 = float(scale_k1_3.get()) # значения ползунков
k2_1 = float(scale_k2_1.get())
y5_1= k1_1 * x5_1 + k1_2
x5_2= 7
y5_2= k1_1 * x5_2 + k1_2
# рисуем линию
#m_line(mset,t5,x5_1,y5_1,x5_2,y5_2,5,'green') # Наклонная линия
e_k1_1.delete(0, END) # очищаем окно к1_1
e_k1_1.insert(0, str(k1_1)) # вставляем в окно значение ползунка
e_k1_2.delete(0, END) # очищаем окно к1_2
e_k1_2.insert(0, str(k1_2)) # вставляем в окно значение ползунка
e_k1_3.delete(0, END) # очищаем окно к1_3
e_k1_3.insert(0, str(k1_3)) # вставляем в окно значение ползунка
e_k2_1.delete(0, END) # очищаем окно к1_1
e_k2_1.insert(0, str(k2_1)) # вставляем в окно значение ползунка
#------------------------------------------------------------------------
# вертикальная шкала k1_1
scale_k1_1 = Scale(from_=8, to=-8,orient=VERTICAL,relief=GROOVE,
label="a",troughcolor='green',background='yellow',
resolution=0.01,fg="black",activebackground='red',
length=100,command= plot_scale)
scale_k1_1.set(-1.0)# начальное значение
#fg="black" - цвет цифр шкалы
#activebackground='green' - цвет ползунка при перемещении или под курсором
scale_k1_1.place(x=10,y=60)
#-------------------------------------------------------------------------
# вертикальная шкала k1_2
scale_k1_2 = Scale(from_=10, to=-10,orient=VERTICAL,relief=GROOVE,
label="b",troughcolor='green',background='yellow',
resolution=0.01,fg="black",activebackground='red',
length=100,command= plot_scale)
scale_k1_2.set(2.0)# начальное значение
scale_k1_2.place(x=10,y=200)
#-------------------------------------------------------------------------
# вертикальная шкала k1_3
scale_k1_3 = Scale(from_=10, to=-10,orient=VERTICAL,relief=GROOVE,
label="c",troughcolor='green',background='yellow',
resolution=0.01,fg="black",activebackground='red',
length=100,command= plot_scale)
scale_k1_3.set(5.0)# начальное значение
scale_k1_3.place(x=10,y=350)
#------------------------------------------------------------------------
# вертикальная шкала k2_1
scale_k2_1 = Scale(from_=50, to=0.1,orient=VERTICAL,relief=GROOVE,
label="1",troughcolor='green',background='yellow',
resolution=0.01,fg="black",activebackground='red',
length=100,command= plot_scale)
scale_k2_1.set(25.0)# начальное значение
scale_k2_1.place(x=915,y=60)
#wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
# Метка y =
m_yr = Label(text=" y = ", bg="yellow", fg="black",font='Helvetica 12 bold')
m_yr.place(x=10,y=630)
# Метка 1 k1_1
label_k1_1 = Label(text=' a',
font='Helvetica 12 bold')
label_k1_1.place(x=45,y=605)
# Окно ввода коэффициента k1_1
e_k1_1 = Entry( width=6,background = '#ffeeff',font='Helvetica 12 bold')
# 1 символ = 10 пикселей
e_k1_1.delete(0, END)
e_k1_1.insert(0, "-1.0")
e_k1_1.place(x=45,y=630)
k1_1 = float(e_k1_1.get())
print('k1_1= ',k1_1)
# Метка *x**2 +
m_xp = Label(text="*x**2 + ", bg="yellow", fg="black",font='Helvetica 13 bold')
m_xp.place(x=105,y=628)
# Метка 2 k1_2
label_k1_2 = Label(text=' b',font='Helvetica 12 bold')
label_k1_2.place(x=170,y=605)
# Окно ввода коэффициента k_1_2
e_k1_2 = Entry( width=6,background = '#ffeeff',font='Helvetica 12 bold') #
e_k1_2.delete(0, END)
e_k1_2.insert(0, "2.0")
e_k1_2.place(x=170,y=630)
k1_2 = float(e_k1_2.get())
print('k1_2= ',k1_2)
# Метка *x +
m_xp = Label(text="*x + ", bg="yellow", fg="black",font='Helvetica 13 bold')
m_xp.place(x=230,y=628)
# Метка 3 k1_3
label_k1_3 = Label(text=' c',font='Helvetica 12 bold')
label_k1_3.place(x=272,y=605)
# Окно ввода коэффициента k_1_3
e_k1_3 = Entry( width=6,background = '#ffeeff',font='Helvetica 12 bold') #
e_k1_3.delete(0, END)
e_k1_3.insert(0, "5.0")
e_k1_3.place(x=272,y=630)
k1_3 = float(e_k1_3.get())
print('k1_3= ',k1_3)
# Метка x**2 + y**2 =
m_xp = Label(text="x**2 + y**2 = ", bg="yellow", fg="black",font='Helvetica 13 bold')
m_xp.place(x=810,y=628)
# Окно ввода коэффициента k2_1
e_k2_1 = Entry( width=6,background = '#ffff00',font='Helvetica 12 bold')
e_k2_1.delete(0, END)
e_k2_1.insert(0, "25.0")
e_k2_1.place(x=930,y=630)
k2_1 = float(e_k2_1.get())
print('k2_1= ',k2_1)
def draw_p(k1_1,k1_2,k1_3):
# Рисуем параболу ППППППППППППППППППППППППППППППППППППППППППППППППППППП
print ('Парабола')
t7.clear()
for xp in range(-1000,1000):
xp=xp/100+0.01
yp=k1_1 * xp**2 + k1_2*xp + k1_3
m_pset(mset,t7,xp,yp,5,'red') # Строим точками.
# Кнопка PLOT_P
but_plot=Button(text=' PLOT_P ',bg='green', command= plot_p)
but_plot.place(x=10,y=660,width=320)
def draw_c(k2_1):
# Рисуем окружность 0000000000000000000000000000000000000000000000
r = sqrt(k2_1)
print (' r = ',r)
t6.clear()
for fi in range(0,361):
fi=fi*pi/180
xc=r*cos(fi)
yc=r*sin(fi)
m_pset(mset,t6,xc,yc,5,'blue') # Строим точками.
# Кнопка PLOT_C
but_plot=Button(text=' PLOT_С ',bg='green', command= plot_c)
but_plot.place(x=680,y=670,width=320)
draw_p(k1_1,k1_2,k1_3) # Рисуем параболу при старте.
draw_c(k2_1) # Рисуем окружность при старте.
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
mainloop()
Одной из первых программ обычно является рисование домика.
# start_domik.py
# Вызов стандартных модулей и модуля L554
from L554 import *
import turtle as t
import turtle
from turtle import *
from math import *
t.hideturtle()
t1=Turtle()
t1.hideturtle()
global x, y,mset
x=t1.xcor()
y=t1.ycor()
mset =100 # Сколько точек на 1 деление сетки координат
setka(mset) # Построение сетки в заданном масштабе
msetout(mset)
t.onscreenclick(coor) # Вычисление координат
# Выводит в форму значения координат щелчка мыши
# Выводит в shell значения угла в градусах и значения sin и cos
# Эти операторы строят немасштабируемые объекты
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,50,'yellow')
line(t1,-ws/2+10,hs/2-20,-ws/2+50,hs/2-20,10,'white')
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,10,'blue')
line(t1,-ws/2+10,hs/2-40,-ws/2+50,hs/2-40,10,'red')
# Вот отсюда начинаем редактировать, дополнять и тд.
# Вместо "Наша школа" пишем свои реквизиты
wt.title ('Наша школа и СПБ Лицей 554')
# Линии - синтаксис команд вызова в координатах сетки
# mset,t1, - оставляем как есть. Далее по порядку "х1","у1",
# "х2","у2", толщина линии в пикселях(не масштабируется), цвет
#1111111111111111111111111111111111111111111111111111111111111111111
#2222222222222222222222222222222222222222222222222222222222222222222
#3333333333333333333333333333333333333333333333333333333333333333333
#m_pset(mset,t1,4,1,10,'black') # Оператор точка
# m_line(mset,t1,0.07,-0.19,1.96,0.7,5,'blue') # Оператор линия
# Начало нашей программы.
# Начинаем с левого верхнего угла передней стены.
m_line(mset,t1,-1.0,0.0,-1.0,-2.0,5,'blue') # левая сторона
m_line(mset,t1,-1.0,-2.0,0.0,-2.0,5,'blue') # нижняя
m_line(mset,t1,0.0,-2.0,0.0,0.0,5,'blue') # правая
m_line(mset,t1,0.0,0.0,-1.0,0.0,5,'blue') # верхняя
m_line(mset,t1,-1.0,0.0,-0.5,0.5,5,'blue') # левый наклон
m_line(mset,t1,-0.5,0.5,0.0,0.0,5,'blue') # правый наклон
m_line(mset,t1,0,0,2,1,5,'blue') # верх правой стенки
m_line(mset,t1,0,-2,2,-1,5,'blue') # низ правой стенки
m_line(mset,t1,2,1,2,-1,5,'blue') # правая сторона правой стенки
m_line(mset,t1,2,1,1.5,1.5,5,'blue') # правый наклон крыши (дальний)
m_line(mset,t1,-0.5,0.5,1.5,1.5,5,'blue') # верхняя линия крыши
m_pset(mset,t1,6,3,70,'#ffdd00') # Солнце.
label = Label(text=' ЗАДАНИЕ: нарисуйте (программно) 5 окон и дверь. \n'
' Примерные координаты можно определить используя лкм. \n '
' Добавьте лучи солнцу и другие элементы по указанию учителя.',
font='Arial 20 bold',background='#ffffdd')
label.place(x=270,y=13)
# Завершение нашей программы.
#333333333333333333333333333333333333333333333333333333333333333333333
#222222222222222222222222222222222222222222222222222222222222222222222
#111111111111111111111111111111111111111111111111111111111111111111111
mainloop()
Одной из классических задач является графо-аналитическое решение системы двух нелинейных уравнений:
# start_2_fun_02.py
# Вызов стандартных модулей и модуля L554
from L554 import *
import turtle as t
import turtle
from turtle import *
from math import *
t.hideturtle()
t1=Turtle()
t1.hideturtle()
global x, y,mset
x=t1.xcor()
y=t1.ycor()
turtle.setup(900, 650, 370, 10)
mset =300 # Сколько точек на 1 деление сетки координат
setka(mset) # Построение сетки в заданном масштабе
msetout(mset)
t.onscreenclick(coor) # Вычисление координат
# Выводит в форму значения координат щелчка мыши
# Выводит в shell значения угла в градусах и значения sin и cos
# Эти операторы строят немасштабируемые объекты
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,50,'yellow')
line(t1,-ws/2+10,hs/2-20,-ws/2+50,hs/2-20,10,'white')
line(t1,-ws/2+10,hs/2-30,-ws/2+50,hs/2-30,10,'blue')
line(t1,-ws/2+10,hs/2-40,-ws/2+50,hs/2-40,10,'red')
# Вот отсюда начинаем редактировать, дополнять и тд.
# Вместо "Наша школа" пишем свои реквизиты
wt.title ('Наша школа и СПБ Лицей 554')
# Линии - синтаксис команд вызова в координатах сетки
# mset,t1, - оставляем как есть. Далее по порядку "х1","у1",
# "х2","у2", толщина линии в пикселях(не масштабируется), цвет
# Все координаты просматриваются по щелчку в нужной точке
#1111111111111111111111111111111111111111111111111111111111111111111
#2222222222222222222222222222222222222222222222222222222222222222222
#3333333333333333333333333333333333333333333333333333333333333333333
#m_pset(mset,t1,4,1,10,'black') # Например: точка x=4, y=1, диаметр=10
# m_line(mset,t1,0.07,-0.19,1.96,0.7,5,'blue') # линия х1=0.07 ...толщина=5
# Начало нашей программы.
label = Label(text=' ЗАДАНИЕ: для функций заданных учителем найдите, \n'
' с заданной точностью, корни уравнений, подбирая шаг(d), начальное и \n '
' конечное значение х. Оформите результаты в виде таблицы в тетради.',
font='Arial 13 bold',background='#ffffdd')
label.place(x=130,y=13)
# Линии будем строить точками в цикле по формулам:
# y1= 0.5*sin(3*x)+0.1*sin(20*x) и y2= x*x
d=0.004 # Шаг изменения х
x= -0.5 # Начальная точка интервала построения
while x < 1.45: # Конечная точка интервала изменения "х"
x=x+d # Увеличиваем значение "х" на шаг "d"
y1= 0.5*sin(3*x)+0.1*sin(20*x) # Уравнение первой линии
m_pset(mset,t1,x,y1,5,'red') # Строим зелеными точками.
y2= x*x # Уравнение второй линии
m_pset(mset,t1,x,y2,5,'blue') # Строим синими точками.
#y3= -2*(x-2) -1.5 # Уравнение третьей линии
#m_pset(mset,t1,x,y3,5,'red') # Строим красными точками.
dr= abs(y2-y1) # Вычисляем модуль разности ординат линий 1 и 2
if dr<=1.5*d: # Печатаем если достигнута заданная точность
print(' При x= %6.3f' % x)
print(' y1= %5.3f' % y1)
print(' y2= %5.3f' % y2)
print(' abs(y2-y1)= %7.5f' % dr)
print('==================')
# Завершение нашей программы.
#333333333333333333333333333333333333333333333333333333333333333333333
#222222222222222222222222222222222222222222222222222222222222222222222
#111111111111111111111111111111111111111111111111111111111111111111111
mainloop()
Использование языка программирования python 3 на уроках дополнительного образования или в базовом курсе школьной информатики позволяет решать задачи соответствия ФГОС более эффективно.
© ООО «Знанио»
С вами с 2009 года.