Как найти четное число в python
Перейти к содержимому

Как найти четное число в python

  • автор:

Проверка числа на четность ⁠ ⁠

Проверка числа на четность Программирование, Языки программирования, Python

3 явно идиотский метод — а если число состаляет 10 в хер какой степени, оно так и будет по единичке добавлять и проверять пока не дойдет до него.

Баг в том, что второй и третий способ не рассчитаны на корректную работу с отрицательными числами. А они тоже бывают чётными и нечётными.

Я с утра с трудом проверяю четность пальцев на руках, а ты тут с Python.

Как этот оператор работает с дробными числами?

Читать ещё на Пикабу

Топ-25 бесплатных курсов обучения Python 2023 года⁠ ⁠

Подготовили для вас статью с бесплатными курсами по Python. В некоторых курсах есть тренажеры: можно проходить теории и там же практиковаться.

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

Python — это один из наиболее популярных языков программирования в мире, широко применяемый как в создании программного обеспечении, так и в Data Science B Machine Learning.

Тренажеры

Тип: тренажер состоит из блоков теории, после которых сразу идет практика с задачами внутри тренажера. Бесплатный сертификат о прохождении выдается после окончания курса.

Тип: обучающий тренажер.

Тип: обучающий тренажер.

Бесплатные курсы от школ

Курс на платформе Stepik от онлайн-школы BEEGEEK для начинающих и учащихся образовательных учреждений. Программа предлагает изучить основы владения Python, а по окончании участников ждет электронный сертификат.

Бесплатный курс от Мичиганского университета на платформе Coursera предлагает участником набор онлайн-лекций по базовым навыкам владения языком Python. Каждый поток длится 7 недель, в рамках которых профессор Чарльз Северанс преподносит знания из своей книги «Python for Everybody».

Бесплатный курс по Python от Хекслет для начинающих программистов. Материалы, среди которых — 7 уроков в формате текста или видео и тесты, раскрывают основы написания кодов на языке, а также описывают ключевые аспекты работы в его экосистеме.

В рамках этих курсов по Python от Skillbox автор Артем Манченков расскажет обо всем, что пригодится начинающему программисту, используя реальные примеры. Вместе участники пройдут путь от написания интерфейса мессенджера до создания голосового помощника — и все это в формате видео.

Как заявляет автор курса, его программа рассчитана для программистов Python с любым уровнем знаний. По мере прохождения участников ждут 90 видеоуроков и практических заданий. По окончании курса платформа Stepik выдает электронный сертификат.

Бесплатный курс от Академии IT с рейтингом 4,75. Обучение состоит из прохождения 42 уроков, во время которых автор Михаил Тарасов расскажет все об основах программирования на Python, а также поделится ценной информацией о будущей карьере программиста.

Топ-25 бесплатных курсов обучения Python 2023 года Python, IT, Программирование, Программист, Курсы программирования, Разработка, Длиннопост

Курсы с Youtube

Курс YouTube-лекций по программированию на Python. Вся программа состоит из 123 видео длительность от 5 до 12 минут. При желании можно найти те же видео на языке оригинала.

Топ-25 бесплатных курсов обучения Python 2023 года Python, IT, Программирование, Программист, Курсы программирования, Разработка, Длиннопост

Что можно писать на Python

Практически как Java, Python находит применение во многих областях программирования. Так, например, язык применяют в:

Создании систем автоматизации;

Математических расчетах и других продуктах.

Сколько приносит знание Python в 2023 году?

Средняя заработная плата Python-программистов, согласно данным портала ГородРабот.ру, составляет 131 478 рублей — лучший показатель на рынке труда. А вот новички, основываясь на информации HH.ru , могут получать оплату от 70 000 рублей.

Ключевой недостаток владения Python — это необходимость конкурировать с другими кандидатами за место в штате. По подсчетам того же ГородРабот.ру, количество вакансий на позицию Python-разработчика достигает до 203 мест ежемесячно, однако и предложение труда уверенно растет: так, команда Skillbox посчитала, что на одно место программиста Python в 2023 году приходятся сразу 20 кандидатов.

Почему Python?

Python — идеальное решение для каждого и предлагает:

Доступность — из-за простого синтаксиса язык понятен даже новичкам;

Кроссплатформенность — интерпретаторы Python поддерживаются большинством операционных систем;

Разнообразие применения — язык нужен везде: от веб-разработки до геймдева;

Интегративность — Python можно применять в сочетании с другими системами и встраивать его коды как компоненты.

Парсим яндекс диск при помощи Python⁠ ⁠

В данный момент я работаю контент-менеджером в «крупном» интернет — магазине. В моём случае, это больше 100 000 позиций.

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

Готового решения я не нашел и решил написать свою реализацию работы с яндекс диском. Хорошо, что я знаю python.

У меня было 2 версии программы:

когда по ссылке находится папка с картинками, python скачивает эту папку как зип файл, затем распаковывает. Все манипуляции записываются в csv файл, путь до файла с картинками

когда по ссылке идёт только одна картинка, в данном случаи все немного проще, не нужны лишние действия с распаковкой картинок

p.s. ещё были 2 побочные небольшие программки: 1-я для уменьшения размера картинки, 2-я для переименования картинок (менялся пробел на дефис)

Приступим к реализации

скачать и установить python c официального сайта https://www.python.org/downloads

открыть любимый редактор кода (я использую vscode) https://code.visualstudio.com

подключить следующие стандартные библиотеки: urllib.parse, csv, os, zipfile. Установить библиотеку requests https://pypi.org/project/requests/ (для отправки запроса на сервер)

для полного фен-шуя можно использовать виртуальное окружение, дабы не засорять систему ненужными пакетами. Подробнее о virtualenv можно ознакомится по ссылке https://docs.python.org/3/tutorial/venv.html или же использовать poetry.

Ссылки на яндекс диск имеют вид: https://disk.yandex.ru/d/xNBn7lE1_Y5knQ . Чтобы их можно было скачать, они должны быть публичными.

Обратимся к API яндекс. После ключа public_key=»вставляем_ссылку_на_файл»

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

Парсим яндекс диск при помощи Python Программирование, Инструкция, Гайд, Python, IT, Учеба, Программист, Разработка, Linux

Пожалуй, на этом хватит теории, теперь, постараюсь внятно объяснить, как всё это можно применить в контексте python.

# создаем новый файл и подключаем нужные нам библиотеки

import requests

from urllib.parse import urlencode

import csv

import os

import zipfile

Для начало создадим функцию, которая будет возвращать нам ссылку для скачивания:

final_url = base_url + urlencode(dict(public_key=public_link))

response = requests.get(final_url)

parse_href = response.json()[‘href’]

return parse_href

Файлы могут быть в разных форматах: ссылки могут быть на одну или несколько картинок. В первом случае можно напрямую скачивать картинку по ссылке. Во втором, если по ссылке несколько картинок, то при скачивании мы получаем архив, который требует дополнительных действий (распаковку).

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

В итоге, мы получаем файл result_data.csv со ссылками на фотографии на нашем жестком диске:

