Предисловие https://go.redav.online/0a847d5eba2884a0?m=32
Нужно ли учить школьника программированию, или создание программ – это удел профессионалов?
На наш взгляд, этот вопрос не более актуален, чем вопрос, нужно ли играть в шахматы, а подумать следует в первую очередь о том, захотят ли школьники изучать программирование? Нельзя ли представить программирование как увлекательную, логически развивающую игру?
Программирование открывается сейчас как уникальный методический инструмент в изучении математики. Но для того, чтобы пользоваться этим инструментом, необходимо развивать культуру программного мышления.
Математик скажет: «Пусть Х будет равен тому-то, тогда Х+5 будет равен тому-то, и …»
Эта фраза хорошо знакома нам всем со школьной скамьи. И не случайно: обязательным элементом математической культуры школьника является умение оперировать с неизвестными и решать задачи путём составления уравнений, и строится это искусство на шаблоне «Пусть Х…».
В программировании центральную роль при решении задач играет не понятие неизвестного, а понятие переменной. Программист мыслит так: «Если переменная Х будет принимать, такие-то значения, тогда …». Приёмам и методам Программирования, формированию особого «программистского» мышления и посвящается эта книга.
Математическая культура оттачивалась веками. Методика преподавания программирования только начинает формироваться.
В качестве платформы для обучения мы выбрали наиболее доступный язык программирования: Питон. За свою долгую историю Питон, как и любой другой язык, постоянно развивался и совершенствовался; было создано много разновидностей, или, как говорят, диалектов языка, несколько различающихся набором слов и правилам их применения. Учесть все возможные особенности диалектов и их реализаций Питона в одной книге невозможно, да и не нужно, ведь каждого отдельно взятого читателя интересует только тот Питон, который имеется на его компьютере (например, Питон 2 или Питон 3). Однако некоторые программы, возможно, вам придётся несколько изменить в соответствии с особенностями вашего Питона.
Корректировка, да и вообще правильное изменение текста программы требует ясного понимания смысла как отдельных конструкций, так и всей программы в целом. Научившись читать программу как осмысленный текст, вы сделаете большой шаг на пути к серьезному программированию.
Приведённые в книге программы рассчитаны на компьютеры с минимальными возможностями и не содержат ничего лишнего. Если вы работаете на современном ПК, ничто не мешает вам, изменив несколько чисел или букв в тексте программы, получить, например, многоцветное изображение вместо черно-белого. Но даже на примитивном компьютере всегда можно сделать что-то новое и найти неожиданное решение.
Я искренне надеюсь, что занимательная форма изложения поможет читателю включиться в интереснейшую игру под названием «программирование».
Краткая история Информатики и языков Программирования
Дорогие читатели!
Одним из основных предметов в СШ является Информатика. Что это за наука и что она изучает? Так вот, Информатика - это наука об Информации, о способах информационной деятельности, её обработке и передаче посредством ИКТ (информационно-коммуникативной техники).
Возникает вопрос - а что же такое Информация? Так вот единица информации 1 бит - это количество минимальной информации 0 или 1 в двоичной системе счисления, которая уменьшает неопределенность какой-либо ситуации ровно в 2 раза.
Одним из основных способов информационной деятельности человека является чтение. Успешное освоение большими количествами учебных материалов как по информатике , так и по другим школьным наукам во многом зависит от того - как Вы читаете. Надеюсь , что Вам будет интересно читать Мою Методичку.
Николай Филиппов nikf1980
Программа . Язык Программирования
Программу можно представить в виде набора каких-либо команд для исполнителя (например человека или вычислительной машины), которая выполняется исполнителем и автоматизирует процесс, который будет выполнен точно по инструкции в программе.
Мы с Вами ребята начинаем изучать язык программирования Питон. Что это за язык? - это Интерпретатор , наподобие интерпретатора языка Basic с которым были в школе знакомы Ваши родители.
Что же такое Интерпретатор и чем он отличается от Компилятора - например C++ или TurboPascal 7 ? Интерпретатор на каждом шаге - строке программы , обращается к программе Питон и транслирует код на английском языке высокого уровня (понятного вам ученики) в машинный код (понятный процессору любого компьютера), затем код исполняется также пошагово. Код можно вводить строка за строкой, нажимая Enter или написать в виде скрипта в текстовом редакторе кода (например Блокнот) Idle. Компилятор же должен создать бинарный файл на машинном коде процессора из всех строк кода на языке C++ или Turbo Pascal , и только затем выполнить. То есть невозможно построчное, отдельное выполнение, программа должна сначала скомпилироваться - создать исполняемый файл для ОС (операционной системы компьютера).
Разнообразие языков Программирования
В настоящее время существует множество различающихся и похожих между собой языков программирования. Причина такого явления становится понятна, если представить то количество и разнообразие задач, которые на сегодняшний день решается с помощью ВМ. Для решения разных задач требуется разные инструменты, то есть разные языки и подходы к программированию.
Основные этапы исторического развития языков программирования
Первые программы писались на так называемом машинном языке, так как для ВМ того времени ещё не существовало развитого ПО , а машинный язык - это единственный способ взаимодействия с аппаратным обеспечением компьютера, так называемым “хардом”.
Каждую команду машинного языка непосредственно выполняет то или иное электронное устройство. Данные и команды записывали в цифровом виде, например, в шестнадцатеричной или двоичной (базовой для любого компьютера) системе счисления.
Ассемблеры представляют собой следующий этап развития ПО - поскольку представляют собой среду низкоуровневой разработки и позволяют из команд ассемблера сгенерировать машинный код под конкретный процессор данной ВМ .
Языки программирования высокого уровня и среды разработки IDE были следующим этапом развития ПО. Они представляли собой интерпретатор или компилятор с языка более близкого человеку. В идеале человек и ВМ должны понимать друг - друга на естественном языке человека. Но так как, это - сложно реализовать, то первыми появились языки похожие на Basic English . И , уже затем языки Питон и Кумир (который кстати изучается в СШ). Язык Кумир- был похож на естественный Русский язык и поддерживает структурное программирование.
Краткая историческая справка
Язык программирования Питон был создан в 1991 году голландцем Гвидо ван Россумом. Своё имя - Пайтон (или по русски Питон) - получил от названия телесериала, а не пресмыкающегося. После того, как Россум разработал язык, он выложил его в Интернет, где сообщество программистов по лицензии GPL присоединилось к его улучшению.
Питон активно развивается и сейчас. Часто выходят новые версии. Ещё совсем недавно поддерживались две ветки языка: 2х и 3х, здесь буквой х обозначается конкретный номер релиза. Между вторым и третьим Питоном есть небольшая разница. В настоящее время поддержка Питон 2 прекращена.
Основные особенности языка
Питон характеризуется ясным синтаксисом . Читать код на нём легче, чем на других языках программирования, потому что в Питоне мало используются такие вспомогательные элементы, как скобки, точки с запятыми. С другой стороны, правила языка заставляют программистов делать отступы для обозначения вложенных конструкций. Понятно что это удобно - хорошо оформленный текст с малым количеством отвлекающих элементов читать и понимать легче. Я Вам рекомендовал бы так - же делать и в других языках Программирования (например Паскаль 7).
Интерпретаторы Питон 3 распространяются свободно на основе лицензии подобной GNU General Public License.
Дзен Питона
Если интерпретатору Питона дать команду
import this
То выводится так называемый “Дзен Питона” - иллюстрирующий идеологию и особенности данного языка. Понимание смысла этих постулатов в приложении к программированию придёт тогда, когда Вы в полной мере освоите язык программирования и придёте к приобретенному опыту практического программирования.
1 Красивое лучше уродливого.
2 Явное лучше неявного.
3 Простое лучше сложного.
4 Сложное лучше усложненного.
5 Плоское лучше вложенного.
6 Разреженное лучше плотного.
7 Удобочитаемость важна.
8 Частные случаи не настолько важны, чтобы нарушать правила.
9 Однако практичность важнее чистоты.
10 Ошибки никогда не должны замалчиваться.
11 За исключением замалчивания, которое задано явно.
12 Перед лицом неоднозначности сопротивляйтесь желанию угадать.
13 Должен существовать только один и желательно один способ сделать это.
14 Хотя он может с первого взгляда не очевиден, если ты не голландец.
15 Сейчас лучше чем никогда.
16 Однако никогда - чаще лучше, чем прямо сейчас.
17 Если реализацию сложно объяснить то это - плохая идея.
18 Если реализацию легко объяснить , то это может быть очень хорошая идея.
19 Пространства Имён - прекрасная идея, давайте делать их больше…
Типы данных. Переменные
В реальной жизни мы совершаем различные действия над окружающими нас предметами, или объектами. Мы меняем их свойства, наделяем новыми функциями. По аналогии с этим компьютерные программы также управляют объектами, только виртуальными, цифровыми. Пока не дойдем до уровня объектно-ориентированного программирования , будем называть такие объекты данными.
Очевидно, данные бывают разными. Часто компьютерной программе приходится работать с числами и строками. Так на прошлой теме мы работали с числами, выполняя над ними арифметические операции. Операция сложения выполняла изменение первого числа на величину второго, а умножение увеличивало одно число в количество раз, соответствующее второму.
Числа в свою очередь бывают разными: целыми, вещественными, могут иметь огромное значение или очень длинную дробную часть. При знакомстве с языком Питон мы в первую очередь столкнемся с тремя типами данных:
- целые числа (type() - int) - положительные и отрицательные целые числа, а также 0. (например 4,687,-42,0)
- Числа с плавающей точкой (float()) - дробные, они же вещественные числа. (например 1.45, -3.14, 0.00453). Примечание - для разделения целой и дробной частей здесь используется точка, а не запятая.
- Строки (тип str()) - набор символов, заключённых в кавычки (например “мяч”, “what is your name?”, ‘dpkg’, ‘0.004’). Причем отметим, что отдельного символьного типа в Питоне нет - одиночный символ в кавычках также является строкой, только длиной 1. len(‘a’)=1 , type(‘a’)==str. Примечание - кавычки в Питоне могут быть как одинарными, так и двойными.
Операции в программировании
Операция - это выполнение каких-либо действий над данными, которые в данном случае именуют операндами. Само действие выполняет оператор - специальный инструмент. Например : если бы вы выполняли операцию постройки стола, то вашими операндами были бы доска и гвозди, а оператором - молоток. (10+20 )
(операнд1 10 +(оператор) операнд2 20)
Так например в математике и программировании символ плюса является оператором сложения по отношению к числам, в то же время этот оператор + выполняет операцию конкатенации , т. е. склеивания в случае строк.
10+9
19
‘Hello’+World’
‘HelloWorld’
Здесь следует для себя отметить, что то, что делает оператор в операции , зависит не только от него , но и от типов данных, которыми он оперирует. Например молоток в случае нападения на нас крокодила - перестает играть роль строительного инструмента, а превращается в оружие… Однако в большинстве случаев операторы не универсальны - например знак плюса неприменим , если операндами являются с одной стороны число, а с другой стороны строка.
Тогда: возникает исключение TypeError: unsupported operand type(s) for +: int and str интерпретатор сообщит что произошла недопустимая операция склеивания разных типов данных.
Изменение типов данных
Приведенную выше операцию всё-таки можно совершить, если привести данные к одному типу:
‘s’+str(3)
‘s3’
Поскольку мы пока работаем только с тремя типами данных (int(), str(), float()) то рассмотрим вызовы соответствующих функций:
int(‘3’)+4
7
float(‘3.2’)+int(‘2’)
5.2
str(4)+str(1.2)
‘41.2’
Числовые переменные
Самым простым и важным видом переменных являются числовые переменные. Они допускают хорошее наглядное представление , которым пользуются все профессиональные программисты: числовая переменная - это “коробочка” , в которую можно положить на хранение какое-либо число.
Чтобы различать переменные, им дают имена. У каждой переменной есть имя и текущее значение. В дальнейшем будем предполагать, что компьютер уже обучен нижеследующим действиям со значениями переменных:
на русском языке
на английском языке
запросить значение переменной Х с клавиатуры
x = input(“x=”)
вычислить значение Х
x=function()
напечатать значение Х
print(x)
если значение переменной Х удовлетворяет условию, то…
if (x<=0):
[Tab] print(x)
При вычислении значений переменных будем использовать следующие обозначения: сложение =a+b, вычитание -, умножение *, деление /, целочисленное деление //, возведение в степень **, извлечение квадратного корня х**(0.5), синус sin(x), косинус cos(x), целая часть числа int(x), абсолютная часть числа abs(x), случайные числа - библиотека import random.
Эти действия в Питоне называются операторами и функциями. В Питоне их много, с некоторыми остальными мы познакомимся позднее. Также будем полагать , что перед началом вычислений при выполнении программы всем значениям переменных присваивается нулевая величина (если конечно в условии задачи конкретно не указано, какое значение нужно ввести).
Каждый программист
Работа программы во многом определяется ходом изменения значений её переменных.
Поэтому каждый программист стремится как можно более точно предвидеть характер этого изменения: на умении делать трассировку ( пошаговое выполнение) , и точно прослеживать порядок значений переменных базируется мастерство составления программ.
В качестве тренировки разберем следующую задачу:
Какое значение будет иметь переменная х после 5го цикла выполнения программы?
#программа
x=0
y=0
z=0
i=0
while (i<5):
[Tab] x=x+y+z+1
[Tab] y=x+y+z+1
[Tab] z=x+y+z+1
[Tab] i=i+1
print(x,y,z)
Проверьте правильность своих рассуждений, запустив программу на выполнение…
Доктор Шибкин
Доктор Шибкин был человеком чрезвычайно рассеянным и частенько допускал оплошности. Но как ни странно , именно это приводило его порой к самым разным маленьким открытиям.
Так , читая предыдущий пункт книги , он проскочил глазами само задание и подумал, что нужно найти решение системы уравнений:
X=Х+Y+Z+1,
Y=X+Y+Z+1,
Z=X+Y+Z+1
что он и сделал мгновенно в уме: из одинаковости правых частей очевидно, что X=Y=Z, откуда: X=Y=Z=-½.
Когда же он собрался сверить ответ, то понял, что в задании речь идёт не о системе уравнений, а о программе для компьютера. Выполнив задание правильно, профессор с изумлением заметил: “Между двумя решениями нет ничего общего!”. С тех пор доктор Шибкин проникся идеей, что смысл математических и программных обозначений, при всей их схожести , - совершенно различный.
Таблица квадратов
Задача:
Составить программу , - печатающую таблицу квадратов целых чисел.
Решение:
Если значение переменной N будет пробегать натуральный ряд 0, 1, 2, 3, …, N то переменная X=N*N даст квадрат N. Печатая значение N и X и зациклив программу , имеем:
#программа 2
N=0
while (N<21):
[Tab] X=N*N
[Tab] print(N, X)
[Tab] N=N+1
print(“End”)
Степени числа 2
Задача:
Аналогично таблице квадратов можно составить программу, печатающую числа 2**n: N=N+1; X=2**N. Однако это можно сделать проще, если заметить что степень числа 2 - представляет собой произведение двоек столько раз, каков показатель степени.
Решение:
Если значение переменной N будет пробегать ряд чисел от 1 до 21, то переменная X=1 в первом шаге, и затем X=X*2 в последующих шагах программы даст нам значение степени числа 2. Печатая значение N и X имеем:
#программа 3
N=1
X=1
while (N<21):
[Tab] X=X*2
[Tab] print(N, X)
[Tab] N=N+1
print(“End”)
Такой способ вычислений очень рационален. Чтобы лучше это понять, вычислим первые шесть значений 2^n вручную:
2*1=2
2*2=4
4*2=8
8*2=16
16*2=32
32*2=64
Т.е. вместо того, чтобы каждый раз перемножать n двоек, лучше один раз умножить на 2 предыдущее значение: 2^n=2*2^(n-1).
Такой способ задания числовых последовательностей, когда следующие элементы определяются через значения предыдущих, называется возвратным или рекуррентным.
Для себя его можно переформулировать в виде правила рекурсии: чтобы двигаться вперёд - смотри назад!
Метод Крамера - это метод численного интегрирования, который используется для решения систем линейных уравнений. Он основан на разбиении системы на более простые подсистемы и последовательном решении каждой из них методом Крамера.
Вот пример кода на Python 3, который реализует метод Крамера для решения системы уравнений:
import numpy
from scipy import integrate
# Задаем систему уравнений
x1 = numpy.array(1, 2)
y1 = numpy.array(3, 4)
z1 = numpy.array(5, 6)
# Вычисляем значения функции f(x)
def f(x1,y1,z1):
[Tab] x=numpy.sin(x1)+numpy.cos(x1)*numpy.sin(y1)*numpy.cos(z1)
[Tab] return x
# Разбиваем систему на подсистемы
subsystems =[]
for i in range(len(x1)):
[Tab] subsystems.append((x1[i], y1[i], z1[i]))
# Решаем каждую подсистему методом Крамера
result = integrate.odeint(f(x1,y1,z1), subsystems, full_output=True)
# Выводим результаты
print("Решение системы уравнений методом Крамера:")
for i in range(len(result)):
[Tab] print(result[i], ‘number=’,i)
print(‘End’)
В этом примере мы используем библиотеку `scipy` для выполнения метода.
Список использованной Литературы:
- Филичев “Занимательный Basic”
- Л.Л.Босова А.Ю.Босова “Информатика”
- Брайсон Пейн “Питон для детей и их родителей”
- Википедия “Онлайн Энциклопедия”
- https://younglinux.info/python/variable