Я многое уже написал о переменных, функциях в Python. Но меня не покидает мысль, что чего-то не хватает. В прошлой публикации не изложил какую-то суть.
Просто, как в той восточной истории, в которой мудрец написал 1000 томов умных книг, но его терзала мысль:
я не выразил главную идею. Чего-то не хватает
Грустил он, печалился. Приходит к нему бог и говорит:
что печалишься старче?
Поведал мудрец причину своей печали. На что всевышний ответил:
Твоя печаль в том, что ты в своих рукописях не добавил меня
Так и я смотрю на программу из прошлой части и думаю: «для человека далекого от программирования – это просто бессмысленный набор символов». Тогда я задался вопросом, что придаёт чему-то смысл? Наверно, какая-то базовая единица. Например, для предложения смысловой единицей служит слово, для слова – буква и.д. Базовая единица – это то, без чего смысла быть не может. А в следующем коде, где смысл?
Для ответа на этот вопрос, подумай уважаемый читатель, без чего эта программа превратится в бессмыслицу? Конечно без «данных». Программа создается для обработки «данных» - информации. Приведенный код выполняет простые действия
- Просматривает содержимое директории «d:/12»
- Ищет файлы с расширением mp3
- Воспроизводит выбранный мной файл.
По сути, если я хочу послушать «клёвую» музыку мозг наверно выполняет тот же код. Сначала я открываю папку с музыкой, через орган зрения в мозговые клетки передается список файлов из папки, затем щелкаю мышкой по любимому музыкальному произведению и наслаждаюсь музыкой. Но чтобы этим процессом наслаждаться должны быть какие-то исходные данные: я должен знать имя открываемой папки, должен знать алфавит, чтобы это имя прочитать и должен иметь представления - как вообще пользоваться компьютером. Со школьной скамьи нам уже вливают исходные данные, а потом на протяжении всего периода обучения учат, как обрабатывать их. Я могу писать эти строки, потому что знаю алфавит, но сам алфавит без понимания как из него получать слова, а из слов предложения бесполезен.
Точно также я поступаю при написании кода:
- Определяю исходные данные
- Описываю, как эти данные обрабатывать
- Получаю ожидаемый результат.
И чтобы понимать идею, заложенную в коде, необходимо выделить в нем эти три составляющие.
Исходные данные:
- musik_PLAY_dir = "d:/12"
- file_music =input("Что желаете послушать? ")
Путь к директории с музыкой и некоторое число, которое я введу с клавиатуры и есть исходные данные в коде.
Переменные
Исходные данные я помещаю в переменные musik_PLAY_dir, file_music. Переменные можете представить как некоторый объект, в который помещено какое-то значение. Причём это значение может изменяться. Представить переменные проще на «житейском примере». Вы пошли в магазин за продуктами. Какой главный критерий ваших покупок? Конечно цена продуктов и сколько денег в кармане. И как вы знаете, цены растут гораздо быстрее, чем карман с деньгами. Таким образом «цена» и «деньги в кармане» просто переменные, постоянно меняющие свои значения. В коде и я задал переменные musik_PLAY_dir, file_music и присвоил им какие-то значения. Имена этих переменных я выбрал произвольно, мог бы записать
a = "d:/12"
b =input("Что желаете послушать? ")
Но предпочитаю использовать более понятные имена для переменных.
Функции
В функциях, я описываю действия (обработку), которые нужно выполнить с данными, чтобы получить результат. В Python функции описываются после слова def. Слово def - это ключевое слово, увидев его, Python понимает - я хочу описать действия с данными. Аналогично наверно работает и наше сознание. Например, в том же магазине. Я купил продукты на 550 руб., 200 руб., 300 руб. в кармане всего 1000 руб. И в сознание из внешнего мира перетекают исходные данные – цена и «наличка», которая у меня есть. Дальше я спрашиваю у мозга: хватит мне оплатить продукты или нет? Мозг в ответ запускает функцию сложения и сравнения 550 руб. + 200 руб., + 300 руб.>1000. Похоже, покупка отменяется.
Отмечу, что функция запускается в тот момент, когда она необходима. Если мне нужно сложить два числа, запускается функция сложения, а постоянно я же не держу в голове таблицу сложения. Так и в коде я описываю функцию, но она не активна, пока я не вызову ее по имени. Как здесь в коде, я вызываю две функции:
os.startfile(play_musik(int(file_musik)-1)) - эта функция запускает программу, в качестве её аргумента указываю путь к файлу — play_musik(int(file_musik)-1).
play_musik это тоже функция, которую я описал в программе. Единственное действие этой функции получить путь к файлу, который хочу запустить. Для большего понимания упрощу функцию
os.startfile(play_musik(int(file_musik)-1)).
И запишу функцию таким образом -
os.startfile(Путь к файлу)
- Путь к файлу = play_musik(Номер файла)
- Номер файла = int(file_musik)-1
Чтобы в сознании уяснить идею кода, нужно спросить себя: где тут исходные данные? Переменная file_musik принимает значение, вводимое мной с клавиатуры. Например, я ввел с клавиатуры «1», тогда file_musik=1 и
Номер файла = int(«1»)-1
Типы данных
Типы данных мы классифицируем интуитивно на фотографии, числа, строки и графики — всё это данные, только разных типов. Python тоже интуитивно определяет тип данных. Например, я запишу команду:
a=5, тогда Python переменную «a» воспримет как числовой тип данных, а если напишу b= «5», то Python отнесет переменную «b» к строковому типу данных. Любой набор символов для python заключенный в кавычки - это строка. А что будет, если к «a» прибавить «b»? Выйдет ошибка, потому что Python не знает, как к строке прибавить число. Но если, я запишу:
int(b)+a,
то получу ответ — 10. Функция int(строка) служит для преобразования строки в целое число. Т.е. после применения int(b), «b» становится целым числом и я могу прибавить его к «a». функция обратная int (строка) — str(число). Т.е. если я запишу
b+str(a),
то получу ответ - «55», т. к. сложение двух строк для Python это их слияние. Поэтому, чтобы избежать ошибок не соответствия типов данных нужно чётко представлять с какими данными вы работает. Например, если бы строчку
номер файла = int(«1»)-1
я записал без int(), в ответ получил бы ошибку не соответствия типов, потому что «1» строка, а 1 — число и так делать нельзя
«1»-1.
Теперь вы легко можете сказать, что результатом выполнения операции int(«1»)-1 будет ноль, т.е.
Номер файла = int(«1»)-1=0
Соберу по крупицам «упрощение» функции
os.startfile(play_musik(int(file_musik)-1))=>=>
=>=> os.startfile(play_musik(0)).
Но перед тем, как запустить файл, Python переходит к функции play_musik(0) и вычисляет ее значение.
На этом пока все. Продолжу описание в следующей статье. Так как описываю код довольно подробно, весь текст не умещается в одной публикации. А подробность нужна, чтобы читатель чувствовал себя уверенным в программном коде Python. Эта уверенность позволяет творить с кодом все, что угодно, не думая, как он устроен. А чтобы погружение в Python-код было легким, я создал телеграмм канал, на канале буду размещать задания к публикациям. Разделю теорию и практику, и добавлю администратором телеграмм-канала Розалию. В дальнейшем я покажу, как создавать телеграмм-ботов и связывать их с кодом на Python.
Не переключайтесь, самое интересное еще впереди.
Телеграм канал<<здесь