Парсим яндекс диск при помощи Python Программирование, Инструкция, Гайд, Python, IT, Учеба, Программист, Разработка, Linux

В добавок, у нас на жёстком диске появляется папка со скаченными картинками в папке download_files.

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

p.s. Официальная документация по API Яндекс. Диска

Братишка с пикабу подсказал готовую библиотеку на питоне. Спасибо b4ro тык.

p.s.s. Немного поразмышляв, я подумал, что неплохо было бы написать, тесты. Пройтись линтером по коду. Добавить функцию переименования файлов. Может быть что-нибудь ещё?)

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

А я всего лишь пишу калькулятор на Python⁠ ⁠

А я всего лишь пишу калькулятор на Python IT юмор, Картинка с текстом, Мемы, Программирование, Баг, Браузер, Python, Калькулятор

Байки погромиста. Если кто-то скажет, что программирование — это скучно⁠ ⁠

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Детектив kesn всегда готов помочь!

Вообще я, как правило, нормально программирую. Иногда даже такое заворачиваю, что сам тащусь весь день.

Но если б я писал, какой я красавчик, то никому не было бы интересно. Поэтому сегодня — очередная партия программистских историй от меня любимого, с косяками, багами и болью. Иногда это происходило по запарке, или когда я торопился, или после нудной работы, когда мозг уже плавился, а иногда просто я тупил, потому что я человек. В общем, такие вот типичные будни кодера. Наслаждайтесь!

❯ Функция не выполняется

Попросил меня как-то клиент отладить его скрипт. Говорит, не работает. Невероятно!

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Я, когда клиент говорит, что ничего не работает

Скрипт секретный — ну как, для трейдинга на бирже, и принесёт миллионы денег, конечно же, но только когда заработает без ошибок. Поэтому клиент не пересылает мне его, а запускает screen share и делает, что я ему говорю. То ещё удовольствие, но хозяин-барин — оплата почасовая.

Всё шло хорошо, я потихоньку распутывал кривую логику, говорил как лучше сделать, а потом мы дошли до неё. До функции, которая не выполнялась. То есть буквально, чел вызывает функцию, а она ничего не возвращает и ничего не делает.

Смотрим в содержимое функции. Как и положено, это полотно кода на пару экранов, сходу так и не поймёшь, что она делает. Повсюду return что-то там, ветвления всякие итд. То глупое чувство, когда клиент тебя ждёт, а ты ничо не понимаешь и косплеишь рыбу.

Осложнялось всё тем, что отлаживать через клиента — ну такое. Он может запустить скрипт, но вот отладчик для него — страшное слово, и максимум, на что можно рассчитывать — это поставить print() в нужных местах. Разгадка оказалась проста: где-то в середине функции, там, где это было менее всего заметно, вместо return клиент написал yield. А в питоне yield — это магическое слово, которое превращает функцию в генератор, а все return . — в как бы raise StopIteration(. ), и вместо результата возвращается итератор, и выполнение кода останавливается до следующего обращения. Короче говоря, всего-навсего одним ключевым словом клиент полностью раздолбал логику своей программы. Маэстро!

❯ Как ловить эксепшн из генератора

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

Вот, например, кусок кода:

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Тут у меня есть функция cache.apply(), которая берет quota_chunks, делает с ними какой-то вжух-вжух и возвращает новые quota_chunks. Я нарисовал диаграмму, чтобы изобразить этот процесс в более понятной форме.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Иногда случается так, что эта вжух-функция не срабатывает, и тогда, как и положено приличному питон-коду, бросается исключение.

Возможно, раньше эта вжух-функция была действительно функцией, но потом она превратилась в генератор (для большей эффективности). Генераторы всем хороши, кроме одного: они откладывают выполнение кода, и в реальности узнать, когда ваш код выполнится, бывает затруднительно. Вы можете создать генератор, отправить его на вход другому генератору, затем передать это в функцию, и уж тогда где-то внутри этой функции вызовется код.

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

Именно это тут и случилось. Я вызвал этот генератор и проверил, что он отработал без ошибок, но на самом деле генератор отработал совершенно в другом месте — там, где вызывается spy() — и именно там он и упал.

А знаете как я это отловил? В тестах. Поэтому пишите тесты.

❯ Строго по инструкции

Клиенты бывают разные: какие-то умеют немножко в HTML и frontend, а некоторые из наших клиентов умеют в backend. Один из таких клиентов часто сам писал backend логику и давал нам её на проверку, чтобы мы ему исправили баги, а может быть где-то сделали рефакторинг или code review.

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

И вот клиент взял нашу инструкцию и начал следовать тому, что там написано, слово в слово. Надо понимать, что разработчики обычно пытаются понять, что они делают (по крайней мере я на это надеюсь). Соответственно, те, кто читал этот скрипт, понимали, что должно быть сделано, и в случае, если у них, например, вместо pip используется poetry, а вместо apt-get у них pacman (i use arch btw), то они заменяли соответствующие команды.

Клиент же делал всё слово в слово, и он написал нам, потому что на одном из шагов у него случилась проблема. Если быть точнее, у нас в инструкции была описана ветка master, а на гитхабе по умолчанию ветка main, поэтому какая-то команда не находила нужную ветку.

«Изи фикс» — подумал я, созвонился с клиентом объяснил, что нужно делать, и хотел отключаться. когда возникла ещё одна ошибка. Оказывается, в инструкции был косяк, и при выполнении команды шелл делал подстановку, когда видел $SOMETHING — то есть не было экранирования. Мы исправили и это, и буквально через несколько секунд всплыл ещё один косяк. А потом ещё. И ещё.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Где-то через час я сказал клиенту, что пусть он всё бросит и я задеплою всё сам, а потом мы обновим ридми. Было стыдно.

❯ Ответочка

Когда-то я работал на интернет-магазин, и мы заметили, что у нас появляются фейковые заказы каждые утро и вечер. Сначала мы не смекнули, что к чему, но потом поняли фишку: идентификаторы заказа у нас были обычные IDшки из Postgres, поэтому конкурент мог сделать заказ утром (номер заказа 10), сделать заказ вечером (номер заказа 15) и просто вычесть второй номер заказа из первого и получить количество заказов, которые мы получили за день (15 — 10 = 5). Я до сих пор часто нахожу эту ошибку во многих проектах, и примерно могу оценить размер этих проектов.

Эту ошибку легко исправить: достаточно заменить последовательные ID на случайные — например, вместо номера заказа использовать timestamp или UUID.

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

Мой девиз — «кто ищет тот всегда найдёт» (посмотрите мои статьи про уязвимости на хабре — 1, 2). Так и тут, я искал и обнаружил, что конкурент выкладывает розничные прайсы публично, а вот оптовые — только для зарегистрированных и проверенных партнёров. Сам файл он раздаёт nginx’ом с адреса вроде http://some-site.com/files/розничный_прайс.xls. А если так, то, скорее всего, никакой аутентификации при помощи бэкенда для самого файла нет, а значит, можно попробовать найти оптовый прайс.

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

