Сообщество - Программирование на python

Программирование на python

115 постов 4 205 подписчиков
23

Решаем простые задачи на Python

Все решение на сегодняшние задачи будет ЗДЕСЬ

Я решил чуть-чуть отвлечься от обучения вас PyQt, углублением в ООП и магическими методами. Я подумал, что не все на таком уровне познании python как я, так что сегодня мы порешаем простые задачи на python.

Начнем с простой задачи на палиндром.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

#1 Запись input_string[::-1] означает, что мы переворачиваем строку. Например если мы ввели привет, то при применение [::-1] получим тевирп.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

#2

reversed() - переворачивает слово и возвращает список.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

Переходим к следующей задаче, она часто задается в школе учителем информатике.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

#1

В этом случае мы в цикле пробегаемся по строке, превращаем каждый символ строки в число и суммируем их.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

#2

Выдергиваем каждый символ из строки и превращаем его в число и суммируем.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

Переходим к тяжелой артиллерии.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

#1

считаем четные дни days_odd, days_even считаем нечетные дни. Далее проверяем, что четных дней больше чем нечетных и выводим в зависимости от этого YES или NO. В последней строке мы разделяем четные, нечетные дни и (YES или NO) пробелами.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

Решаем последнюю задачу.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост

#1

Во первых мы преобразуем строку в числа ( input().split() - разбивает строку и превращает её в список). Далее находим сумму всех чисел > 0. Потом идет проверка меньшее число стоит перед большим или после большего. После идет цикл, с помощью которого мы считаем произведение чисел от меньшего к большему или от большего к меньшему.

Решаем простые задачи на Python Python, Задача, Программирование, IT, Длиннопост
Показать полностью 5
26

Основные магические методы в python

Пора в python изучить magic и создать классы с магическими методами. С вводной частью вы можете ознакомиться ЗДЕСЬ.

В прошлом посте мы разобрались с методами __new__ и __init__.

Далее разберемся с методом __del__.

__del__ - метод, который срабатывает при удалении объекта.
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост

Когда мы вызываем удаление man_1, то нам выводится на экран сообщение и имя человека удаляется, если мы попробуем, после удаление, вывести имя в консоль, то получим ошибку.

Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост

Также есть базовые методы, такие как ==, !=, >= и т.д.

__eq__(self, other) - Определяет поведение оператора равенства, ==.
__ne__(self, other) - Определяет поведение оператора неравенства, !=.
__lt__(self, other) - Определяет поведение оператора меньше, <.
__gt__(self, other) - Определяет поведение оператора больше, >.
__le__(self, other) - Определяет поведение оператора меньше или равно, <=.
__ge__(self, other) - Определяет поведение оператора больше или равно, >=.

Напишем класс Number, который будет принимать число и напишем два метода __eq__ и __gt__ для сравнения.

Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост

В Python есть унарные операторы.

__pos__(self) - Определяет поведение для унарного плюса (+some_object)
__neg__(self) - Определяет поведение для отрицания(-some_object)
__abs__(self) - Определяет поведение для встроенной функции abs().
__invert__(self) - Определяет поведение для инвертирования оператором ~. Для объяснения что он делает смотри статью в Википедии о бинарных операторах.
__round__(self, n) - Определяет поведение для встроенной функции round(). n это число знаков после запятой, до которого округлить.
__floor__(self) - Определяет поведение для math.floor(), то есть, округления до ближайшего меньшего целого.
__ceil__(self) - Определяет поведение для math.ceil(), то есть, округления до ближайшего большего целого.
__trunc__(self) - Определяет поведение для math.trunc(), то есть, обрезания до целого.
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост

Также есть обычные арифметические операторы, +, - ит

__add__(self, other) - Сложение.
__sub__(self, other) - Вычитание.
__mul__(self, other) - Умножение.
__floordiv__(self, other) - Целочисленное деление, оператор //.
__div__(self, other) - Деление, оператор /.
__truediv__(self, other) - Правильное деление. Заметьте, что это работает только когда используется from __future__ import division.
__mod__(self, other) - Остаток от деления, оператор %.
__divmod__(self, other) - Определяет поведение для встроенной функции divmod().
__pow__ - Возведение в степень, оператор **.
__lshift__(self, other) - Двоичный сдвиг влево, оператор <<.
__rshift__(self, other) - Двоичный сдвиг вправо, оператор >>.
__and__(self, other) - Двоичное И, оператор &.
__or__(self, other) - Двоичное ИЛИ, оператор |.
__xor__(self, other) - Двоичный xor, оператор ^.

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

Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост

Есть также деление, умножение, сложение и т.д. с присваиванием.

