Методика изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera

Исторические аспекты развития линии "Алгоритмизация и программирование" в старшей школе. Изучение языка программирования Python с применением дистанционных курсов Coursera. Методическая система обучения программированию с использованием Coursera.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 13.12.2017
Размер файла 808,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Среди университетов, сотрудничающих с проектом:

§ Университет Джонса Хопкинса;

§ Калифорнийский технологический институт;

§ Эдинбургский университет;

§ Университет Торонто;

§ Колумбийский университет;

§ Пенсильванский университет;

§ Московский физико-технический институт;

§ Высшая школа экономики.

В описании каждого курса указано, на какой уровень подготовки он рассчитан. Много курсов ориентировано на начинающих - то есть для их прохождения не требуется ничего, кроме основ школьной программы.

Чтобы изучать язык программирования Python с помощью Coursera, например, достаточно пройти курс «Learn to Program: The Fundamentals» («Учимся программировать: Основы») от университета Торонто [36]. Рекомендуемая подготовка - знание математики начальной и основной школы. Курс рассчитан на 7 недель, содержит автоматическую проверку знаний при просмотре видеолекций и заданий в практической части:

Week 1

Welcome to LTP (0:35)

Добро пожаловать в «Learn to Program»

Getting Started: Installing Python (2:46)

Начало работы: Установка Python

Python as a Calculator (10:33)

Python в качестве калькулятора

Python and Computer Memory (2:42)

Python в памяти компьютера

Variables (7:39)

Переменные

Built-in Functions (5:00)

Встроенные функции

Defining Functions (6:41)

Определение функций

Week 2

Visualizing Assignment Statements (2:49)

Визуализация операторов присваивания

Type str (4:56)

Строковый тип

Input/Output and str Formatting (10:14)

Ввод/вывод и строковое форматирование

Docstrings and Function help (1:18)

Строки документации и функция справки

Function Design Recipe (5:52)

План к написанию функций

Function Reuse (6:40)

Функция повторного использования

Visualizing Function Calls (5:34)

Визуализация вызова функций

Week 3

Functions, Variables, and the Call Stack (4:30)

Функции, переменные и стек вызова

Type bool (8:57)

Тип bool

Converting between int, str, and float (3:16)

Преобразования между типами int, str и float

Import: Using Non-Built-in Functions (5:29)

Импорт: использование встроенных функций

If statements (9:10)

Оператор if

No if required (4:17)

Конструкция if…else

Structuring if statements (6:07)

Структуризация оператора if

Week 4

More str operators (2:16)

Подробнее о строковых операторах

str: indexing and slicing (4:53)

Строки: индексы и срезы

str Methods: Functions Inside of Objects (3:41)

Строковые методы: функции внутри объекта

for loop over str (11:35)

Цикл for для строк

IDLE's Debugger (4:00)

Поиск ошибок

Week 5

while loops (12:21)

Цикл while

Comments (4:55)

Комментарии

Type list (4:23)

Тип списка

list methods (8:07)

Методы списка

Mutability and Aliasing (10:03)

Изменчивость и искажение

range (3:34)

Диапазон

Week 6

for loop over indices (14:24)

Цикл for для индексов

Parallel Lists and Strings (6:03)

Параллель между списками и строками

Nested Lists (4:03)

Вложенные списки

Nested Loops (13:56)

Вложенные циклы

Reading Files (4:43)

Чтение файла

Writing Files (5:17)

Печать в файл

Developing a Program (34:01)

Разработка программ

Week 7

Tuples (2:07)

Кортежи

Type dict (9:53)

Тип словаря

Inverting a Dictionary (4:28)

Инвертирование словаря

Populating a Dictionary (7:18)

Наполнение словаря

Чтобы пройти курс, необходимо зарегистрироваться на сайте и подписаться на него -- заранее или в процессе.

После того, как курс завершен, он остается на сайте в виде архива.

«Архив» -- это значит, что всеми материалами можно пользоваться, но задания, кроме тестов, больше не оцениваются и сертификация недоступна.

2.2 Раскрытие методической системы обучения программированию с использованием Coursera

А. М. Пышкало в своем представлении о методической системе обучения исходит из того, что она являет собой структуру, компонентами которой являются цели, содержание, методы, формы и средства обучения.

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

Современная парадигма образования - переход от принципа

«образование на всю жизнь» к принципу «образование через всю жизнь».

Дистанционные курсы Coursera своей статистикой обучения как нельзя лучше показывают, как люди разных возрастов могут получить образование от лучших университетов, находясь при этом в любой точке планеты, где есть Интернет.

В.А. Сухомлинский утверждал, что начальная школа, прежде всего, должна научить учиться. Этот «источник желания учиться» очень важно сохранять и укреплять на протяжении всех ступеней образования. Только тогда можно быть уверенным в готовности человека к взрослой жизни.

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

Содержание обучения на Coursera соответствует уровню качества всемирно известных университетов.

Средства обучения в арсенале Coursera предполагают полноценные курсы, которые включают видеолекции с субтитрами, текстовые конспекты, домашние задания, тесты и итоговые экзамены.

Форма обучения - инновационная (использование перспективно- опережающего обучения с использованием ИКТ в формате «перевернутый класс»).

Методика перспективно-опережающего обучения впервые была разработана учителем начальных классов С.Н. Лысенковой еще в 70-х годах прошлого века. Она открыла замечательный феномен: чтобы уменьшить объективную трудность некоторых вопросов программы, надо опережать их введение в учебный процесс. Такое рассредоточенное усвоение учебного материала обеспечивает перевод знаний в долговременную память.

«Опережающее обучение важнейших тем, работа на перспективы - это не только глубокие знания, но и резерв времени». Данная методика очень интересна, поскольку позволяет сэкономить время на объяснение нового материала и уделить больше внимания практическому закреплению [17].

В 2008 году учителя химии Аарон Самс и Джонатан Бергманн стали записывать свои уроки на видео и превращать их в домашние задания для своих учеников. Этот метод обучения оказался очень успешным и получил название