❯ Скрапинг со скоростью света

В одном из моих проектов я использовал api ВКонтакте, чтобы анализировать кожаные мешки. Там не нужна была супер-скорость, поэтому я не полез в async, а просто написал функцию и распараллелил её по потокам при помощи ThreadPoolExecutor.

Программа начала просто летать! Вот как это делают сеньоры! Саенс, бич!

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Слева направо: саенс, бич

Потом я начал подозревать, что программа работает слишком быстро даже для такого классного парня, как я. Я полез смотреть результаты, а там ничего не было, потому что в каждом из потоков программа очень быстро падала с ошибкой, а так как это потоки, то exception в потоке не «всплывал» в основную программу, и я думал, что всё норм.

Поэтому если всё работает слишком хорошо, то, возможно, всё очень плохо.

❯ Бог рефакторинга

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

Ну я такой про себя «опять клиент что-то сломал, бывает», полез туда смотреть. Глядел-глядел, глаз вообще ни за что не цеплялся. Ошибок в sentry не было. Потом нашёл вот такой код:

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

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

К несчастью, у меня стоит расширение git lens, которое пишет, кто именно написал каждую строчку кода. Я в основном использую это, когда вижу какую-то хрень: если автор кода — чувак из наших, то, скорей всего, это я тупой и что-то не понимаю в задумке автора; в других же случаях это, как правило, обычный плохой код.

И вот я смотрю, а этот код написал. я сам. Вот так я примерно выглядел:

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

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

❯ Детектив kesn и тайна ssh

Говорят мне как-то: клиент, с которым мы работали год назад, восстал из мертвых, и теперь ему нужно перенести и обновить проект в AWS. Вон там наш девопс написал какие-то скрипты сто лет назад, возьми их и задеплой.

Я человек простой, мне сказали задеплоить — я и задеплою, хоть на AWS, хоть на тапок.

Запускаю я скрипт, он всё делает, и теперь я хочу зайти на сервер и вручную проверить, что всё работает. И тут всё заверте.

Сначала пробую ssh -i ключ root@ip. Не работает. Потом вспоминаю, что юзер в AWS обычно ec2-user, поэтому пробую ssh -i key ec2-user@ip. Не работает. Может, там авторизация не по ключу? Пробую ssh ec2-user@ip. Не работает. Сделал dig, попробовал подключиться не напрямую, а через load balancer. Согласен, тупая затея.

Пошел в дэшборд AWS смотреть настройки файрволла. Вижу два странных айпишника. Очень странно. Беру первый, проверяю геолокацию по ip. По локации понимаю, что это, кажется, статический ip девопса. Какого хрена? У нас же есть бастион, и все соединения должны проходить через него. Проверяю второй ip из файрволла. О, так это же и есть бастион. Ну отлично, теперь делов-то — добавить всю эту конфигурацию с бастионом в .ssh/config, чтобы в будущем было легко подключиться. Лезу в конфиг, а там уже есть эта конфигурация.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

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

❯ Ошибка платежа

На sentry прилетел отчёт об ошибке, попросили посмотреть. Стал разбираться. Мой код двухгодичной давности.

Логика была простая: есть намерение клиента платить за подписку, и есть прикрепленная карта клиента. Пока намерение активно, мы пытаемся списывать деньги с карты. Это логично: даже если на карте нет денег, то раз клиент хочет пользоваться сервисом, мы будем пытаться списать до тех пор, пока это не получится. Если клиенту не нужна подписка — он отзывает намерение.

Единственное, что я не учел — что клиент может просто всё забросить, ничего не отменяя. И вот на протяжении года наш сельдерей-разнорабочий (celery worker) запускался, пытался списать у клиента деньги, получал отлуп, жаловался в sentry, и засыпал, чтобы назватра всё повторилось, и так каждый день, без конца и края.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

❯ Лёгким движением руки сэкономить кучу денег

Я заметил, что очень часто клиенты могут сэкономить неплохую такую кучу денег, сделав просто какое-то минимальное телодвижение. Вот несколько примеров:

Чувак хостил видео на aws s3 и раздавал через амазоновский CDN. Выходило $655 в месяц. Потом нашёл BunnyCDN, я перенастроил приложение (заменил где-то 4 строчки минуты за две), и внезапно с новым CDN в месяц стало уходить только $70. Ну не эпично ли за пару строчек кода?

Клиент платил сотни долларов за жирный инстанс Elasticsearch на AWS. Почему — я хз. Потом он заподозрил неладное. Мы замерили реальную нагрузку и перенесли Elastic на одну из самых дешёвых машин в digital ocean, за которую клиент теперь платит $24 в месяц. Профит!

У клиента было много файлов на s3, платил он тоже много. Потом перенесли всё на b2, там даже делать почти ничего не надо — у них интерфейс совместим с s3. Получили экономию раза в 4.

❯ От судьбы не уйдёшь

У нас есть шаблон для новых проектов на cookiecutter. Он удобен тем, что если мы что-то меняем в шаблоне, то можем легко обновить проекты клиентов при помощи cruft.

Как-то меня наняли как раз обновить проект. Проект был старый, отстал от нашего шаблона очень прилично, и когда я попытался его обновить, то обнаружил, что изменилось почти всё. Я начал аккуратно разрешать конфликты, и как раз примерно в этот момент штатные сотрудники клиента начали пилить что-то эпичное в своей ветке.

И вот дело подходит к концу, у них куча изменений, у меня столько же. Мы говорим «ну мы всё», они такие «мы тоже вот уже заканчиваем». Начальник мне пишет: «Заливай быстрее в мастер, пока они не залили своё, а то будем потом всю жизнь конфликты разбирать. одинодин». Ну я на скорости слил наши обновления в мастер-ветку и мысленно пожелал удачи их разрабам: наша работа сделана, мастер мы обновили, а то, что их разработчики отстали от мастера и у них конфликты — ну штош.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

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

❯ Детектив kesn и поиски пароля

Настраивал я как-то инстанс elasticsearch. Там была отдельная машина, я на ней с помощью docker разворачивал ElasticSearch. Сначала делал всё в ручном режиме, проверял, потом писал скрипт для автоматизации. Для начала просто запустил сервер без всего, потом начал разбираться с авторизацией.

В эластике есть специальный скрипт — elasticsearch-setup-passwords — он настраивает пароли. Ну я его запустил, он мне выдал списки паролей для apm_system, kibana_system, kibana, logstash_system, beats_system, remote_monitoring_user и, собсна, elastic. И хотя мне показалось, что паролей было слишком мало и вообще-то для приличной поисковой системы их должна быть хотя бы сотня, но пароль для elastic был, я его забил в систему автоматизации и пошёл дальше настраивать. Дальше было SSL — не знаю, почему это не встроено (наверно, потому что если не будет https, то и взламывать elastic будет сложнее, а куда без этого!). Ну я пошёл в гугол и говорю: пацаны, сертификаты для эластика привезли? Когда я заикнулся про letsencrypt, они мне сказали, что у нас тут не загнивающий запад и мы сами сертификаты делаем, свои собственные. Короче, прям на официальной странице лежит огроменный docker-compose.yml, в котором вжух-вжух, сертификаты настраиваются, конфиги генерируются. Я его скопировал, применил, всё заработало, и я добавил это в автоматизацию.