__iadd__(self, other) - Сложение с присваиванием.
__isub__(self, other) - Вычитание с присваиванием.
__imul__(self, other) - Умножение с присваиванием.
__ifloordiv__(self, other) - Целочисленное деление с присваиванием, оператор //=.
__idiv__(self, other) - Деление с присваиванием, оператор /=.
__itruediv__(self, other) - Правильное деление с присваиванием. Заметьте, что работает только если используется from __future__ import division.
__imod_(self, other) - Остаток от деления с присваиванием, оператор %=.
__ipow__ - Возведение в степерь с присваиванием, оператор **=.
__ilshift__(self, other) - Двоичный сдвиг влево с присваиванием, оператор <<=.
__irshift__(self, other) - Двоичный сдвиг вправо с присваиванием, оператор >>=.
__iand__(self, other) - Двоичное И с присваиванием, оператор &=.
__ior__(self, other) - Двоичное ИЛИ с присваиванием, оператор |=.
__ixor__(self, other) - Двоичный xor с присваиванием, оператор ^=.
Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост

Можно написать класс Point, принимающий имя точки, координаты по x  и y, и  при обращение к нему выводит информацию о себе, также пару методов, которые показывали бы координаты точек.

Основные магические методы в python Python, Метод, Программирование, IT, Питон, Длиннопост
Весь код, написанный с вами будет ЗДЕСЬ.
Показать полностью 8
16

Основы ООП в Python

Я решил рассказать вам немного про ООП в python. В этом посте мы познакомимся с основными терминами( в этом посте мы рассмотрим инкапсуляцию и полиморфизм ), понятиями и рассмотрим простые задачи на закрепление.

(Объектно-ориентированное программирование) ООП - совокупность понятий и идей программирования, в рамках которой «во главу угла» ставят понятия объектов и классов.

Класс – это описание еще не созданного объекта.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

Объект или экземпляр класса – то, что инициализировано по описанию из класса. Объект имеет описание, структуру и поведение класса.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

Инкапсуляция – это объединение данных и функций в единый компонент.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

В python можно создать приватные и публичные методы класса. Если мы захотим к объекту применить приватный метод, то программа обматерит нас ошибкой AttributeError.

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

Например есть базовый класс машина, от которого наследуются все остальные модели машин.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

Множественное наследование (MRO). Если язык поддерживает множественное наследование, то значит у класса может быть больше одного родителя.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

Класс будет инициализироваться от класса Car, потому что он первый родитель, но все методы будут действовать как от класса Car, так и от класса Motorcycle.

Дандеры - двойные символы подчеркивания.( __init__ )
Одинарный символ подчеркивания перед именем метода. Переменная или метод, начинающиеся с одинарного символа подчеркивания, предназначаются для внутреннего пользования.
Символ подчеркивания в конце ставят в том случаем, если переменная с выбранным именем уже существует.

Магические методы.

object.__new__(cls[,...]) - Вызывается при создании нового экземпляра класса. Первый аргумент – класс, объект которого создается. Остальные аргументы передаются в конструктор класса.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост
Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост
object.__call__(self[, args...]) - метод, который выполняется когда объект вызывают как функцию.
Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост
Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

А теперь задачка.

Основы ООП в Python Python, Ооп, Программирование, IT, Длиннопост

Мое решение можете посмотреть ЗДЕСЬ.

Домашние задание:
Добавьте мерседес и ауди.
Сделайте метод, который позволяет посмотреть купленные машины и считает их суммарную стоимость.
Показать полностью 8
1428

Бесплатно помогаем учить python: пробуем Data Science

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


Итак, во-первых, мы нашли три вводных абсолютно бесплатных курса по python:

https://pythontutor.ru/ - базовый курс для начинающих с кучей задачек.

https://stepik.org/67 - базовый курс программирования на Python (отличное дополнение к pythontutor.ru)

https://stepik.org/512 - более продвинутый (но всё ещё базовый) курс по Python.

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


Во-вторых, мы составили треки обучения:

* Data Science

* Тестирование

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


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

https://openedu.ru/course/hse/INTRML/ - вводный курс в машинное обучение.

https://openedu.ru/course/urfu/PYDNN/ - вводный курс по нейронным сетям.

https://openedu.ru/course/hse/TEXT/ - курс по обработке естественного языка.

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


На данный момент в нашей группе вк чуть больше трёх тысяч человек. Пока что мы не смогли составить трек бесплатных курсов по web-development (с Flask, Django), но мы очень надеемся, что в будущем это получится, и мы тоже сможем пройти вместе курсы по web-разработке.