«перевернутый класс» . Некоторые считают, что «перевернутый класс» - это всего лишь модная зарубежная практика, однако она об опережающем обучении заговорил российский педагог и опыт внедрения «перевернутого класса» в российской школе показал хорошие результаты и статистику, которые можно увидеть в блоге Елены Пономаревой - участника Образовательной галактики Intel.

Таким образом, можно сделать вывод, что дистанционное обучение с помощью Coursera можно рассматривать как методическую систему обучения, которая содержит в себе современные методы обучения.

2.3 Практическая реализация предлагаемой методики изучения программированию в углубленном курсе информатики старшей школы

Практическая реализация предлагаемой методики изучения программированию на языке Python в углубленном курсе информатики старшей школы опирается на УМК авторов И.А. Калинин и Н.Н. Самылкина.

Знакомство со средой программирования - IDLE

В подавляющем большинстве случаев разработка программ выполняется с помощью интегрированной среды. Воспользуемся для решения задач IDLE (среда разработки на языке Python, поставляемая вместе с дистрибутивом). Эта среда предназначена для обучения программированию и свободно доступна по адресу www.python.org .

Интерфейс среды

Процедура установки Python отличается для разных платформ и подробно ее описывать здесь не будем. В двух словах:

· Пользователи Windows должны получить и запустить инсталляционный исполняемый файл, который произведет установку Python на компьютер. Для этого нужно просто дважды щелкнуть на инсталляционном файле и отвечать «Yes» (Да) или «Next» (Далее) на все вопросы.

· В Linux или в Mac OS вполне возможно, что Python уже установлен и готов к использованию, поскольку он является стандартным компонентом этих операционных систем.

· Процедура установки на других платформах зависит от этих платформ. Например, Python присутствует также в сотовых телефонах, игровых консолях и в проигрывателе iPod, но процедуры установки Python на эти устройства слишком отличаются, чтобы описывать их здесь.

После загрузки и установки Python открываем IDLE . На экране появляется окно, как на рис.1. Перед вами интерпретатор языка Python. Интерпретатор - это такой модуль, который исполняет другие программы. Когда вы пишете код на языке Python, интерпретатор Python читает вашу программу и выполняет составляющие ее инструкции.

Пожалуй, самый простой способ запускать программы на языке Python - это вводить инструкции непосредственно в командной строке интерпретатора, которая иногда называется интерактивной оболочкой.

Рис.1. Интерактивный режим IDLE (среда разработки на языке Python)

Интерактивный сеанс работы с интерпретатором Python начинается с вывода двух строк информационного текста (которые далее будем опускать в примерах), затем выводится приглашение к вводу >>>. Ввод каждой операции завершается нажатием на клавишу <ENTER>, после чего Python выполняет эту операцию и выдаёт результат или сообщение об ошибке. После присваивания результата операции какой-нибудь переменной результат не выдаётся, а чтобы его увидеть, нужно набрать имя переменной и нажать <ENTER>.

Традиционно, первой программой является вывод строки "Hello world"(рис.2).

алгоритмизация программирование python coursera

Рис.2. Запуск первой программы на Python

Когда в строке приглашения к вводу >>> была введена первая ин- струкция print, результат (строка) был немедленно выведен на экран. Нам не потребовалось создавать файл с исходным текстом программы и для выполнения программного кода не понадобилось сначала компилировать и компоновать его, что является обычным делом при использовании таких языков программирования, как C или C++.

При работе в интерактивном режиме можно вводить любое число команд Python, и каждая из них будет выполняться сразу же после ввода. Более того, поскольку в интерактивном сеансе результаты выражений, которые вводятся, выводятся автоматически, поэтому необязательно явно использовать функцию «print» (рис.3):

Рис.3

Благодаря тому, что программный код выполняется немедленно, интерактивный режим превращается в замечательный инструмент для проведения экспериментов с конструкциями языка.

Предположим, что вы изучаете некоторый фрагмент программы на языке Python и наталкиваетесь на выражение 'Spam!'*8, которое вам кажется непонятным. Можно, конечно, потратить с десяток минут, пробираясь через руководства и учебники, в попытках выяснить, что же делает этот код, но можно просто выполнить его в интерактивной оболочке (рис.4):

Рис.4

Эксперимент наглядно показывает, что произошло дублирование строки: в языке Python оператор * выполняет операцию умножения над числами, но если левый операнд является строкой, он действует как оператор многократной конкатенации строки с самой собой.

Приведем список наиболее распространенных ошибок:

1. Использование переменной, которой еще не присвоено значение (рис.5):

Рис.5

2. Незакрытые скобки (рис.6):

Рис.6

Примечание: Если скобка открыта, но не закрыта, интерпретатор Python будет ожидать закрытой скобки (рис.7):

Рис.7

3. Операции сложения, вычитания, деления (но не умножения) между строками и числами (рис.8):

Рис.8

Помимо интерактивного режима, в котором можно быстро отследить результат инструкций для Python, есть возможность писать многострочную программу в отдельном файле. Для этого нужно перейти во вкладку File - New

File (рис.9), откроется новое окно, в котором мы сможем написать первую самостоятельную программу на Python.

Рис.9

Перед тем, как написать программу, ознакомимся с основными аспектами синтаксиса языка.

Синтаксис языка Python

· Конец строки является концом инструкции (точка с запятой не требуется).

· Вложенные инструкции объединяются в блоки по величине отступов. Отступ может быть любым, главное, чтобы в пределах одного вложенного блока отступ был одинаков. Отступ в 1 пробел - не лучшее решение. В дальнейшем, будем использовать знак табуляции.

· Вложенные инструкции в Python записываются в соответствии с одним и тем же шаблоном, когда основная инструкция завершается двоеточием, вслед за которым располагается вложенный блок кода, обычно с отступом под строкой основной инструкции.

Пример:

Основная инструкция:

Вложенный блок инструкций