Через несколько дней (когда я ужё наполовину всё забыл) мне вдруг понадобилось всё снести и настроить заново (спасибо, digital ocean, за то, что не умеешь даунскейлить диски!). Я запустил скрипт автоматизации, всё развернулось, и тут я вспомнил, что вроде как пароль генерируется сам и его можно узнать, если запустить elasticsearch-setup-passwords. Ну я полез на машину, чтобы запустить эту команду — а она не работает! Сначала был не тот url инстанса, пришлось узнать, что есть опция —url. Окей, теперь не хочет подключаться, т.к. кастомные сертификаты. Как добавить сертификаты? Прописать их в elasticsearch.yml. Читаю доки и там говорится:

All of these settings can be added to the elasticsearch.yml configuration file, .

. with the exception of the secure settings

which you add to the Elasticsearch keystore. For more information about creating and updating the Elasticsearch keystore, see Secure settings

Ну я полез читать, что за Elasticsearch keystore и зачем он нужен, и даже прочитал про bootstrap password и keystore passphrase. Мне показалось, что ещё чуть-чуть, и я дойду до чтения про большой взрыв и основы зарождения вселенной, а ведь я просто хотел узнать пароль от эластика!

Тут я бросаю взгяд на docker-compose.yml, и вижу, что там везде мелькает $ELASTIC_PASSWORD, и оказывается всё это время пароль был у меня в настройках и я сам его задавал!

Сказочный. эээ. патруль!

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

❯ Как дропнуть продакшен-базу

Клиенты любят нанимать фрилансеров или брать сотрудников в штаты, чтобы они работали над фичами — потому что нанимать нашу компанию достаточно накладно >:)

Ну и вот как-то клиент нанял стороннего разработчика, чтобы он перенёс систему поиска с эластика на postgres full-text search. Он сделал это именно так, как делал я лет 7 назад. Следите за руками:

Огромная ветка с кучей коммитов

В коммитах смешались изменения в БД и рефакторинг логики нескольких почти не связанных приложений

Миграции не откатывались

Бэкапов перед деплоем сделано не было (хотя это одна команда)

Не было переключателя «новая система / старая система», то есть старую систему просто вынесли нафиг и заменили новой

Не было оговорено временное окно для безопасного деплоя

То есть это прям классическая, железная точка невозврата. Угадайте, что случилось.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Конечно, сломалось всё. Система начала жёстко тормозить. Клиент написал нам и сказал, что надо срочно всё оживить. Т.к. это была критическая ситуация, то мы с СЕО залетели туда и стали смотреть. В изменениях было очень много всего — это был тотальный рефакторинг, поэтому локализовать проблему, просто глядя на код, не удалось. Так как прод не работал, то у нас не было времени воспроизводить всё на локалхосте и дебажить, и мы решили просто всё откатить.

Я откатил git revision на сервере на рабочий коммит, а СЕО зашёл в админку Digital Ocean и восстановил снэпшот базы данных, назвав его production-db-backup-Mar-24. Всё запустилось. Из-за использования снэпшота мы потеряли немного новых данных, но ничего критичного.

Потом мы сказали: всё, мы всё откатили, вот текущий коммит, вот текущая база, пусть ваш погромист всё дебажит и чинит или живите дальше в проклятом мире, который сами и создали ©

Через много месяцев (да, много историй именно после этого и начинаются) клиент говорит: а чё это за production-backup-Mar-24, давайте её удалим. Как же здорово, что он спросил у нас. Потому что программист клиента на самом деле ничего не починил, а просто свалил в закат, и вся инфра осталась в этом «пофикшенном» состоянии. И база использовалась резервная. Поэтому удалять нужно было сломанную БД с названием production, а рабочей была именно production-backup-Mar-24.

❯ Детектив kesn и загадочные тормоза

Серьёзно, я уже подумываю написать книгу про похождения детектива kesn’а.

Как-то я отлаживал асинхронный код, он читал бинарные данные с девайса, парсил их и отправлял куда подальше. Конечно, меня позвали, когда этот код начал тупить и кое-как работать, поэтому на входе меня ждала портянка спагетти-кода. Нам не привыкать, и я начал рефакторить и замерять скорость при помощи @funcy.log_durations.

Я кэшировал функции, пропускал ненужные фрагменты данных, уменьшал циклы. Сначала стало быстрее, но потом чем больше я отлаживал, тем медленнее код работал. Может, мой рефакторинг упустил какую-то важную деталь, и поэтому я делаю что-то совсем не то? Я начал логгировать и отлаживать даже самые маленькие функции. В конце концов дошло до того, что я, кажется, всерьёз начал задумываться об оптимизации скорости словарей в питоне (sic!), и в то же время моя версия работала медленнее, чем оригинальный код.

Потом до меня допёрло.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Чем больше я добавлял отладочной инфы, тем больше был оверхед. То есть я делал программу быстрее, но отладочная инфа делала программу медленнее.

Ха-ха. Я выключил отладочную инфу, и всё залетало. Ну и дурак!

Если вам понравилась эта статья, то посмотрите вот эту, она тоже весёлая: Погромист. Мои самые эпичные провалы за всю карьеру.

Если вам понравился я лично, как умная и образованная гиена, то вот моя тележка: Блог погромиста

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Ответ на пост «Без рейтинга. Самообучение PHP или курсы»⁠ ⁠

По PHP не подскажу. ЯП много и выбор в целом не однозначен. Но выбирать технологию следует с оглядкой на
1. популярность. Чем популярнее, тем больше мануалов, помощи везде и всё такое
2. сообщество. Мануалы нужны хорошего качества, иначе найденные решения будут учить плохому
3. применимость. У каждого инструмента своя область

по пункту 1 можно ориентироваться на рейтинги. Сами по себе рейтинги мало что говорят, но вот динамика подсказывает. Смотрим TIOBE. На скрине ниже выделены python, java и PHP.

Ответ на пост «Без рейтинга. Самообучение PHP или курсы» PHP, Языки программирования, Самообразование, Python, Текст, Разработка, Обучение, Программирование, IT, SQL, Telegram, Ответ на пост, Длиннопост

Нисходящий тренд PHP должен вызывать настороженность. Стоит ли выбирать инструмент, у которого было 10% рынка, а теперь 1.5?

более того, по пункту 2 — сообщество у PHP большие проблемы. В плане там слишком много legacy, очень много плохих подходов, переход на PHP7 вызвал большой раскол и вообще всё не очень хорошо. Имеет смысл идти в PHP, только если у вас есть хороший ментор. Перенять крутой опыт в любой технологии полезно.

Про курсы. Материала куча всякого разного. Рекомендую ориентироваться на крутые книги, добавлять статьи + видеоматериалы по теме. Можно посмотреть на бесплатные или недорогие платные курсы. Курсы типа за 120к в целом имеют мало смысла.