Все материалы, курсы и наша помощь абсолютно бесплатны.


Наша группа вк: https://vk.com/learnpythonforfun

49

Создаем планировщик на PyQt

Это второй пост по PyQt, Если вы хотите легче вникнуть в происходящие, то можете посмотреть первый пост.
Также весь код находится на моем GitHub

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

Создаем планировщик на PyQt Python, Qt, Длиннопост

Для начало установим и откроем откроем редактор Qt Designer.

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

Создаем планировщик на PyQt Python, Qt, Длиннопост

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

Далее нажимаем кнопку "Создать". После нажатия мы увидим большое пустое окно с меню.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Меню нам сейчас не понадобится, значит надо его удалить! Кликаем правой кнопкой мыши на белое пространство и выбираем пункт "Удалить панель меню"

Создаем планировщик на PyQt Python, Qt, Длиннопост

Добавим календарь ( самый главный элемент в нашем приложении ). Виджет называется Сalendar Widget.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Сейчас будем добавлять кнопку, поле для просмотра задач, а также добавим виджет Time Edit.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Дизайн почти готов, осталось сделать форму адаптивной и нормально разместить элементы.

Перетащим Vertical Layout в окно и на Vertical Layout перетащим Text Browser и кнопку.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Также добавим Line Edit.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Далее находим в инспекторе объектов centralwidget и компонуем объекты в грид сетку.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Далее сохраняем нашу форму в папке calendar ( папка, как и сам файл можно называть по разному ).

Создаем планировщик на PyQt Python, Qt, Длиннопост

Дело за малым. Нам осталось написать само добавление задач.

Открываем папку с проектом и в консоль вводим магическую команду, которая превратит ваш ui файл в python файл. После -x идет название вашего ui файла, а после -o идет название python файла, в который вы хотите поместить ui компоненты.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Если вы все правильно сделали, то у вас должен появиться новый файл, если вы его запустите, то должно появиться то окно, которое мы делали с вами в редакторе.

Создаем планировщик на PyQt Python, Qt, Длиннопост

Но мы не будем писать код нашей программы в этом файле ( это считается плохой практикой ). Вместо этого мы создадим новый файл, в который запихнем наш qt.py

Создаем планировщик на PyQt Python, Qt, Длиннопост

Далее мы создадим словарь для легкой фильтрации. После чего наш initUi будет выглядеть так.

Создаем планировщик на PyQt Python, Qt, Длиннопост

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

Создаем планировщик на PyQt Python, Qt, Длиннопост

Если вы запустите свою программу она должна работать.

Дз:
1. Поменять фон
2. Поменять цвет кнопки
3. отправить изменения мне на GitHub для проверки.

Ссылка на все файлы - https://github.com/l-arkadiy-l/PYQT-EXAMPLES/tree/main/lessons/calendar

Показать полностью 14
42

Как научиться писать на PyQt?

Приветствую падаван. Сегодня я тебе поведую как легко написать свою первую программу на PyQT.

Что нам для этого понадобиться?
1.Python
2.PyQt
3.Огромное желание

Первая команда в терминале!

pip install PyQt5


После того, как у вас успешно (я на это надеюсь) установился и питон и PyQt, мы можем продолжить работу над нашим первым приложением.

Забыл упомянуть, что приложения на pyqt будут работать как на Mac, так и на Windows, и на Линуксе тоже ничего не будет ломаться.


Начинаем!

Для начало сделаем импорт sys, а также QApplication, QLabel и QMainWindow

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

В PyQt.Widgets хранятся все кнопочки, стрелочки, поля ввода и т.д.

QApplication — наше приложение.Если не будет этого компонента приложение не заработает.
QLabel — это надпись, скоро мы добавим её в наше приложение. Круто, не правда ли?
QMainWindow — главное окно нашего приложение (аналог QWidget, но окон типа QWidget может быть 10 и более в программе, а QMainWindow только одно)

Теперь создадим класс и запустим наше приложение.

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

Мы создали класс Example, он наследуется от нашего QMainWindow, который инициализируется с помощью super().__init__()

Далее мы просто запускаем приложение и показываем его методом show()

Вот что у нас получилось!

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

Выглядит скучновато? Сейчас исправим!

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

Уху, это успех. Мы вставили первый текст. А вот и код! Он легкий и я сделал в коде комментарии, так что не буду отдельно останавливаться на каждой запятой.

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

«Это конечно хорошо» — скажите вы мне — "а где кнопки?".

Ок, сейчас мы сделаем кнопку!

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

Хотя наша кнопка пока ничего не умеет, но программа обрела новые краски. Пользователям стало чем заняться!

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