Неско лько специальных случаев :

· Иногда возможно записать несколько инструкций в одной строке, разделяя их точкой с запятой, но рекомендуется это делать, т.к. пострадает удобочитаемость программного кода.

· Допустимо записывать одну инструкцию в нескольких строках. Достаточно ее заключить в пару круглых, квадратных или фигурных скобок:

Пример:

if(a == 1 and b == 2 and c == 3 and d == 4):

print (“Try”)

· Тело составной инструкции может располагаться в той же строке, что и тело основной, если тело составной инструкции не содержит составных инструкций.

Пример:

if(x > y): print (“x”)

Видеолекции курса «Learn to Program: The Fundamentals»:

(Week 1):

· Welcome to LTP (0:35),

· Getting Started: Installing Python (2:46),

· Python as a Calculator (10:33),

· Variables (7:39),

· Built-in Functions (5:00),

· Defining Functions (6:41). (Week 2):

· Type str (4:56),

· Input/Output and str Formatting (10:14),

· Docstrings and Function help (1:18),

· Function Reuse (6:40);

Задача: Чему равны значения переменных P и Q после выполнения последовательности действий?

>>> P = 4 * 5 // 3 % 5

>>> Q = 34 % P * 5 - 29 % 5 * 2

В приведенной записи // и % операции соответственно деления нацело и получения остатка от целочисленного деления.

Пример:

5 // 2 = 2

5 % 2 = 1

Подготовка к выполнению задания:

1 Какой порядок выполнения арифметических действий при выполнении следующей строки: 7 * 2 + 5 / 12 % 5

Варианты ответа:

а) * , + , / , %

б) * , % , / , +

в) * , / , % , +

Ответ: в)

2 Дополните выражение круглыми скобками, чтобы последовательность операций была: + , - , / , %

>>> 3 + 4 / 2 - 7 % 2

Ответ: (3 + 4) / (2 - 7) % 2

3 Выберите варианты выражений, которые выведут ошибку при выполнении строки?

Варианты ответа:

а) 7 /(2 /(3 / 3)))

б) 5 + -3

в) 4 * *

г) 6 * (3 + 1)

Ответ: а) , в)

Первая самостоятельная программа

Напишем программу нахождения корней квадратного уравнения (рис.10). Для записи значений, введенных с клавиатуры, используется функция input().

Рис.10

Чтобы запустить программу перейти во вкладку Run - Run Module (рис.11)

Рис.11

В интерактивной оболочке предлагается ввести коэффициенты квадратного уравнения, однако после следует ошибка (рис.12)

Рис.12

Дело в том, что функция input() записывает введенную информацию с клавиатуры в виде строки, т.е. при введении коэффициента A в переменную x записалось не число 2, а строка, состоящая из одного символа `2'. Чтобы

исправить ситуацию, добавим функцию int(), которая возвращает целочисленное значение аргумента. Программа будет выглядеть следующим образом (рис.13):

Рис.13

Запустим программу снова и проверим при разных значениях коэффициентов (рис.14).

Рис.14

На рисунке видно, что при попытке посчитать положительный дискриминант выдана ошибка, в которой говорится, что «имя `sqrt' не определено» (NameError: name 'sqrt' is not defined)

Python автоматически может осуществлять множество арифметических операций (сложение, вычитание, умножение, деление, возведение в степень и др.), однако для более сложных вычислений используется модуль math. Этот модуль предоставляет обширный функционал для работы с числами: округления, извлечение корня, модуль, факториал, тригонометрические функции и т.п. Чтобы подключить этот модуль требуется вписать в начало программы строку import math, а чтобы обратиться к этому модулю для подсчета квадратного корня - math.sqrt()(рис.15).

Рис.15

Запустим программу (рис.16).

Рис.16

Python может выявить только формальные, синтаксические ошибки. Логические ошибки, допущенные вами, в подавляющем большинстве случаев никто, кроме грамотного программиста, выявить и устранить не сможет. Это и произошло: в строке 6 есть ошибка - перепутан знак сравнения. На самом деле условие должно выглядеть как if D >= 0.

Чтобы избежать таких ошибок, нужно проверять все возможные варианты (в особенности для условных операторов). Если вы не можете найти ошибку, которую Python выдает, попробуйте использовать интерактивную оболочку как экспериментатор для отдельных частей программы.

Видеолекции курса «Learn to Program: The Fundamentals»:

(Week 3):

· Functions, Variables, and the Call Stack (4:30)

· Type bool (8:57)

· Converting between int, str, and float (3:16)

· If statements (9:10)

· No if required (4:17)

· Structuring if statements (6:07)

(Week 4):

· More str operators (2:16)

· str: indexing and slicing (4:53)

· str Methods: Functions Inside of Objects (3:41)

· for loop over str (11:35) (Week 5):

· while loops (12:21)

? range (3:34)

Решение задач из учебника §17.

Задача: Дано натуральное трехзначное число n, в записи которого нет нулей. По предложенной записи алгоритма в виде блок-схемы и псевдокода определите результаты его работы.

В фигурных скобках записаны пояснения (комментарии) к операторам.

Read(n) {Ввод N}

A = n mod 10 {разряд единиц} B = n div 100 {разряд сотен}

C = n div 10 mod 10 {десятки}

L = (n mod A=0) and (n mod B=0) and (n mod C=0)

Write (L) {Вывод L}

Переведите алгоритм на язык программирования и получите работающую программу.

Задача: По предложенным записям алгоритма напишите программу вычисления значения функции:

Read (x)

If (x-12)

Y= -x*x

else

if (x<0)

Y= x*x*x*x

else

Write (Y)

Y= x-2

Протестируйте полученную программу, используя не менее трех тестовых наборов, чтобы можно было проверить все переходы.

Реализация на Python:

Проверка:

x = float(input())

>>> 0

if x <= -12:

-2.0

print(-x ** 2)

>>> -12.5

elif (x > -12) & (x < 0):

-156.25