Наверное, 80% успеха в изучении — это самостоятельная работа. Ещё 20% заложено в обратную связь, когда вам покажут на ошибки. Прикол в том, что на больших образовательных площадках обратную связь дают далеко не профессиональные разработчики. Посмотрите вакансии тех, кто проверяет домашку, например, по запросу «<площадка> наставник», речь про зп в районе 30-55к в месяц.

Ответ на пост «Без рейтинга. Самообучение PHP или курсы» PHP, Языки программирования, Самообразование, Python, Текст, Разработка, Обучение, Программирование, IT, SQL, Telegram, Ответ на пост, Длиннопост

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

Небольшая подборка бесплатного материала по Python для старта:

1. Классическим хорошим курсом из бесплатных считаются Поколения Python на stepik для начинающих и для продвинутых.

2. На ютубе есть годные лекции Тимофей Хирьянова из МФТИ.

4. Не питоном единым, поэтому надо ещё и немного в базы. Можно посмотреть на Интерактивный тренажер по SQL

5. Освоить git, достаточно 4 глав из книги Pro Git

Можно пойти на codewars и leetcode для закрепления умения программировать. Когда сложилось базовое понимание происходящего, рекомендую переключаться на книги типа Лутца (двухтомник, нужно свежее 5 издание 2019-2020 годов) и идти по ней. Книга большая и достаточно сложная, но покрывает много важных деталей. Можно читать не всю, а главами или разделами по непонятным темам.

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

А дальше нужно писать как можно больше кода, периодически осматриваясь вокруг. Разработка — это не только язык, это ещё библиотеки, фреймворки, разные инструменты, тесты, проектирование архитектуры, командная разработка, получение задач через bug tracker, работа с ветками в git и вообще flow разработки, CI/CD и ещё много всякого разного.

Одним из источников кругозора может быть телеграмм-канал devfm, где разбираются разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командная разработка.

Прощайте парни⁠ ⁠

Прощайте парни IT юмор, Картинка с текстом, Python, C++, Языки программирования

Когда придумал настолько сложный язык программирования, что никто не в силах его осилить⁠ ⁠

В 1998 году Бен Олмстед закончил работу над самым сложным языком программирования. Примечательно, что создатель языка не смог написать ни одной программы на собственном языке.

Этот язык программирования получил название Malbolge. Автор дал название в честь восьмого круга ада Данте. В грубом переводе с итальянского Malebolge означает «злые канавы».

Традиционная фраза «Hello world» была написана на этом языке программирования спустя 2 года (в 2000-м году) и выглядит следующим образом:

Примечательно, что данный код был написан не вручную, а при помощи специально программы, созданной для этого.

Malbolge представляет собой эзотерический машинный язык для троичной виртуальной машины.

Но посыл Бена Олмстеда нашёл поддержку в среде программистов. Значительный вклад в развитие язык Malbolge внёс Лу Шеффер, сохранивший первоначальный интерпретатор и спецификацию после того, как оригинальный сайт перестал функционировать. Он провел специальное исследование криптоанализа языка, а также написал программу, которая копирует входные данные в его вывод и предложил общую стратегию написания программ в Malbolge.

Гигиенические отношения⁠ ⁠

Плюсы есть⁠ ⁠

Плюсы есть IT юмор, Языки программирования, Программирование, Юмор

Синдром самозванца⁠ ⁠

Синдром самозванца IT юмор, Картинка с текстом, Мемы, Программирование, Самозванец, Кот, Языки программирования, Синдром самозванца

Ответ на пост «Перевел интерактивные уроки "Базовый курс CSS" и "Базовый курс JavaScript"»⁠ ⁠

Раз пошла такая пьянка, рискну рассказать о сервисе, который сейчас разрабатываю в качетсве пэт проджекта.

А решил я создать сайт с интерактивными курсами по программированию.
На текущий момент уже созданы курсы :
Базовый HTML, (источник freecodecamp, планируется пополняться и расширяться)

Прикладной визуальный дизайн — дополнение к курсу по CSS (источник freecodecamp. Название курса может быть не совсем корректное)

Базовый курс по php — интерактивный курс по php, сборная солянка со всего интернета.
Дабы не спамить ссылками на все курсы — есть еще курс по JS, в разработке курс по SQL и базам данных.
Прекрасно понимаю, что сайт еще достаточно сырой, есть куча недоработок и багов. К сожалению разработка и наполнение ведется в одно лицо.

В планах сделать интерактивные курсы по питону.
Что из недостатков по сайту вижу сейчас:

— курс по sql — решил сделать озвучку видео при помощи голосовых апи (специальный сервис). Звучит немного убого. В будущем хочу перезалить/перезаписть

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

— не весь функционал реализован до конца

— некоторые курсы (в частности JS) содержат не совсем актуальную информацию. По JS в будущем хочу сделать отдельный курс по ES6 (либо актуальному на момент создания стандарту)

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

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

P.S. — За внешний вид просьба не ругать, т.к. я чистый бэк и во фронт почти не умею. Верстка найдена на просторах интернета и адаптирована под свои нужды

Да прибудут с Вами знания

Ответ на пост «Перевел интерактивные уроки "Базовый курс CSS" и "Базовый курс JavaScript"» Программирование, Самообразование, HTML, Основы HTML, Карьера, Языки программирования, PHP, Ответ на пост, Курсы, Курсы программирования, CSS

Этот парень не перестаёт удивлять⁠ ⁠

Этот парень не перестаёт удивлять

О сравнениях⁠ ⁠

О сравнениях IT юмор, Языки программирования, Twitter, Javascript, Python, Картинка с текстом

Бедный Тимми⁠ ⁠

Бедный Тимми Комиксы, Python, Программирование, Языки программирования, IT, IT юмор, Суицид, C++

Встроенные типы данных (их назначение, методы и стандартное поведение) — Строки (часть 2)⁠ ⁠

Теорема о бесконечных обезьянах

Я бы уточнил: скорее поздно или очень поздно, но никак не рано.

В самом начале я уже задавался вопросом «откуда появляется текст». И я даже ответил на него — откуда угодно. В этом ответе сконцентрирована основная боль разработчика, связанная с обработкой текста. Ожидая появления текста извне, нужно готовиться к худшему.

Например, вы просите пользователя ввести его имя и фамилию, не уточняя, как это нужно сделать. При этом, вы ожидаете, что в результате у вас появятся два слова, написанные с заглавной буквы, разделенные одним пробелом. Пускай это будет мой любимый Вася Пупкин. Как поступит Вася, если у него нет чётких инструкций? Да как угодно. Сначала по привычке потопчется по пробелу для успокоения нервов, потом напишет «вася», снова подолбится по пробелу, вспоминая свою фамилию, опомнится, начнёт стирать пробелы, влезет в имя, начнёт исправлять. Короче, идеального результата с первого захода ждать не приходится.