В начале программы сделаем импорт choice.

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

А вот код самой кнопки.

Как научиться писать на PyQt? Python, Qt, Qt5, Программирование, Программист, Длиннопост

self.btn.clicked.connect(self.text_shuffle) — событие при клике кнопки.
self.btn.adjustSize() — весь текст кнопки будет вмещаться и не будет вылезать за края.

Весь код с комментариями вы можете посмотреть на моем GitHub

Показать полностью 6
15

Текстовый редактор на PyQt

Первая статься про pyqt - Как научиться писать на PyQt?
Вторая статья про pyqt - Создаем планировщик на PyQt
Весь код вы можете посмотреть на моем GitHub

В этой статье мы будем разбираться как работать с файлами, как их открывать, редактировать, сохранять, создавать. Сделаем поле ввода, поле для просмотра текста в файле, сделаем так, чтобы можно было сохранить, создать или открыть файл.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Начнем по традиции с дизайна нашего приложения.

Перетащим Line Edit, Label и Plain Text Edit.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост
Label - текст
Line Edit - строка, в которой можно писать текст ( мы её будем использовать для ввода файла )
Plain Text Edit -  поле для отображения и изменения текста ( мы в нем будем отображать текст файла )

Далее перетащим сетку grid и кнопки.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Затем переместим кнопки в сетку ( это делается перетаскиванием кнопок в красный квадрат ).

После этих манипуляций у нас должно получиться что-то похожее на такое.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Сейчас это выглядит как недоваренная колбаса, но сейчас мы все исправим.

Далее расположите элементы как это будет показано на картинке, найдите centralwidget и сделайте из него сетку.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

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

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Чуть-чуть поиграемся со шрифтами ( я использую размер текста 11, а шрифт Segoe Script )

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Если растянуть окно, то будет увеличиваться только Plain Text Edit . Это выглядит не красиво.

Для того, чтобы это исправить найдите свойство sizePolicy и измените значение расположение по вертикале на Expanding

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Я порекомендую также изменить размер текста в Plain Text Edit и Line Edit.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

И наконец сделаем так, чтобы при вводе текста в Line Edit текст форматировался не по левому краю, а по центру. Выделите Line Edit и найдите свойство alignment, измените значение выравнивания по горизонтали на AlignHCenter.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Сохраняем наш проект и переходим к написанию кода. Сначала переведем наш ui файл в python.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Первым делом напишем код для открытие файла.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост
with open(file) as f - дает нам переменную f - это и есть сам файл, мы можем читать файл, изменять его и т.д. В данном контексте мы его читаем при помощи метода read()

При помощи try и except мы ловим исключения.

Напишем функцию для сохранения файла.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост
f.write() - заносим в файл текст, введенный в plainTextEdit

После этого создадим кнопку для создания файла.

Текстовый редактор на PyQt Python, Qt, Приложение, Программирование, Длиннопост

Теперь можете проверять работу приложения.

Весь написанный код можете посмотреть ЗДЕСЬ
Показать полностью 12
15

Умное видеонаблюдение за собственным авто на парковке возле дома

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

Вводные данные: 4 этаж, парковка начинается в 5 метрах от дома. Постоянного местя нет, где пусто там и паркуюсь, в результате до авто может быть от 5 до 40 метров.


Почитав форумы, и получил не менее банальный ответ:

1. камера с широким углом обзора увидит всю парковку, но без деталей (лица и номера), толку от такого наблюдения немного

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

3. взять PTZ камеру с вариофокальным объективом и направлять ее на авто после парковки, но по закону подлости в нужный день забудешь направить


Грустно, в общем. Почесал репу, вспомнил что я немного программист, и родил такую идею:

1. Купить на али IP PTZ камеру с варио объективом и поддержкой ONVIF

2. Написать на питоне приложение, которое будет крутить камеру и искать авто, а когда найдет то "наведется" на него и начнет снимать постоянно или по движению

3. Запустить все это на малинке


Как крутить камерой на питоне вроде понятно, onvif клиент есть https://pypi.org/project/onvif/

Как найти авто? Например наклеить на крышу qr код, и распознавать его на видео с помощью OpenCV. Например так как написано здесь


Вопросы:

1. Не изобретаю ли я велосипед? Может все это уже давно реализовано?

2. С питоном немного знаком, а вот с onvif и OpenCV не знаком совсем. Насколько реально в принципе реализовать эту задачу? Потянет ли малинка?

Мои подписки
Подписывайтесь на интересные вам теги, сообщества,
пользователей — и читайте персональное «Горячее».
Чтобы добавить подписку, нужно авторизоваться.
Отличная работа, все прочитано!