print(x ** 4)

>>> -5

else :

625.0

print(x - 2)

Задача: Даны записи двух алгоритмов подсчета количества нечетных цифр в натуральном числе n. Слева решение оформлено с использованием цикла с предусловием, справа - с постусловием.

Выберите любой способ и переведите его на язык программирования. Протестируйте полученную программу.

Алгоритм реализует следующ ую идею. Из числа выбрасывается цифра младшего разряда, проверяется на нечетность и затем отбрасывается. Нечетные цифры учитываются. Этот процесс повторяется до тех пор, пока число не исчерпается, т.е. не станет равным нулю.

Read(n) K = 0

While (n <> 0)

if (n mod 10 mod 2 = 1)

K = K + 1

n = n div 10

Write (K)

Read (n) K = 0

Do

if (n mod 10 mod 2 = 1)

K = K + 1

n = n div 10 While (n <> 0) Write (K)

Реализация на Python:

Проверка:

n=int(input()) k=0

while n != 0:

if n % 10 % 2 == 1:

k = k + 1 n = n // 10

print (k)

>>> 0

0

>>> 105

2

Замечание: Конструкции do…while на языке Python нет.

Задача: Используя предлагаемые записи алгоритма, напишите программу нахождения первых k чисел, кратных трем.

Read(k)

P = 1 {здесь накапливаем произведение}

For I = 1 to k/3

P = P * I * 3

Write(P)

Реализация на Python:

Проверка:

k = int(input())

>>> 2

p = 1

18

for i in range(3,k+1,3):

>>> 3

p = p * i

162

print (p)

Замечание: Функция range(A,B,C) возвращает упорядоченную последовательность элементов начиная с А до В, не включая В, с периодом С. Если период отсутствует, то С принимается за 1(период без начального элемента не задается). Если отсутствует начальный элемент, то за А принимается 0.

Пример:

>>> range(2,7,3)

>>> range(3,6)

>>> range(3)

2

3

0

5

4

1

5

2

Задача: Напишите программу решения следующей задачи.

Лотерейный номер состоит из трех чисел, каждое из которых может быть от 0 до 99 включительно. Определите шанс угадать выигрышный лотерейный номер.

Идея решения. Надо вычислить количество перестановок для заданного числа объектов (3), которые выбираются из общего числа объектов (100).

Перестановка - это любое множество объектов, в котором внутренний порядок имеет значение. Формула для определения перестановок имеет следующий вид:

Следовательно, надо написать функцию, вычисляющую факториал некоторого числа ( ) и вычислить количество перестановок.

Реализация на Python:

n = 100

k = 3

f1 = 1

f2 = 1

for i in range(1,n+1): f1 = f1 * i

for j in range(1,n+1-k): f2 = f2 * j

print ('Количество перестановок: ', f1/f2)

print ('Шанс угадать выигрышный лотерейный билет: ', 1/(f1/f2))

Проверка:

Количество перестановок: 970200.0 .

Шанс угадать выигрышный лотерейный билет: 1.0307153164296022e-06

Замечание:

1.0307153164296022e-06 - экспоненциальная форма записи числа:

Видеолекции курса «Learn to Program: The Fundamentals»:

(Week 5):

· Comments (4:55)

· Type list (4:23)

· list methods (8:07)

· Mutability and Aliasing (10:03) (Week 6):

· for loop over indices (14:24)

· Parallel Lists and Strings (6:03)

· Nested Lists (4:03)

· Nested Loops (13:56)

· Reading Files (4:43)

· Writing Files (5:17)

Решение задач из учебника §17.

Задача: Напишите программу заполнения массива X(N) положительными и отрицательными элементами. Из него требуется сформировать новый массив только из положительных элементов. Найти из них наибольший элемент. Распечатать новый массив и наибольший элемент.

Реализация на Python:

X = []

a = int(input('Введите длину предполагаемого массива: ')) for i in range(a):

b = int(input('Введите элемент массива: ')) X.append(b)

print('Ваш массив: ',X) X_2 = []

m = 0

for j in range(a): if X[j] > m:

m = X[j] if X[j] > 0:

X_2.append(X[j])

print('Новый массив, состоящий из положительных элементов:', X_2) print ('Наибольший элемент массива:', m)

Проверка:

Введите длину предполагаемого массива: 5 Введите элемент массива: 5

Введите элемент массива: 4 Введите элемент массива: -2 Введите элемент массива: 6 Введите элемент массива: -2 Ваш массив: [5, 4, -2, 6, -2]

Новый массив, состоящий из положительных элементов:[5, 4, 6] Наибольший элемент массива:6

Задача: Напишите программу нахождения минимального элемента главной диагонали массива K(n,n) заполненного случайными числами.

Реализация на Python:

import random

n = int(input('Размерность массива: ')) mas = []

for i in range(n): mas.append([])

for j in range(n): mas[i].append(random.randint(1,100))

print ('Массив из случайный чисел от 1 до 100:',mas) m = 100

for k in range(n): if m > mas[k][k]:

m = mas[k][k]

print ('Минимальный элемент массива: ',m)

Проверка:

Размерность массива: 3

Массив из случайный чисел от 1 до 100: [[25, 96, 62], [95, 43,

5], [57, 18, 74]]

Максимальный элемент массива: 25

Структуры данных: списки. (Учебник §18)

Односвязные списки

1. Добавление элемента в голову списка:

Реализация программы на языке Python:

Проверка

>>>

>>>

list = [] list.append(2)

>>> [2]

list

>>>

>>>

>>>

>>>