А как поступит Вася, если у него будут чёткие инструкции? Да точно так же! Может он и не глупый парень, но. В любом случае, как бы вы ни инструктировали ваших пользователей, единственное средство получить ожидаемый вами результат — расставить жёсткие ограничения на ввод, а после него ловушки.

Например, такая задача и один из вариантов её решения «в лоб».

»’ Введите два числа. Они могут быть:
— как на одной строке через пробел(-ы), так и на двух;
— как целыми, так и дробными.
Предполагается, что на первой строке введено хотя бы одно число,
и если введено только одно число, то оно введено без пробелов.»’
# ожидаем первый ввод

a = input() # input всегда результирует в строку и ни во что другое

# если в «а» есть пробел
if » » in a:
a = a.split() # разбей «а» по пробелам и сделай список
b = a[1] # b — это второй элемент списка
a = a[0] # перезаписываем a — это первый элемент списка
# если в a нет пробел — ожидай второго ввода
else:
b = input()

# если точка есть в обоих значениях
if «.» in a and «.» in b:
# преобразуем обе строки в числа с точкой
a = float(a)
b = float(b)
# если же точка есть только в одном из значений
elif «.» in a:
# преобразуем одно значение во float, другое в int
a = float(a)
b = int(b)
elif «.» in b:
b = float(b)
a = int(a)
else: # во всех остальных случаях — оба значения инты
a, b = int(a), int(b) # да, так тоже можно заводить значения в переменные

Возможно, кто-то скажет, что это не самый лучший пример, а может быть даже глупый. И я даже отчасти соглашусь. Однако, здесь на примитивном уровне показана проблема «ожидай от юзера чего угодно». Этот пример не является панацеей от слова «совсем», так как он не реализует максимальную защиту данных для последующей обработки. Во-первых, здесь предоставлен достаточно широкий выбор для порядка ввода — это уже плохо. Что, если в самом первом инпуте к нам прилетят два числа, разделённые запятой, а не пробелом, или запятой с пробелом? А что, если первый ввод был верным, а из второго к нам прилетят ещё 2 числа, пускай даже введённые через пробел? Во-вторых, нам могут ввести что угодно помимо чисел. Короче, этот код рассчитан на интеллигентного юзера, который читает инструкции и старательно их выполняет. Но даже с таким юзером этот код рано или поздно упадёт, потому что когда-то юзер обязательно ошибётся.

Такая же история происходит с данными, приходящими из интернета. Интернет большой, люди разные, текста много. Когда-то в 2000-х была мода на «ПаДоНкАфФсКиЙ яЗыК» (до сих пор не пойму, как им не лень было так заморачиваться). Но вот представьте, что к вам прилетела такая строка. Ручками править будем? Или вы работаете со стандартной кодировкой utf-8, а к вам пришла виндовская cp1251 или, упаси бог, koi-8, о которой вы или уже забыли, или знать не знаете? Короче, вариантов уронить код на казалось бы ровном месте — страшное количество.

Главное правило при работе с любыми данными — приводить их к установленному формату или стандарту. К какому именно — решать в каждом случае вам, как разработчику (ну или вашему боссу). Если вы работаете с текстовыми данными, которые приходят откуда угодно, то вам так или иначе придётся сделать так, чтобы до начала их прямого использования по назначению все они были как минимум в одном регистре и в одной кодировке. Даже если вы не хотите — жизнь заставит. И для этого помимо прочего вам понадобятся строковые методы.

Методы строк

Общий принцип вызова методов у объектов в питоне — через точку (я думаю, вы это уже заметили). Если в редакторе кода или в консоли поставить точку после встроенного объекта, у вас гарантированно выпадет список из доступных методов. Так вы всегда можете узнать, что этот объект умеет делать.

Строковые методы — это набор мощных инструментов для работы с текстовыми данными. Часть из них я вам уже продемонстрировал: encode, decode, format. Но это, во-первых, не совсем то, что вам нужно в повседневной жизни, а во-вторых, лишь верхушка айсберга. Нырнём глубже.

Конкатенация (сложение или объединение строк)

Первым делом, нужно вспомнить, что строки умеют «складываться». Я это демонстрировал ранее на примере Hello, world.

Как узнать четное число элементов или нечетное в списке

Как найти, есть ли четное количество элементов или нечетное количество элементов в произвольном списке.

Я попытался list.index(), чтобы получить все индексы. но я все еще не знаю, как я могу сказать программе, что является четным и что является нечетным числом.

7 ответов

Вы можете использовать встроенную функцию len() за это.

Получает длину (количество элементов) любого произвольного списка.

Определите функцию, которая возвращает bool (true или false).

Оператор модуля % дает остаток.

  • Ближайшее к 7 число, которое 2 разделит поровну — 6
  • Который 1 от 7.
  • Таким образом, остаток от 1 до 7 % 2.
  • Любое четное число n даст 0 в качестве остатка, когда n % 2
  • Потому что п разделил поровну на 2

Все, что тебе нужно

Который даст вам длину.

Я думаю, вы могли бы сделать это тогда

Если вы хотите быть побитовым, вы также можете использовать.

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

Ничего себе в python по тесту ниже% 2 быстрее. python должен быть оптимизирован для этого. на некоторых других языках & 1 быстрее. вот почему так важно всегда тестировать.

Глава 4: Корочка Python: структуры кода

Тоже самое что и кортеж всех остальных, только ключи почему-то должны быть не строкой?

Вывод похож на man страницу. Чтоб вывести как строку

Функции — объекты первого класса. Поэтому можно передавать как аргументы

Можно передать функцию как аргумент другой функции

Функция в функции

Замыкания

Замыкание — это функция, которая динамически генерируется другой функцией, и они обе могут изменяться и запоминать значения переменных, которые были созданы вне функции.

a — будет ссылкой на функцию внутри другой функции

Если вызвать — то вызовиться print_say

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

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

