python 1000 7 код
Экспекто Питонум: 15 заклинаний на змеином языке
Короткие программы на Python — первый шаг к реальной магии кода.
Веб-разработка и научные вычисления, роботы и Data Science — Python повсюду. На нём пишут и масштабные проекты, и короткие программы (скрипты, или сниппеты), полезные в повседневных рабочих и учебных задачах.
Собрали для вас коллекцию таких небольших «заклинаний». Основной принцип: минимум строк кода, в котором можно разобраться максимум за полминуты. Сову из Хогвартса мы не гарантируем, но удивить однокашников, коллег и интервьюеров, уверены, у вас получится. Вперёд!
Внимание: устное произнесение заклинаний в текущей версии Python не поддерживается. Вам потребуется компьютер, интерпретатор и код.
С некоторых пор утверждает, что он data scientist. В предыдущих сезонах выдавал себя за математика, звукорежиссёра, радиоведущего, переводчика, писателя. Кандидат наук, но не точных. Бесстрашно пишет о Data Science и программировании на Python.
Анаграммус Ревелио: определение строк-анаграмм
Скрипт проверяет, являются ли две строки анаграммами друг друга. Иными словами, не получена ли одна строка перестановкой символов другой строки.
Используется Counter из библиотеки collections — это разновидность словаря, используемая для подсчёта элементов в итерируемых объектах: списках, кортежах, словарях, строках.
Подробнее об этой замечательной библиотеке читайте в нашей статье.
Мемориа Байтифай: размер объекта в байтах
Этот скрипт используется для измерения количества памяти, потребляемой любым объектом в Python: переменной, функцией, классом.
Обратите внимание, что учитывается только та память, которую занимает сам объект, а не те объекты, на которые он, возможно, ссылается. Размер памяти возвращается в байтах.
Лексиа Байтифай: длина строки в байтах
Метод для определения длины строки в байтах. Это не то же самое, что размер объекта из скрипта выше.
Байтовый размер объекта-строки в памяти всегда больше байтовой длины строки, поскольку объект-строка содержит и саму строку, и дополнительную информацию о ней — например, ссылки на методы строк.
Албум Диффиндо: нарезка списка
Этот код нарезает список на списки меньшего размера, которые собраны снова в список. Размер надо задать заранее.
Как видим, последний список получился короче: 4 элемента вместо 7. Проверьте, что будет, если размер нарезаемых списков задать больше, чем составляет длина начального списка.
В статье про списки вы узнаете чуть больше об этом полезном типе данных.
Албум Прессио: сжатие списка
Этот скрипт удаляет «ложные» значения ( False, None, 0 и пустую строку ‘ ‘) из списка. Используется встроенная функция filter(): c параметром None на первом месте она удалит из списка lst все значения, которые не вернут True по умолчанию.
Проверить вручную какое-либо значение на True/False можно с помощью функции bool(): bool(0) вернёт False, но bool(‘0’) уже будет True, так как это непустая строка.
Примеры использования функции filter () можно найти здесь.
Матрикус Транспозио: транспонирование матрицы
В простейшем случае двумерная матрица может быть задана списком из нескольких списков одинаковой длины, которые представляют собой строки матрицы. Если вам требуется «повернуть на 90 градусов» такую матрицу или превратить строки в столбцы (транспонировать, как говорят математики), то вот короткий код:
Обратите внимание, что в итоговом списке элементами (то есть строками новой матрицы) будут кортежи — так работает используемая здесь функция zip ().
Албум Планум: сделать список плоским
Ох уж эти списки, состоящие из списков. Как бы их сделать попроще, выстроить в один ряд? Для этого тоже есть решение.
В третьей строке код проверяет, не является ли элемент списком. Если да, то использует метод extend() для расширения этим элементом итогового списка, если нет — то присоединяет его как одиночный элемент методом append().
Также в этой строке функция вызывает сама себя и, в случае списков, состоящих из списков, «проваливается» в них до тех пор, пока не доберётся до элементов, не являющихся списками. Это называется рекурсией.
Дуплицио Ревелио: проверка на дубликаты
Этот простой скрипт проверяет, содержатся ли в списке повторяющиеся значения (дубликаты). Используется свойство множеств set, которые могут содержать только уникальные элементы.
Вместо списков могут быть и кортежи, и словари. В последнем случае проверка будет выполняться только среди ключей словаря.
Вокабулари Юнифай: объединить два словаря
Для того чтобы объединить два словаря, есть как минимум два способа: прямой и современный.
Обратите внимание на то, что значения итогового словаря будут зависеть от порядка исходных словарей в функциях: если переставить местами словари a и b, значение ключа ‘y’ изменится на 2.
Фрекуэнтиа: самый частый элемент
Этот короткий скрипт вернёт элемент, чаще всего встречающийся в списке.
Используются продвинутые параметры встроенной функции max():
В качестве аргумента можно использовать списки, кортежи и строки.
Палиндромус Ревелио: проверка строки на палиндром
Простой вариант этого кода проверяет, является ли слово без пробелов и знаков препинания, написанное в одном регистре, палиндромом.
Албум Миксио: перемешать элементы списка
Этот сниппет поможет вам изменить порядок элементов списка на случайный. Обратите внимание на то, что функция shuffle из библиотеки random меняет исходный список.
Подробнее про библиотеку random и случайные числа в Python читайте в нашей статье.
Албум Датум: список дат из диапазона
Этот код получает две даты (начальную и конечную) и создаёт список из дат между ними, включая начальную и исключая последнюю.
Для получения дней между начальной и конечной датой используется datetime.timedelta.days.
Нумерум Нумерио: число в список цифр
Превращает целое число в список его цифр.
Функция map() принимает желаемый тип выходных данных (в нашем случае это int, целые числа) и итерируемый объект (строку, список или кортеж), элементы которого можно превратить в элементы этого типа. После этого другая функция list() преобразует результат в список.
Нумерум Романио: преобразовать число в римскую запись
Преобразует число в обычной десятичной («арабской») записи в форму римского числа. Работает со значениями от 1 до 3999 включительно, возвращает строку (str).
Сначала создаётся список кортежей вида (число, его римская запись). Далее цикл бежит по нему и с помощью функции divmod() производит целочисленное деление с остатком, меняя входящее число на остаток. Соответствующие результаты деления умножаются на строку римской записи и присоединяются к итоговой строке res.
Акцио Пайтон: Python в каждый дом!
Составление и изучение таких микропрограмм помогает лучше понять типы данных в Python, узнать о свойствах и параметрах функций. На сайте 30 seconds of code есть ещё больше коротких программ как для Python, так и для других языков программирования.
Источником вдохновения для названий этих скриптов послужили, конечно, книги Джоан Роулинг, а полный справочник по магическим заклинаниям мира Гарри Поттера можно посмотреть здесь.
На курсах «Профессия Python-разработчик» вы узнаете, насколько полезными могут быть такие небольшие программы, сниппеты и скрипты. Вы научитесь не только колдовать красиво решать задачи с их помощью, но и воплощать гораздо более сложные проекты. Приходите!
обложка: Darshan Patel / Unsplash / Pixabay / Pexels / Colowgee для Skillbox Media
Cython: более чем 30-кратное ускорение Python-кода
Python — это язык, который любят многие программисты. Этим языком невероятно легко пользоваться. Всё дело в том, что код, написанный на Python, отличается интуитивной понятностью и хорошей читабельностью. Однако в разговорах о Python часто можно слышать одну и ту же жалобу на этот язык. Особенно тогда, когда о Python говорят знатоки языка C. Вот как она звучит: «Python — это медленно». И те, кто так говорят, не грешат против истины.
В сравнении со многими другими языками программирования Python — это, и правда, медленно. Вот результаты испытаний, в ходе которых сопоставляется производительность разных языков программирования при решении различных задач.
Есть несколько способов ускорения Python-программ. Например, можно применять библиотеки, рассчитанные на использование нескольких ядер процессора. Тем, кто работает с Numpy, Pandas или Scikit-Learn, можно посоветовать взглянуть на программный комплекс Rapids, позволяющий задействовать GPU при проведении научных расчётов.
Все эти методики ускорения работы хороши в тех случаях, когда решаемые с помощью Python задачи могут быть распараллелены. Например — это задачи по предварительной обработке данных или операции с матрицами.
Ответ на этот вопрос даёт Cython — проект, используя который можно значительно ускорить код, написанный на Python.
Что такое Cython?
Cython, по своей сути, это промежуточный слой между Python и C/C++. Cython позволяет писать обычный Python-код с некоторыми незначительными модификациями, который затем напрямую транслируется в C-код.
Единственное изменение Python-кода при этом заключается в добавлении к каждой переменной информации об её типе. При написании обычного кода на Python переменную можно объявить так:
При использовании Cython при объявлении переменной нужно указать её тип:
Эта конструкция сообщает Cython о том, что переменная представляет собой число с плавающей точкой. По такому же принципу объявляют переменные и в C. При использовании обычного Python типы переменных определяются динамически. Явное объявление типов, применяемое в Cython — это то, что делает возможным преобразование Python-кода в C-код. Дело в том, что в C необходимо явное объявление типов переменных.
Установка Cython предельно проста:
Типы в Cython
При использовании Cython можно выделить два набора типов. Один — для переменных, второй — для функций.
Если речь идёт о переменных, то тут нам доступны следующие типы:
При работе с функциями нам доступны следующие типы:
Ускорение кода с использованием Cython
Теперь С-код готов к использованию.
Теперь всё готово к тестированию нашего сверхбыстрого C-кода. Ниже приведён код, используемый для тестирования и сравнения двух вариантов программы.
Код этот устроен очень просто. Мы импортируем необходимые файлы — так же, как импортируются обычные Python-файлы, после чего вызываем соответствующие функции, делая это так же, как если бы мы всё время работали бы с обычными Python-функциями.
Взгляните на следующую таблицу. Можно заметить, что Cython-версия программы оказывается быстрей её Python-версии во всех случаях. Чем масштабнее задача — тем больше и ускорение, которое даёт использование Cython.
Число | Показатель Python Time | Показатель Cython Time | Показатель Speedup |
10 | 1.6689300537109375e-06 | 4.76837158203125e-07 | 3.5 |
100 | 3.337860107421875e-06 | 4.76837158203125e-07 | 7.0 |
1000 | 2.193450927734375e-05 | 9.5367431640625e-07 | 23.0 |
10000 | 0.0002090930938720703 | 6.4373016357421875e-06 | 32.481 |
100000 | 0.0021562576293945312 | 6.008148193359375e-05 | 35.89 |
1000000 | 0.02128767967224121 | 0.0005953311920166016 | 35.75 |
10000000 | 0.2148280143737793 | 0.00594782829284668 | 36.1187317112278 |
Итоги
Использование Cython позволяет значительно ускорить практически любой код, написанный на Python, не прилагая к этому особенных усилий. Чем больше в программе циклов и чем больше данных она обрабатывает — тем лучших результатов можно ждать от применения Cython.
Уважаемые читатели! Используете ли вы Cython в своих проектах?
Игра на Python за 19 строк
Хеллоу ворлд! Если вам надоели задачки из видео курсов или книг можете сделать эту игру.
Сейчас мы сделаем камень, ножницы, бумага.
Для начала импортируем рандом:
Теперь сделаем бесконечный цикл чтобы не перезапускать игру несколько раз:
Пропишем правила для игроков:
Теперь сделаем выбор для игрока:
player = input(‘Вы выбрали:’)
И вот мы подошли к тому как все-таки реализовать проверку того что написал игрок, а также выход из игры:
if player not in [‘к’, ‘н’, ‘б’, ‘выход’]:
print(‘Не правильный ввод!’)
Теперь пропишем выбор для бота и тут нам поможет рандом:
comp_choice = gen[random.randint(1, 3)]
Что ж мы сделали почти все шаги в игре, но осталось сделать победные комбинации:
Последний и самый простой шаг обозначаем победу или ничью:
if player == comp_choice:
elif (player,comp_choice) in win_combination:
player = input(‘Вы выбрали:’)
if player not in [‘к’, ‘н’, ‘б’, ‘выход’]:
print(‘Не правильный ввод!’)
comp_choice = gen[random.randint(1, 3)]
if player == comp_choice:
elif (player,comp_choice) in win_combination:
Вот и все вы сделали игру и можете похвастаться перед друзьями.
Телеграм-канал @featuresfordev. Там мы делимся своими мыслями в таком формате.
Дубликаты не найдены
Программирование на python
210 постов 7.1K подписчика
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
• уважение к читателям и авторам
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
Чел, ты рекламируешь свой канал, и даже не вставил свой код нормально. Я редко постам ставлю минусы, но это какое-то жуткое неуважение к читателям.
Вот полный код:
ссылка на гит.
Вы разработчик или где?
код питона без отступов выглядит идеально!
П.С. ты это сделал что бы над ньюбами поиздеваться, да?
чел это python он не поддерживает ; ты что шаман что ли? как ты запустил программу?
> gen = <1:'к', 2:'н', 3:'б'>> comp_choice = gen[random.randint(1, 3)]
Спасибо огромное! Я как раз хотел узнать побольше команд!
Смысл этого поста? Он обучает разве что копипастить код.
Как вариант (исключения не перехватываются, форматирование строк не применяется, Python 3) :
import random
player_win = 0
bot_win = 0
Ты отступ забыл сделать, а так спасибо за код.
Отступы нужны в коде, без них не полетишь..
Бесплатно помогаю пикабушникам учить программирование, часть 17: «Итоги спустя полтора года»
— 35 человек обучились до уровня стажера/младшего разработчика.
— 2 человека сейчас на этапе прохождения собеседований в несколько компаний.
— 5 человек прошли какую-то часть плана обучения, но перешли во фронтенд.
— 1 человек обучился до уровня стажера, поработал несколько месяцев и ушел в DevOps.
Мне нравится заниматься этим проектом и я и дальше планирую дополнять его интересными статьями.
Бесплатно помогаю пикабушникам учить программирование, часть 16: «Что делать если вам не перезванивают из отдела кадров»
Из любой ситуации можно извлечь пользу. Такие как эта не является исключением.
А я, в свою очередь, продолжаю обучать новичков программированию. За полтора года этого занятия с моей помощью работу получили 35 человек.
Ответ на пост «Бесплатно помогаю пикабушникам учить программирование, часть 15: «Еще один пост о собеседованиях»»
Привет, вот настала и моя очередь благодарить @prodigal.son 🙂
В программировании у меня ббыл опыт, но очень нерелевантный, писал для себя на питоен разные задачки, с друзьями-школьниками делали разные проекты
Автору огромное спасибо, до сих пор иногда удивляюсь, как случайности могут повлиять на жизнь.
Школьники из Нижнего Новгорода стали лучшими в 3D-моделировании и программировании
Юные нижегородцы лучшие в 3D-моделировании и программировании в России: команда FullStack из Нижнего Новгорода стала абсолютным лидером отборочного этапа IV всероссийского хакатона👨💻
Вопрос исчерпан
Кто такая Элис?
Красиво одевается, красиво говорит.
Появилась она во времена IRC и развитого в том направлении ботов. Сам по себе, протокол IRC был довольно прост: все команды и взаимодействия с пользователями/сервисами проходили по открытому протоколу, без шифрования, что существенно облегчало как сам парсинг чатов, так и взаимодействие с серверами в целом.
Что делали тогда боты? Да много чего, по командам: рассказывали о погоде, анекдоты, без устали следили за порядком на каналах (мат и флуд), были и игровые боты (викторины, мафия). Ну и конечно же, разговаривающие боты.
Так как я уже интересовался тогда Линуксами и ботами, то решил разобраться, как это все работает. В большинстве случаев, использовали ядро eggdrop, написанное на Си, специально под IRC. Остальная «начинка» вешалась в виде модулей и скриптов на TCL.
Когда мне наскучили скрипты на погоду и вот это все базовое, я решил научить ее общаться. сначала попробовал популярный на тот момент модуль megahal (если не изменяет память), но вскоре, разочаровался в нем: бот просто набирал разговорную базу, отвечал похожими фразами и совсем не в тему.
Тут я и решил использовать свои навыки программирования в Delphi и замутить своего бота, чтобы тоже и с погодой, но основной упор был на разговор и более.
Когда думал над именем, принял решение подобрать такое, чтобы коротко и звучало. И вот, играю как-то в Need For Speed 3, выбираю тачки и проскакивает Lotus Elise.. решено!
В основе ядра был функционал работы протоколом IRC и с базой данных на FireBird (компонент просто был сразу в коробке Delphi), остальное навешивалось в виде dll-модулей и подгружалось при старте ядра.
Первым делом, нужно было решить, как собирать разговорную базу. Сначала Элис реагировала только на прямое обращение и приваты. Первым режимом был закос под дурочку (отвечала просто рандомными фразами и запоминала то, что пишет собеседник), пока без обучения.
Затем, я решил, что нужно разделить полученные фразы и в целом, попытаться разбить полученное по каким-нибудь категориям. Если честно, я уже не помню сколько было в конечном счете категорий (около 20).
Написал модуль, который разбивает новополученные фразы и ищет в них ключевые слова. Какие-то слова явно ссылались на категорию (тему разговора), какие-то могли служить триггерами на настроение (позже объясню), например:
— Я вчера смотрел матч между Канадой и Россией. Любишь хоккей? (тут у нас явно идет речь о спорте по ключевым словам: матч, хоккей. но есть еще и упоминание стран). В данном случае, Элис имела рандомный выбор: говорить дальше о спорте или о путишествиях например.
— Люблю прыжки в длинну / Я ездила в Турцию, кофе там пила
Вообще, выбора у нее было значительно больше, чем просто отвечать по теме:
— Продолжить разговор по выбранной теме
— Задать вопрос, ответ на который еще нет в базе (из таблицы, куда складывались фразы, в которых не были обнаружены ключевые слова).. чтобы узнать ответ 🙂
Ключевые слова и категории пришлось прописывать самому, но это не заняло много времени.. Вы удивитесь, на сколько не богат словарный запас среднестатистического человека в чатах 🙂
На счет склонений, падежей и прочего при поиске ключевых слов: я пользовался масками и регулярными выражениями.
Тут пришлось дополнить модуль, отслеживающий ключевые слова, на предмет поиска пола собеседника в его фразах. До того, как Элис понимала с кем общается, фразы были обобщенные в 70% случаев.
Как только собеседник обращался к Элис, она проверяла его по свое базе, знает ли она его уже и какого «оно» пола )) и уже дальше общалась в соответствующем ключе. В качестве идентификатора собеседника, выступал ident@host, без привязки к нику.
Так же, базу фраз пришлось значительно переделать, т.к. одна и та же фраза не могла звучать одинаково для обоих полов. Потому, пришлось сделать что-то вроде триггера-разделителя в фразах, встречая которые, Элис делала выбор в зависимости от пола собеседника:
— Ты ходил|ходила на концерт БИ-2 вчера?
(символ | означал, что первое слово предназначено для м, второе для ж)
Возвращаемся к ключевым словам: добавляем «вес настроения» на определенные фразы.
Добавляем к базе собеседников два параметра: долгосрочное отношение и короткосрочное. Это я подчерпнул из СИМСов )) Короткосрочное влияет на то, хочет ли Элис прямо сейчас с тобой общаться.
Баллы только списываются. Начисляются по 20 в час на короткосрочное и на 2 балла в сутки на долгосрочное.
То есть, если ты будешь постоянно ее оскорблять, она просто перестанет с тобой общаться.
Добавлен модуль, примерно раз в 3 дня поднимал список каналов и рандомной выбирал 10 каналов с +30 юзеров, затем, один из них. Даже я не знал заранее, куда она «решит» зайти )
Когда всевозможные ключевые слова были забиты в базу, фразы почти сами раскладывались по категориям, я уже практически «забил» на мониторинг. Изредка подглядывал за тем, что люди далеко не всегда понимали, что общались с.. ботом..
Я так и не смог написать модуль различия между будничным разговором и командами на действия.
Потом RusNet (IRC) наверное изжил себя.. сначала я ушел, а потом и Элис года через 2 выключил навсегда.
Посвящается памяти EliseAI, более известной, как просто Elise (RusNet).. она же Лиска..
PS. Наверное слишком ужато получилось. о многих моментах, особенно технических, умолчал. можно в комментах еще обсудить.
Как я не стала программистом
Да, я мало игралась с куклами в детстве, больше интересовало смотреть, как отец что-то паяет, как пустые гильзы превращаются в его руках в патроны, как он сам чинит кашляющий Днепр.
Видимо, этим и был подарок обусловлен. Это было году в 92, наверное, точно не раньше.
Это был единственный и первый компьютер на всю округу, мы тогда жили в поселке. Хз, в соседних городах компьютеры уже, наверное, у кого-то и были. Но тогда взрослые мужики приходили к отцу посмотреть на него, поцокать, потом сесть пить пиво.
Потом уже были IBM, и прочие. Программирование было забыто благополучно.
Ну разве что до сих пор пригождается небольшое знание php и всякого там по сайтам.
А недавно ребенок на днюху запросил себе книгу по Python. Хочу, говорит, программировать.
Да, к своим десяти он ловко ворочает в фотошопе и КорелДро, Скретч юзает с первого класса, но загорелся настоящим программированием.
И на днюху он таки получил книгу.
Вчера установила Пайтон, сегодня села с ним поразбирать, чо да как.
А суть та же. Прошибло реально почти до слез. Вспомнила вмиг и своего лыжника с убогими ёлками, лично прорисованными. И торчание за компом ночами.