Python — идеальный инструмент для любой проблемы

NOP
NOP::Nuances of Programming
3 min readJul 28, 2018

Перевод статьи William Koehrsen: Python is the Perfect Tool for any Problem

Размышления о моей первой программе на Python.

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

Моё изучение Python началось с книги “Автоматизация рутинных задач с помощью Python” (в оригинале “Automate the Boring Stuff with Python”) Эла Свейгарта. Великолепная приложение-ориентированная книга с простыми программами, которые делают полезные вещи. Когда я изучаю что-то новое, я ищу любой шанс использовать новые знания, поэтому я хотел найти проблему для решения её с помощью Python. Такой проблемой стал учебник для класса, который стоил 200 долларов. Мой персональный лимит для учебника около 20 долларов(“Автоматизация рутинных задач с помощью Python” бесплатна в онлайне), поэтому я отказался даже арендовать эту книгу. Отчаявшись получить книгу к своему первому занятию, я заметил, что её можно получить в свободное пользование на неделю через Amazon, сделав новый аккаунт. Я получил книгу на одну неделю и смог выполнить своё первое учебное занятие. И пока я продолжал создавать новые аккаунты каждую неделю, я понимал, что мне нужно решение получше. Именно так я и решил создать своё первое приложение на Python.

Одной из многих полезных библиотек, описанных в “Автоматизация рутинных задач с помощью Python”, являлась PyAutoGUI, которая позволяет контролировать мышь и клавиатуру через Python. Как говорится, “когда у тебя есть молоток, то каждая проблема выглядит как гвоздь”, и это было идеальное описание моей ситуации. Python и PyAutoGUI позволили мне нажимать стрелки на клавиатуре и делать скриншоты, и я использовал обе эти возможности чтобы решить свою книжную проблему. Я написал свою первую программу, чтобы автоматически пролистать каждую страницу книги и сделать скриншот. В программе всего 10 строк кода, но я горжусь ими настолько же, насколько горжусь всем, что я сделал в аэрокосмической технике. Далее пример всего кода, что я написал:

import pyautogui
import time
# Sleep for 5 seconds to allow me to open book
time.sleep(5)
# Range can be changed depending on the number of pages
for i in range(1000):
# Turn page
pyautogui.keyDown('right')
pyautogui.keyUp('right')
# Take and save a screenshot
pyautogui.screenshot('images/page_%d.pdf' % i)
time.sleep(0.05)

Запустить программу очень просто(и я настаиваю каждому попробовать). Я сохранил скрипт как book_screenshot.py, затем переместился в командой строке в ту же директорию, где лежит этот файл, и ввёл:

python book_screenshot.py

После запуска у меня есть 5 секунд, чтобы развернуть книгу в полный экран. Программа же сделает всё остальное, пролистав каждую страницу и сделав скриншот, который сохранится в pdf. После я смогу объединить все pdf-файлы в один и получить(сомнительно легальную) полноценную копию книги! Правда, копия ужасная, ведь через скриншоты нельзя сделать поиск по тексту, но для меня это было не так важно.

Это демонстрирует две главные мысли, которые остались со мной на протяжении всего моего обучения:

  • Лучший способ что-то изучать — это найти проблему, которую ты сможешь решить с помощью нового навыка.
  • Не нужно обладать навыком в совершенстве, чтобы использовать его.

Всего с парой строк кода и бесплатной книгой я смог написать программу, которая по-настоящему полезна. Учить базовые вещи может быть скучно и мои первые попытки учить Python потерпели крах спустя пару часов, когда я читал про структуры данных и циклы. Сменив тактику, я начал создавать решения для реальных проблем и выучил фундаментальные знания параллельно. Программирование очень объёмно, но вам не нужно учить всё и сразу. Просто найдите проблему, которую вы бы хотели решить с помощью программирования и начните!

С тех пор я сделал ещё пару сложных программ, но до сих пор с любовью вспоминаю свой первый скрипт!

--

--