list0 = [] list0.append(2) list0.append([2,3,4]) list0.append(`abc')

>>> list0 [2,[2,3,4],'abc']

>>>

>>>

>>>

list1 = [] list1.extend([2]) list1.extend([2,3,4])

>>> [2,

list1 2, 3,

4]

>>>

>>>

list2 = [0,0,0,0]

list2.insert(3,5)

>>> [0,

list2 0, 0,

5,

0]

>>> list3 = [0,0,0,0]

>>> list3.insert(-3,6)

>>> [0,

list3 6, 0,

0,

0]

Замечание: Функция list.append(a)добавляет в конец списка list элемент a, который может быть и числом, и строкой, и даже другим списком. Функция list.extend(a)добавляет в конец списка list элемент a, причем в случае, когда a список - добавляется не список как элемент, а все элементы этого списка.

Функция list.insert(i, b)добавляет элемент b перед i-ым элементом изначального списка list. Важно помнить, что индексация списка слева направо начинается с 0, а справа налево с -1.

2. Поиск элемента в списке:

>>> 3 in [1,2,3,4,5]

True

>>> 0 in [1,2,3,4,5]

False

>>> list = [1,2,3,4,5]

>>> list.index(5) 4

>>> list = [1,2,3,4,5,0,5]

>>> list.index(5) 4

Замечание: Функция list.index(a)выдает первый встретившийся элементa в списке, начиная с начала списка.

3. Удаление элемента из списка:

Замечание: Функция list.pop(i) удаляет элемент с i-ым индексом и выдает удаляемый элемент пользователю.

Функция list.remove(i) удаляет элемент с i-ым индексом и НЕ выдает удаляемый элемент пользователю.

Двусвязные списки

В языке Python нет стандартного объекта struct, как в языке Си. Но этот объект можно легко реализовать с помощью классов.

Для определения связного списка потребуется класс - ListItem, в конструкторе которого будут определяться ссылки на предыдущий и следующий элементы списка.

class ListItem:

def init (self, data=0): self.prev = None self.next = None self.data = data

Определим функцию, выводящую все значения списка:

def write(self):

#Поиск начала списка

while not self.prev == None: self=self.prev

#Вывод

while not self == None: print(self.data) self = self.next

Далее программу можно будет дополнить функциями, требующимися для решения задач. Например, добавление элемента в голову (начало) списка, поиск элемента в списке, удаление элемента списка.

1. Добавление элемента в голову списка:

2. Поиск элемента в списке:

3. Удаление элемента из списка по индексу:

Задача: Напишите программу, в которой предлагается вводить учащихся различных классов, посещающих футбольную секцию. Требуется упорядочить список по возрастанию классов. Распечатать список фамилий и классов.

Замечание: Для удобства пользователя создадим поля для выбора операции, при выполнении каждой из которой будут выполняться соответствующие им строки программы. Заключим поля для выбора в цикл, который будет появляться после каждого введения учащегося, пока пользователь не введет

«q», т.е. выход:

while True:

print("+ - Добавить учащегося\nl - Вывести список учащихся\ns

- Вывести отсортированный список учащихся\nq - Выход")

\n выступает в роли перехода на новую строку.

Структуры данных: деревья. (Учебник §18)

Для определения двоичного дерева потребуется класс - TreeItem, в конструкторе которого будут определяться ссылки на корневой элемент, а также на его левую и правую ветвь.

class TreeItem:

def init (self, data = None): self.right = None

self.left = None self.data = data

Определим корневой узел дерева со значением 200 с первым разветвлением на узлы 50 и 250:

#Корневой элемент root = TreeItem(200)

#Список, содержащий начальные левый и правый узлы дерева tree = [TreeItem(50), TreeItem(250)]

root.left = tree[0] root.right = tree[1]

1. Вставка элемента в дерево:

2. Поиск элемента в дереве:

Замечание: Перед тем, как использовать вышеприведенный программные коды, не забудьте создать переменную inp, содержащую в себе введенное число пользователя с клавиатуры.

Задача: Требуется написать программу хранения и поиска данных о книгах в книжном магазине. О каждой книге известны: название, автор, количество, цена, номер зала, номер шкафа и номер полки.

Решение:

Для начала обозначим класс Book и в нем определим конструкцию данных о каждой книге, т.е. название, автор, количество, цена, номер зала, номер шкафа и номер полки.

class Book:

def init (self, title = '', author = '', count = 0, price = 0, place1 = 0, place2 = 0, place3 = 0):

self.title = str(title) #название self.author = str(author) #автор self.count = int(count) #количество self.price = float(price) #цена self.place1 = int(place1) #зал self.place2 = int(place2) #шкаф self.place3 = int(place3) #полка

Для вывода всех книг определим функцию itemArrayPrint, зависящую от переменных pos - «позиция», store - «книжный магазин» (объявим ее позже, после определения всех функций).

def itemArrayPrint(pos, store):

#Операторы подстановки. %s -- строка, %d -- десятичное число, %f

-- число с плавающей точкой. Далее в скобках указаны переменные для подстановки

print("|%s|%s|%d|%0.3f|%d|%d|%d|" % (store[pos].title, store[pos].author, store[pos].count, store[pos].price, store[pos].place1, store[pos].place2, store[pos].place3))

Для поиска определенной книги определим функцию findRecord, который заключается в циклическом переборе каждой записи в данном случае по автору.

def findRecord(author, startSearchPos, store): current = startSearchPos

while current < len(store) and store[current].author != author:

current += 1 return current

Для вывода книги по автору определим функцию printAuthorBooks достаточно несколько раз вызвать функцию findRecord, меня стартовую позицию и, в конечном счете, вывести на печать книгу нужного автора.

def printAuthorBooks(author, store): pos = findRecord(author, 0, store) while pos < len(store):

itemArrayPrint(pos, store) print(pos)

pos = findRecord(author, pos + 1, store)

Для удаления записи из массива на языке C++ потребовалась бы перестановка всех записей от удаляемой к началу, однако в Python списки и, значит, перемещать записи нет необходимости. Это происходит автоматически

def deleteArrayItem(pos, store): try:

del store[pos]

#если не вышло удалить, значит элемента нет except IndexError:

print("Нет такой книги")

Объявляем «книжный магазин» пустым списком и как было ранее, наладим связь с пользователем, запустив цикл while True, где и будем ссылаться на функции, определенные ранее:

store = [] while True:

#Ввод команды пользователем

inp = input('d -- удалить книгу\na -- добавить книгу\ns -- поиск книги\np -- вывод всех книг\nq -- выход\n')

#Удаление книги по номеру if inp == 'd':

deleteArrayItem(int(input('Введите номер книги')), store)

#Добавление книги elif inp=='a':

store.append(Book(input("Название: "), input("Автор: "), input("Количество: "), input("Цена: "), input("Зал: "),

input("Шкаф: "), input("Полка: "))) saveArray('test.txt', store) else:

print("Не добавлено, количество книг 1000")

#Поиск и вывод книги по автору

elif inp == 's':

printAuthorBooks(input("Автор: "),store)

#Печать всех записей elif inp == 'p':

#Проверка, не пуст ли список if len(store):

for i in range(len(store)): itemArrayPrint(i, store)

else:

print("Список пуст")

#Выход из диалогового окна elif inp=='q':

break

Работа с файлами

Каждый раз вводить данные заново - не самый лучший способ. Если нужно сохранить данные на долгий срок, используются файлы.

Чтобы можно было сохранять или загружать файлы в программе, подключим модуль pickle. Для этого впишем «import pickle» в начало программного кода.

В коде программы, где объявлялись функции поиска, удаления записей книг, добавим функции saveArray (сохранения) и loadArray (загрузки) файла.

Предусмотрим, что файла может не оказаться. В таком случае программа создаст собственный пустой текстовый файл с названием test.txt.

def saveArray(fname, store):

with open(fname, "wb") as fout: for obj in store:

#встроенная функция записи в подключенном модуле pickle.dump(obj, fout)

def loadArray(fname, store): try:

with open(fname, "rb") as fin: while True:

try:

#встроенная функция загрузки в подключенном модуле

a = pickle.load(fin) store.append(a)

except EOFError:

return store

#На случай, если файла нет, создадим собственный документ с названием test.txt

except FileNotFoundError: return []

store = []

#Загрузка файла loadArray("test.txt", store)

Типовые алгоритмы. (Учебник §19)

1. Поиск в отсортированной последовательности:

2. Сортировка пузырьком

Улучшим алгоритм с помощью отсутствия перестановок:

3. Алгоритм быстрой сортировки

4. Бинарный поиск

Бинарное дерево поиска

Сначала определим класс дерева - TreeItem, встречаемый ранее и добавим поле key (значение узла).

class TreeItem:

def init (self, key = None): self.right = None

self.left = None self.key = key

Зададим начальные значения узлов.

root = TreeItem(200) root.left=TreeItem(42) root.right=TreeItem(420)

Опишем функцию insertItem добавления элемента в дерево. Это сделать можно, только найдя его место. Для этого нам потребуется функция поиска элемента в дереве. Для удобства добавим комментарий о том, справа или слева от какого узла помещен новый элемент.

def insertItem(inp): global root

if root:

curItem = root

#Поиск нужного места и вставка нового элемента

while not curItem == None and not curItem.key == inp: if curItem.key > inp:

if curItem.left == None or curItem.left.key ==

None: "+str(curItem.key))

print("Помещаем слева от

curItem.left = TreeItem(inp) break

else:

#Переход влево

curItem = curItem.left

== None:

elif curItem.right == None:

print("Помещаем справа от " + str(curItem.key)) curItem.right = TreeItem(inp)

break else:

if curItem.right == None or curItem.right.key

print("Помещаем справа от " +

str(curItem.key))

else:

curItem.right = TreeItem(inp) break

else:

#Переход вправо

curItem = curItem.right

root = TreeItem(inp)

Хэширование

Напишем программу, которая по значению ключа рассчитает число

«хэш». Число рассчитывается так, чтобы значения поискового ключа распределились среди всех возможных значений хэша равномерно.

#описание элемента дерева

numHashLen=577 #количество возможных хэшей

from sys import argv #для ручного задания имени файла class PHashNode:

def init (self, val = []): self.val = val

def hash_(s):#хэш-функция global numHashLen

h = 0

for i in s:

h = h * 61 + ord(i) return h%numHashLen

#создание списков

countArr = [0 for _ in range(numHashLen)]

searchArr = [PHashNode() for _ in range(numHashLen)] try:#попытка получить имя файла из первого аргумента

fname = argv[1] except IndexError:

fname = 'text1.txt'

with open(fname, 'r') as f:#чтение из файла и добавление в список слов

for line in f:

for k in line.split(): searchArr[hash_(k)].val.append(k) countArr[hash_(k)] += 1

print('\n'.join([str(i)+' '+str(countArr[i]) for i in range(len(countArr))]))#вывод количества слов для каждого хэша

Хэш-функция для каждого символа умножает текущее значение (переменная h) хэша, которое изначально для каждой строки равно нулю, на 61 и прибавляет числовой код символа (функция ord). К примеру, числовое представление "а" -- 97, "€" -- 8364. Функция возвращает остаток деления итогового значения на переменную numHashLen, что ограничивает число возможных значений.

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

Так для слова "лосось" действия будут следующими:

ord("л") = 1083

h = 1083

ord("о") = 1086

h = 67149

ord("с") = 1089

h = 4097178

ord("о") = 1086

h = 249928944

ord("с") = 1089

h = 15245666673

ord("ь") = 1100

h = 929985668153

Функция вернёт остаток от деления 929985668153 на 577, который равен 441.

2.4 Результаты апробации в старшей школе

Апробация разработанной методики проводилась на базе школы ГБОУ СОШ №1253 (на педагогической практике) с учениками 10 класса и была проанализирована на контрольной и экспериментальной группах обучающихся (всего 52 человека), показав положительный результат.

"Результаты изменения уровня знаний в контрольной и экспериментальной группах до и после апробации"

Уровень знаний

КГ1, (чел.)

ЭГ1, (чел.)

КГ2, (чел.)

ЭГ2, (чел.)

Низкий

9

6

11

2

Средний

11

13

10

13

Высокий

8

5

7

9

КГ1 - Контрольная группа до начала эксперимента.

КГ2 - Контрольная группа после окончания эксперимента. ЭГ1 - Экспериментальная группа до начала эксперимента.

ЭГ2 - Экспериментальная группа после окончания эксперимента.

"Гистограмма контрольной и экспериментальной групп до начала апробации"

"Гистограмма контрольной и экспериментальных групп после окончания апробации"

Была выдвинута гипотеза "характеристики контрольной и экспериментальной групп совпадают с уровнем значимости 0,05" и применён критерий однородности ч2 [19].

"Эмпирические значения критерия ч2"

КГ1

ЭГ1

КГ2

ЭГ2

КГ1

0

1,2

0,3

4,4

ЭГ1

1,2

0

1,9

3,1

КГ2

0,3

1,9

0

6,6

ЭГ2

4,4

3,1

6,6

0

Критическое значение равно 5,99, а эмпирическое ? 6,6, т.е. ч2крит < ч2эмп. Значит, достоверность различий характеристик сравниваемых выборок составляет 95%, что показывает положительный эффект применения экспериментальной методики обучения.

Таким образом, в результате исследования были доказаны доступность и целесообразность разработанной методики изучения языка программирования Python в углубленном курсе информатики с применением дистанционных курсов Coursera.

Заключение

В результате проведенного анализа учебно-методической литературы была выявлена тенденция все возрастающего значения изучения языков программирования в школе, а именно, на разных этапах развития курса информатики происходил переход на современные актуальные языки программирования.

В настоящее время к актуальным языкам программирования доступным для изучения школьниками и позволяющим решать профессиональные задачи специалистам ИТ-сферы можно отнести язык Python.

Современные образовательные технологии, в числе которых дистанционная форма обучения и "перевернутый класс" позволяют идти в ногу с потребностями молодого поколения.

В предлагаемой нами методике изучения языка программирования Python с использованием дистанционных курсов Courserа. реализованы все компоненты методической системы обучения.

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

Список литературы

Источники

1. Приказ Минобрнауки России от 6 октября 2009 года № 373 "Об утверждении и введении в действие федерального государственного образовательного стандарта начального общего образования": [Электронный ресурс] - Режим доступа: http://минобрнауки.рф/документы/922

2. Приказ Минобрнауки России от 17 декабря 2010 года № 1897 "Об утверждении федерального государственного образовательного стандарта основного общего образования": [Электронный ресурс] - Режим доступа:

h tt p:/ / www.мин обр науки .рф /до кумен ты/9 38

3. Приказ Минобрнауки России от 17 мая 2012 года №413 «Об утверждении федерального государственного образовательного стандарта среднего общего образования": [Электронный ресурс] - Режим доступа:

h tt p:/ / мин об рн ауки .р ф/ до кумен ты/2 365

Литература

4. Богданова Д. Перевернутый урок. Как объяснить тему так, чтобы все поняли, и чтобы никому не было скучно? / Диана Богданова / Дети в информационном обществе. - 2012. - №11.

5. Гейн А.Г., Житомирский В.Г., Линецкий Е.В., Сапир М.В., Шолохович В.Ф.

«Основы информатики и вычислительной техники»: пробный учебник для 10-11 классов средней школы. // М.: Просвещение. - 1991.

6. Каймин В.А., Щеголев А.Г., Ерохина Е.А., Федюшин Д.П. «Основы информатики и вычислительной техники»: пробное учебное пособие для 10- 11 классов средней школы. // М.: Просвещение. - 1989.

7. Калинин И. А., Самылкина Н. Н. Информатика. УМК для старшей школы: 10 - 11 классы (ФГОС). Методическое пособие для учителя. Углублённый уровень // М.: БИНОМ. Лаборатория знаний. - 2013.

8. Калинин И. А., Самылкина Н. Н., Информатика. Программа для старшей школы: 10-11 класс. Углубленный уровень. // М.: БИНОМ. Лаборатория знаний. - 2013.

9. Калинин И. А., Самылкина Н. Н., Информатика. Углублённый уровень: учебник для 10 класса. // М.: БИНОМ. Лаборатория знаний. - 2013.

10. Калинин И. А., Самылкина Н. Н., Информатика. Углублённый уровень: учебник для 11 класса. // М.: БИНОМ. Лаборатория знаний. - 2013.

11. Калинин И. А., Самылкина Н. Н., Бочаров П. В. Информатика. Углубленный уровень: задачник-практикум для 10-11 классов // М.: БИНОМ. Лаборатория знаний. - 2014

12. Колин К. К. Информатика как наука: история и перспективы развития. // Открытое образование. - 2011. - С. 77.

13. Колин К. К. О структуре научных исследований по комплексной проблеме

«Информатика» // Сб. н. тр. «Социальная информатика». М.: ВКШ при ЦК ВЛКСМ. - 1990. С. 19-33

14. Курнишенко А.Г., Лебедев Г.В., Сворень Р.А. «Основы информатики и вычислительной техники»: пробный учебник для средних учебных заведений. // М.: Просвещение. - 1990.

15. Лебедева М.Б. Массовые открытые онлайн-курсы как тенденция развития образования. // Человек и образование. - 2015. - №. 1 (42).

16.Лутц М. Изучаем Python. // СПб.: Символ-Плюс. - 2011.

17. Лысенкова С. Н. Методом опережающего обучения. // М.: Просвещение. - 1988. - Т. 125.

18. Монахов В. М. Тридцать лет спустя. // Информатика и образование. - 2015.

- №. 7.

19. Новиков Д. А. Статистические методы в педагогических исследованиях (типовые случаи) // М.: Мз-Пресс. - 2004. - С.67

20. Поляков К. Ю., Еремин Е. А. Информатика. Углубленный уровень: учебник для 10 класса: в 2 ч., ч. 2 // М.: БИНОМ. Лаборатория знаний. - 2013.

21. Поляков К. Ю., Еремин Е. А. Информатика. Углубленный уровень: учебник для 11 класса: в 2 ч., ч. 2 // М.: БИНОМ. Лаборатория знаний. - 2013.

22. Семакин И.Г., Шейна Т.Ю., Шестакова Л.В. Информатика. Углубленный уровень: учебник для 10 класса: в 2 ч., ч.1 // М.: БИНОМ. Лаборатория знаний. - 2014.

23. Семакин И.Г., Шейна Т.Ю., Шестакова Л.В. Информатика. Углубленный уровень: учебник для 11 класса: в 2 ч., ч.1 // М.: БИНОМ. Лаборатория знаний. - 2014.

24. Семакин И.Г., Хеннер Е.К. Информатика в профильной школе. // Информатика и образование. - 2010. - №10

25. Семакин И.Г. Эволюция школьной информатики. // Информатика и образование. - 2011. - №5.

26. Ткач С. С. Методические аспекты изучения раздела «Алгоритмизация и программирование» в современном школьном курсе информатики. Электронные ресурсы

27. Бизнес модели бесплатного обучения на Corsera, edX и Udacity [Электронный ресурс]. - Режим доступа: https://habrahabr.ru/sandbox/50831/

28. Единая коллекция цифровых образовательных ресурсов [Электронный ресурс]. - Режим доступа: http://school-collection.edu.ru/

29. Ершов А.П., Монахов В.М., Бешенков С.А. , Гольц Я.Э., Кузнецов А. А., Кузнецов Э. И., Лапчик М.П., Смекалин Д. О. «Основы информатики и вычислительной техники»: пробное учебное пособие для средних учебных заведении [Электронный ресурс]. - Режим доступа: http://cip.iis.nsk.su/files/course/oivt1p.pdf. -М.: Просвещение. - 1985.

30. Ершов А.П. Программирование - вторая грамотность. // Архив академика А.П. Ершова [Электронный ресурс]. - Режим доступа: http://ershov.iis.nsk.su/russian/second_literacy/article

31. Лебедева Т.Н. Становление курса информатики в школьном курсе информатики в школьном образовании в период с 1950 г. до 1990 г.

[Электронный ресурс]. - Режим доступа:

http://cyberleninka.ru/article/n/stanovlenie-kursa-informatiki-v-shkolnom- obrazovanii-v-period-s-1950-g-do-1990-g

32. О проекте Coursera. [Электронный ресурс] - Режим доступа: https://www.coursera.org/about/

33. Перевернутый класс средство от скуки. [Электронный ресурс] - Режим доступа: https://newtonew.com/discussions/flipped-classroom-in-russia

34. Семь вещей, которые необходимо знать о перевернутом обучении. [Электронный ресурс]. - Режим доступа: http://www.ed-today.ru/poleznye- stati/37-7-veshchej-kotorye-neobkhodimo-znat-o-perevjornutom-obuchenii

35.Федеральный центр информационно-образовательных ресурсов [Электронный ресурс]. - Режим доступа: http://fcior.edu.ru/

36.Campbell J., Gries P. Learn to Program: The Fundamentals [Электронный ресурс]. - Режим доступа: https://class.coursera.org/programming1-002/lecture

Размещено на Allbest.ru


Подобные документы

  • Отличительные особенности языка программирования Python: низкий порог вхождения, минималистичный язык, краткий код, поддержка математических вычислений, большое количество развитых web-фреймворков. Традиционная модель выполнения программ на языке Python.

    реферат [51,9 K], добавлен 18.01.2015

  • Разработка теории и методики преподавания раздела "Алгоритмизация и программирование" в школьном курсе информатики. Методические проблемы изучения алгоритмов работы с величинами. Требования к знаниям учащихся по линии алгоритмизации и программирования.

    курсовая работа [70,2 K], добавлен 09.07.2012

  • Этапы развития, особенности и возможности языка программирования Java; происхождение названия. Приложения Sun Microsystems: идеи, примитивные типы. Python - высокоуровневый язык программирования общего назначения: структуры данных, синтаксис и семантика.

    реферат [79,0 K], добавлен 23.06.2012

  • Понятие и характеристики облачных технологий, модели их развертывания, технологические процессы, аспекты экономики и критика. Язык программирования Python, оценка функциональности, сравнение с аналогами. Управление облаком в Python на примере libcloud.

    курсовая работа [43,0 K], добавлен 08.06.2014

  • Программное обеспечение Python и ее основные характеристики, как программной среды. Общие сведения о языке программирования Python. Особенности применения ППП Python (x,y) с использованием его различных вычислительных модулей в учебном процессе.

    дипломная работа [2,9 M], добавлен 07.04.2019

  • Анализ основ ООП, изучение языка программирования Python, применение полученных знаний на практике для реализации предметной области. Понятие и механизм инкапсуляции. Фиксирование информационной работы отеля. Диаграмма классов. Реализация на языке Python.

    курсовая работа [227,6 K], добавлен 14.05.2017

  • Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.

    курсовая работа [160,3 K], добавлен 03.12.2014

  • Разработка структуры базы данных для хранения дипломных проектов в среде объектно-ориентированного программирования Python. Создание внешнего вида окон ввода-вывода информации, технологии переходов. Листинг программы с пояснениями; направления улучшения.

    курсовая работа [3,1 M], добавлен 27.02.2015

  • Сравнительная характеристика, возможности и функции языков программирования JavaScript и PHP. Основные области их использования. Разработка интерактивного Web-приложения с применением JavaScript на примере теста по теме "Программирование на языке Delphi".

    курсовая работа [19,3 K], добавлен 01.07.2014

  • Use case-диаграмма. Оценка трудоёмкости и сроков разработки проекта с использованием языка Python по методикам CETIN И COCOMO-II. Проектирование информационной системы. Разработка приложения с использованием Django: создание шаблонов, моделей и пр.

    дипломная работа [1,3 M], добавлен 10.07.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.