Анонимные функции: lambda()

  • edit_text — принимает текст и функцию
    • Для каждого слова в списке вызывается функция
    • выводит слово с большой буквы и с восклицательным знаком

    тоже самое но через лямбду

    • От слова lambda до двоеточия (:) — список аргументов.
    • От : до закрывающей скобки — тело функции

    можно даже в переменную сохранить))

    Генераторы

    Особый тип списков — генераторы

    че такое интересно yield ?

    Смысл генератора — один раз вызвать и он заканчивается)

    Декораторы (обертки над функциями)

    • print_debug — возвращает функцию которая вызывается аж в последней строке

    До этого момента это объект функции, но без вызова

    В первом случае, просто вызов функции напрямую.

    Через декоратор — идет обертка а затем вызов.

    Не любой декоратор должен вызывать функцию

    Можно добавить @название_декоратора в место мануального присваивания

    Как видно, в начале вызов декоратора, потом вызов функции, потом возврат результата

    Можно несколько декораторов

    В таком случае декораторы будут вызываться в обратном порядке, начиная с названия функции

    Пространство имен

    1. Глобальные переменные

    Можно обращаться, но нельзя изменять!

    gloabl

    Для доступа к глобальной переменной, используется global. Тогда можно изменять глобальную в функции

    • locals() — возвращает список локальных имен переменных
    • globals() — возвращает список глобальных имен переменных

    Обработка ошибок: try и except

    Если не указать тип исключения, то будут ловиться все исключения.

    Формат — except тип_исключения as имя

    Собственные исключения

    Создаем класс и вызываем его если встречаем слово все буквы которого с болькой

    Работа с чётными числами в Python: простые советы и примеры

    Чётные числа в программировании — это важная тема, которая имеет применение во многих задачах. Представьте, что у вас есть большой список чисел, и вам нужно отобразить все чётные числа из этого списка. В этом случае использование Python может значительно упростить задачу и сэкономить много времени.

    Python предоставляет удобные инструменты для работы с чётными числами, такие как if-else условия, циклы for и while, а также встроенные функции, которые могут облегчить работу с этими числами.

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

    Примеры работы с чётными числами в Python

    Чётные числа — это числа, которые делятся на 2 без остатка. В Python можно легко работать с чётными числами, используя остаток от деления оператором %.

    Совет: чтобы проверить, является ли число чётным, используйте оператор % и сравните остаток с 0:

    • Если остаток от деления на 2 равен 0, то число чётное
    • Если остаток от деления на 2 не равен 0, то число нечётное
    Число Остаток от деления на 2 Результат
    10 0 Чётное
    7 1 Нечётное

    Также в Python есть функция range(), которая может генерировать все чётные числа в заданном диапазоне:

    • range(0, 10, 2) — генерирует чётные числа от 0 до 10
    • range(2, 100, 2) — генерирует чётные числа от 2 до 100

    Вывести на экран все чётные числа в диапазоне от 0 до 10:

    Результат: 0 2 4 6 8

    Чётность числа и её проверка в Python

    Чётность числа в программировании — это очень важное понятие, особенно в Python. Чётность числа определяется тем, делится ли оно на два без остатка. Если число делится без остатка на два, то оно является чётным, иначе — нечётным. Как правило, при работе с числами необходимо выполнять операции только с чётными или только с нечётными числами. Поэтому проверка чётности числа в Python — это основная задача при работе с числами.

    В Python есть несколько способов проверки числа на чётность. Самый простой способ — это использование оператора % (взятие остатка от деления). Если число делится без остатка на 2, то остаток от деления будет равен 0, что означает, что число чётное. В противном случае результат будет отличен от 0, и число будет нечётным. Другой способ — это использование побитовой операции & (побитовое «И») с числом 1. Если результат равен 0, число чётное, если 1 — нечётное. Этот способ работает быстрее, но менее интуитивный для новичков.

    Проверка чётности числа в Python очень проста и не занимает много времени. Правильное использование операций и функций поможет значительно ускорить работу программы и предотвратить возможные ошибки при работе с числами в Python.

    • Пример проверки чётности числа в Python с использованием оператора %:
    • num = 10
    • if num % 2 == 0:
    • print(«Число», num, «чётное»)
    • else:
    • print(«Число», num, «нечётное»)
    • Пример проверки чётности числа в Python с использованием побитовой операции &:
    • num = 11
    • if num & 1 == 0:
    • print(«Число», num, «чётное»)
    • else:
    • print(«Число», num, «нечётное»)

    Способы создания списка чётных чисел в Python

    Работа с чётными числами может понадобиться в различных задачах программирования. В Python существует несколько способов создания списка чётных чисел.

    • Использование цикла for: один из самых очевидных способов создания списка чётных чисел. Нужно указать диапазон, в котором будут находиться числа, и шаг. Если указать шаг 2, то цикл будет перебирать только чётные числа. Пример:

    print([num for num in range(2, 11, 2)])
    # [2, 4, 6, 8, 10]

    • Использование генераторов: генераторы также позволяют создать список чётных чисел, но с использованием гораздо меньшего количества памяти. Пример:

    print(list(i for i in range(2, 11) if i % 2 == 0))
    # [2, 4, 6, 8, 10]

    • Использование функции filter: функция filter отфильтрует все чётные числа на основе заданного условия. Пример:

    print(list(filter(lambda x: x % 2 == 0, range(2, 11))))
    # [2, 4, 6, 8, 10]

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

    Операции с чётными числами в Python

    Работа с чётными числами в Python может быть легкой и удобной благодаря многим инструментам и функциям, которые предоставляет язык программирования. Одним из важных аспектов являются операции с числами, такие как сложение, вычитание, умножение и деление.

    Сложение: Два чётных числа, при сложении, всегда дают другое чётное число. Для примера, если мы сложим 4 и 6, мы получим 10, которое также является чётным числом. Python имеет встроенную функцию «+», которая позволяет легко выполнить операцию сложения.

    Вычитание: При вычитании чётных чисел, результат может быть как чётным, так и нечётным. Если мы вычтем 8 из 12, мы получим 4, которое является чётным числом. Но если мы вычтем 5 из 10, мы получим 5, которое не является чётным числом. В Python функция вычитания «-«.

    Умножение: Результатом умножения чётных чисел всегда будет чётное число. Например, если мы перемножим 2 на 8, мы получим 16, которое также является чётным числом. В Python эта операция выполняется с помощью функции «*».

    Деление: При делении чётного числа на другое чётное число, результат всегда будет чётным. Если мы разделим 10 на 2, мы получим 5, который не является чётным числом. Но если мы разделим 12 на 6, мы получим 2, который является чётным числом. В Python эта операция выполняется с помощью функции «/».

    Преобразование нечётного числа в чётное в Python

    В Python, для преобразования нечётных чисел в чётные, можно использовать несколько методов. Один из таких методов — добавление единицы, чтобы получить следующее чётное число. Например, для нечётного числа 7 можно добавить единицу, чтобы получить 8 — чётное число.

    Ещё одним методом является умножение на 2. Этот метод тоже легко применить при работе с нечётными числами. Например, для числа 9 можно умножить его на 2, чтобы получить 18 — чётное число.

    Также можно воспользоваться более сложными математическими операциями, чтобы преобразовать нечётные числа в чётные. Например, можно использовать операцию модуля, чтобы получить остаток от деления нечётного числа на 2, и затем вычесть этот остаток из исходного числа — это приведёт к получению чётного числа.

    • Добавление единицы: num += 1
    • Умножение на 2: num *= 2
    • Использование операции модуля: num — num % 2

    Использование данных методов может значительно упростить работу с нечётными числами в Python и помочь в решении различных задач.

    Работа с чётными числами в циклах и условных выражениях Python

    Работа с чётными числами в Python может быть выполнена с помощью циклов и условных выражений.

    Один из самых простых способов проверки чётности числа в Python — это использование оператора «%». Если остаток от деления на 2 равен 0, то число чётное.

    Для того чтобы выполнить набор операций с чётными числами, можно использовать цикл for или while, задавая условие на каждой итерации цикла для проверки на чётность. Таким образом, можно выполнить некоторый код только для чётных чисел в заданном диапазоне.

    Условные выражения также могут быть полезны для работы с чётными числами. Например, с помощью условного оператора «if» можно выполнить определенный код только для чётных чисел. Также можно использовать синтаксис «if/else» для того, чтобы выполнить различный код в зависимости от чётности числа.

    Во время работы с чётными числами также может быть полезен метод range(), который позволяет создать последовательность чисел в определенном диапазоне. Это может быть полезно при использовании циклов while или for для выполнения операций только для чётных чисел.

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

    Функции для работы с чётными числами в Python

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

    Функция для определения, является ли число чётным

    Эта функция называется is_even() и принимает один аргумент — число, которое нужно проверить. Функция возвращает булево значение True, если число чётное, и False, если нечётное.

    Функция для вычисления суммы чётных чисел в списке

    Эта функция называется sum_even_numbers() и принимает список чисел в качестве аргумента. Функция возвращает сумму всех чётных чисел в списке.

    Функция для вывода всех чётных чисел в диапазоне от a до b

    Эта функция называется print_even_numbers() и принимает два аргумента — начало и конец диапазона. Функция выводит все чётные числа в диапазоне от a до b. Для этого можно использовать цикл for, который будет перебирать все числа в диапазоне и выводить только чётные.

    Функция для подсчёта количества чётных чисел в списке

    Эта функция называется count_even_numbers() и принимает список чисел в качестве аргумента. Функция возвращает количество чётных чисел в списке.

    Функция для умножения всех чётных чисел в списке на 2

    Эта функция называется multiply_even_numbers() и принимает список чисел в качестве аргумента. Функция умножает все чётные числа в списке на 2 и возвращает изменённый список.

    Примеры задач на работу с чётными числами в Python

    1. Подсчет суммы четных чисел:

    Напишите функцию, которая будет принимать на вход список чисел и возвращать сумму всех четных чисел в нем. Для этого можно использовать оператор % для проверки остатка от деления на 2.

    2. Поиск четных чисел в диапазоне:

    Напишите функцию, которая будет принимать на вход два числа — начало и конец диапазона, а затем выдавать все четные числа в этом диапазоне. Для этого можно использовать цикл for и проверку остатка от деления.

    3. Удаление нечетных чисел из списка:

    Напишите функцию, которая принимает на вход список и удаляет из него все нечетные числа. Для этого можно использовать цикл while и условное выражение для проверки четности числа.

    4. Проверка четности числа ввода:

    Напишите программу, которая просит пользователя ввести число и проверяет, является ли оно четным. Для этого можно использовать оператор % и условные выражения.

    5. Определение четности и нечетности всех чисел в списке:

    Напишите функцию, которая принимает на вход список чисел и для каждого из них определяет, является ли оно четным или нечетным. Для этого можно использовать цикл for и условные выражения.

    Избежание ошибок при работе с чётными числами в Python

    Работа с чётными числами в Python может быть весьма удобной и простой. Однако, при неправильном использовании, она может привести к ошибкам и проблемам в работе программы. Поэтому, важно знать некоторые простые советы, которые помогут избежать подобных ошибок.

    • Проверка на чётность – перед началом работы с числом необходимо убедиться в том, что оно является чётным. Для этого можно использовать оператор % (остаток от деления). Также, можно использовать функцию divmod(), которая возвращает и остаток от деления, и результат целочисленного деления.
    • Использование правильных операторов – при выполнении операций с числами необходимо использовать правильные математические операторы. Например, для умножения на 2 лучше использовать оператор * 2, вместо Еще по теме: Ноль в Python: что скрывают мифы и как на самом деле работает

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

    Оптимизация работы с чётными числами в Python: советы опытных разработчиков

    Работа с чётными числами в Python – задача, которая может вызвать некоторые трудности, особенно при работе с большими массивами данных. Опытные разработчики делятся своим опытом и дают советы, как упростить этот процесс и оптимизировать его для достижения наилучших результатов.

    Один из главных советов опытных разработчиков – использование генераторов, которые способны значительно ускорить работу с большими массивами данных. Также рекомендуется выбирать наиболее подходящий алгоритм работы с чётными числами в зависимости от конкретной задачи.

    Другой важный аспект работы с чётными числами в Python – использование встроенных функций и методов, таких как «range» или «filter». Они помогают не только ускорить работу с массивами данных, но и сделать её более эффективной и понятной.

    • Использование оператора «%» для проверки чётности числа – это один из наиболее распространённых и простых методов, который позволяет быстро и удобно работать с чётными числами в Python.
    • Ещё один полезный совет – использование битовых операций для работы с чётными числами. Они позволяют не только быстро определить чётность числа, но и выполнить ряд других математических операций.

    В целом, оптимизация работы с чётными числами в Python может быть достигнута путём использования различных методов и инструментов, а также правильного подхода к выбору оптимального алгоритма для конкретной задачи. Это позволяет не только сократить время работы, но и повысить эффективность и качество результирующего кода.

    Полезные ресурсы для изучения работы с чётными числами в Python

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

    Для начала стоит обратить внимание на документацию Python, в которой описаны все встроенные функции, которые могут быть полезны при работе с чётными числами. В частности, это функция divmod(), которая делит одно число на другое и возвращает результат в виде кортежа, в котором первый элемент — это целая часть, а второй — остаток от деления.

    Также существуют специализированные книги и онлайн-курсы по Python, в которых есть разделы, посвящённые работе с числами. Многие из них предлагают не только теоретические знания, но и практические задания для закрепления материала.

    Если вы хотите проверить свои знания в реальном времени, то рекомендуется обратиться к онлайн-сервисам, которые предлагают задачи на работу с чётными числами в Python. Некоторые из них даже предлагают возможность сравнить свой результат с результатами других участников.

    • Официальная документация Python: https://docs.python.org/3/library/functions.html#divmod
    • Книга «Python для сложных задач»: https://ru.bookmate.com/books/ZvtmVaxL
    • Онлайн-курс «Python: основы и применение»: https://stepik.org/course/512
    • Онлайн-сервис «Codewars»: https://www.codewars.com/kata/search/python?q=even

    Вопрос-ответ:

    На что нужно обратить внимание при работе с четными числами в Python?

    В первую очередь, нужно помнить, что четные числа делятся на 2 без остатка. Также, нужно учитывать, что операции с четными числами могут быть более оптимальны, чем с нечетными, например при использовании битовых операций.

    Как проверить, является ли число четным в Python?

    Для проверки четности числа в Python используется оператор деления по модулю на 2 (%). Если результат равен нулю, то число четное. Например: if num % 2 == 0: print(«Четное»)

    Можно ли использовать битовые операции для работы с четными числами в Python?

    Да, это возможно. Например, для проверки четности числа можно использовать битовую операцию AND (&) с числом 1. Если результат равен нулю, то число четное. Например: if num & 1 == 0: print(«Четное»)

    В чем преимущества использования четных чисел при написании программ на Python?

    Использование четных чисел в программировании на Python может значительно ускорить вычисления и снизить потребление ресурсов компьютера. Например, при операциях над списками четные индексы могут быть обработаны более эффективно, чем нечетные. Также, использование битовых операций может существенно ускорить выполнение задач.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *