• Что такое range() в Python 3?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В целом всё верно. range реализоан как класс, при его инстанцировании (или вызове в качестве функции. что в питоне, суть, одно и тоже) формируется инстанс этого класса, который поддерживает протокол получения итератора.
    Если воспользоваться этим протоколом (iter(range(3, 33))), то получим итератор - инстанс класса range_iterator.
    Ещё инстанс range позволяет получать доступ к элементам по индексу, делать срезы, инвертировать, получать количество элементов, проверять на вхождение элемента и т.д.
    Ответ написан
    1 комментарий
  • В чем проблема с выводом?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Для большей ясности стоило бы приести пример выхлопа команды
    occtl --json show users
    Чтобы отвечающим не приходилось ставить VPN-сервер и подключать тестовых пользователей.
    Сходу видно, что вы запрашиваете результат в формате json, а затем парсите его грепами и awk'ом, что крайне бессмысленно и беспощадно. Почему бы не использовать jq для этой цели, а не пытаться забить шуруп молотком.
    Приведенная вами проблема связана с тем, что, вероятно, выхлоп в виде json происходит без гарантии порядка ключей, а ваш способ доставать из него данные весьма варварский.

    Да и проблемы в таком подходе на этом не ограничатся, ведь список пользователей может измениться между итерациями и даже между получаением имени и ip.
    Следовало бы единоразово получить все сырые данне, а затем вытаскивать из них нужное.
    Ответ написан
    Комментировать
  • Как удалить отступ добавляемый help для docstring?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Никак. Все отступы ровненько отрезаются форматировальщиком help и добавляется один отступ.
    Зачем вам этой дичью заниматься приспичило?
    Ответ написан
  • Как воспользоваться указателями в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Тут, похоже, имеется непонимание, как в питоне устроены переменные и чем они отличаются от переменных (и отчасти указателей) в Си.
    В Си (и не только, в паскале, например, тоже) переменная - это коробочка, которая уже есть и в неё можно что-то положить подменив какой-то мусор, который там был раньше, потом её содержимое можно заменить.
    В Питоне переменноая похожа на ярлычок. Ярлычок - это имя, а всё вокруг - это объекты. На один объект можно повесить много ярлычков (представьте себе ярлычок от чайного пакетика). Каждый ярлычок - это отдельное имя или позиция в списке, кортеже, словаре...) Обхект один, а ссылок на него может быть много. Ярлычок можно уничтожить или перевесить на другой объект. Когда не остаётся ни одного ярлычка, привязанного к объекту, он становится кондидатом на удаление и освобждение памяти.
    Вам в соседнем ответе показали как можно элегантно обменять именами два объекта в питоне. Да, именно, поменяются местами имена, но объекты как были так и останутся. Это как поменять таблички на кабинетах директора и главбуха.
    Так что отчасти все переменные в питоне - это умные слабые ссылки.
    Ответ написан
  • Какие модули к ардуино нужны для распознования объектов и построения карты?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    На хабре была статья о том, как получать изображение с оптического датчика компьютерной мыши.
    https://habr.com/ru/post/128972/
    По идее единственным этим датчиком вполне можно было бы обойтись для прототипа, ведь мышь умеет оценивать перемещение даже по чистому листу.
    Можно добавить энкодеры на колёса и применить метод Калмана для повышения точности и устойчивости определения координат. Для хранения растровой картинки с тем разрешением, с которым "видит" оптический сенсор мыши 600-1200dpi в стоковой ардуинке не хватит памяти, так что можно действительно гнать данные (смещения и картинки) на комп (или смартфон), а там уже обрабатывать и отсылать команды для моторов робота.
    Можно взять ESP-cam и приколхозить линзу с подсветкой, тогда можно пробовать формировать картинку на девайсе, например на флешке.
    Эффективнее сделать штангу с подвижным сенсором и ровно едущего робота, или взять сенсор от готового сканнера. Лет 20 назад у моего друга был ручной сканнер, который нужно было возить по бумаге, чтобы отсканировать лист. По вращению колёс сканнер понимал с какой скоростью его тянут. Если вести аккуратно, получалась вполне сносная картинка, но только в случае одного прохода.
    Само собой с оптическим сенсором от мыши у вас робот будет сканить А4 долго и муторно, причем в ЧБ.
    Вообще проще фотать лист сверху смартфоном=).
    Ответ написан
    Комментировать
  • Как узнать причину отключения WIFI?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Запустите в терминале
    dmesg -w
    и оставьте висеть так.
    Когда вайфай снова рубанётся - мотрите что пишет.
    По тому что напишет можно потом погуглить.
    Ответ написан
    Комментировать
  • Какой дистрибутив linux выбрать для домашнего сервера?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А какая разница какой дистрибутив, если под ваше применение удобнее всё поднимать в докер-контейнерах, а система хоста может быть любой и даже просто чистой.

    Если подъём всей домашней серверной инфраструктуры сводится к клонированию приватного репозитория с докер- и компоуз-файлами и запуском всего одной строчкой, то переехать на новый сервер становится тривиальной адачей, а вся конфигурация и зависимости прозрачно задекларированы в докерр-файлах.

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

    Так что операционка на хосте - пофигу какая. В контейнерах можно тоже убунту или альпайн какой-нибудь. там уже не сильно важно, ведь каждый контейнер решает конкретную узкую задачу.
    Ответ написан
    Комментировать
  • Где посмотреть идеи для проекта OpenSource?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Если часто встречаете вопросы "Что написать" на форумах, то это не значит, что задающие их люди способны что-то написать. Скорее наоборот.
    Уже есть в сети всякие там кикстартеры. шде люди ищут финансирование для своих проектов, а также есть гитхаб, где люди могут собраться в работе над опенсорс-проектом и поработать.
    Если нет какого-то известного сайта, знакомящего разработчиков и пользователей, дающего им пообщаться, то это всего лишь означает. что разговаривать им не о чем.
    Людей на планете дофигища и всем сто-то нужно в той или иной степени. Идей масса, продуктов платных и бесплатных разного качества тоже полно, зато людей, которым вообще пофигу что писать, причем забесплатно, видимо, раз, два и обчелся. Не наберётся их на целую социальную сеть.

    Да и в чем проблема? Вот есть фотошоп - платный и не дешевый, а есть немалая куча "бесплатных аналогов фотошопа". Самый, наверно, известный - это Gimp. Нужен ли кому-то хороший графический редактор - безусловно. Много ли таких людей? Очень! Есть ли опенсорс проекты в этой тематике? Огромное количество!
    А вот с качеством у них так себе, хотя многие вполне юзабельны и во многом спообны аменить хорошие платные аналоги.
    Слышали выражение "Блеск и нищета опенороса"? Вот лучше не скажешь. Огромное кооличество человекочасов работы энтузиастов и штатных программистов, сидящих на своих окладах, пишут очень большое количество открытого кода. Можно садиться и писать любой проект. Нет никакого дефицита проектов и идей. Просто бери и пиши любой ткрытый проект с гитхаба, или любой аналог популярного платного. И тех и других в избытке!

    Зачем делать социальную сеть, которая даёт то. чего и так навалом? Она никому не нужна.

    Да, если нужны идеи проектов, то так и формулируйте вопрос. Огромное количество людей готовы делиться своими идеями. Идей много, без реализации они гроша выеденного не стоят, а на все проекты жизни не хватит их реализовывать, поэтому я совершенно не понимаю почему люди "боятся рассказать свои идеи, чтобы их не украли".
    К примеру я всегда с удовольствием делюсь своими идеями. которых накопилось уже не мало. У меня не хватит никаких ресурсов, чтобы их се реализовать. так что если кто-то какую-то из них "украдёт", я буду только рад, ведь, если повезёт и "ворюга" не просто балабол, а реально что-то может сделать, то я смогу при жизни попользоваться своими поплощенными идеями. Обычно идеи лежат в облатси интересов своих авторов. а значит автор не отказался бы попользоваться их воплощенями.

    Так какой смысл прятать идеи. если выгоднее ими делиться?!
    В общем за идеями приходите, рассказывайте что интересно - накидаем.
    Ответ написан
    Комментировать
  • Что нужно установить и сделать, чтобы начать пользоваться?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Консоль линукса и команду grep. Там много аргументов и возможностей.
    Команда sed - это фактически консольный потоковый текстовый редактор. Очень мощный, но сложный в понимании. Проще освоить питон и пользоваться для ваших целей вот такими однострочниками:
    $ man py | py 're.compile("\w{10,}").findall(sys.stdin.read())'
    completion
    expression
    DESCRIPTION
    expression
    interpreter
    compatible
    expression
    expression
    arithmetic
    automatically
    distribution

    Что тут происходит:
    Берём справку по консольной тулзе pythonpy, конвейером передаём в эту утилиту, которая выполнит кусочек питоновского кода. Код читает всё, что приходит на вход и находит все слова длинной 10 и более символов.
    Ответ написан
    Комментировать
  • Как выбрать хостинг для бота на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    На firstvds.ru уже несколько лет держу минимальную машинку за ~200р/мес.
    Хватает на небольшой сайт на вордпрессе, тррентокачалку, раздачу аудиокниг родственникам в виде mp3 и rss фидов, и, иногда, даже майнкрафт сервер на нём поднимаю на троих детя.
    Всё запускается в докер-контейнерах. Сам в шоке, что оно там ещё и шевелится и помещается в памяти.
    Даже засомневлся, но нет, действительно гиг оперативы.
    В общем берите минимальную тачку на KVM в пробном режиме, если всё заведётся и поместится, просто будете платить, а нет - выберете машину помощнее. Мало ли что ваш бот там делает, может картинки нейронной сеткой обрабатывает...
    Есть несколько ресурсов в сети, которые помогают выбрать VPS. Вот попался с первой попытки: https://poiskvps.ru/
    Ответ написан
    Комментировать
  • Как реализовать проверку чисел на близость?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    min(x/num[-1] for x in num[:-1])
    Но что вы этим хотели добиться. я так и не понял: num.*
    Ответ написан
    2 комментария
  • Чему равен параметр i после объявления lambda функции?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    После объявления ничему.
    Функци в питоне - это объект первого рода, до её вызова аргументы не определены и контекст не создан, а создаётся контекст при каждом вызове.
    Ответ написан
    2 комментария
  • Как скриптом обрезать фото?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Готовое обрезание фоток "под паспорт" не встречал, но есть замечательная библиотека opencv и с её помощью такую задачу можно решить:
    https://docs.opencv.org/3.4/db/d28/tutorial_cascad...
    А как обрезать фто по заданным координатам - вообщене не проблема.
    Ответ написан
    Комментировать
  • Как задеплоить телеграм бота на VPS?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    На винде запускать - это бред.
    Если на VPS планируете держать только бота, то лучше оформить его в виде пакета. Настройте CI\CD и он сам будет развёртываться на вашем сервере прикаждом релизе в системе контроля версий.
    Лично я разворачиваю бота в докере, потому что боту обычно нужна БД, какие-то приложения рядом... Всё установть и настроить - это отдельная история и спустя пару лет бесперебойной работы вам или вашему заказчику, возможно, придётся переехать на другой хостинг или переустановить и настроить все заново, а из памяти всё уже выветрилось. Спасает описание всей конфигурации в виде docker-compose.
    Тогда переезд на ноый сервер вообще тривиален. Также легко поднять тестовый клон бота на локальной машине для отладки и работать он будет в той же среде и с той же конфигурацией, что и на сервере.
    Особенно это удобно, если приходится приментяь какие-то конвертеры графики или звука.

    Если надо поднять дв абота на разных фреймворках или с разными зависимостями, то докеризация тоже спасает от необходимости возиться с venv. А зависимости бывают еще и у сторонних внешних утлит.
    Ответ написан
    Комментировать
  • Как ускорить код?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно заменить список на множество для начала:
    def checkPrime(start, end):  
        numbers = set(range(start, end + 1))  
        for i in range(2, int(end ** 0.5) + 1):  
            for j in range(i * i, end + 1, i):  
                numbers.discard(j)  
        return sorted(numbers)

    Если упорядоченность не нужна, то можно и сортировку убрать.
    Ответ написан
    6 комментариев
  • Почему именно 5в напряжение в адаптерах для смартфонов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем, собстенно вопрос? Почему именно 5 выбрано стандартом, а не 4 или 6? Или, скажем, 12, 24, 36 или 100 вольт?
    Нужно понимать, что есть такая штука, как закон Ома. Сила тока прямо пропорциональна напряжению и обратно пропорциональна сопротивлению. Сопротивление - это свойство проводника, зависит (если не слишком углубляться) от того, что за метал, от его толщины и длины. А ещё у нас всегда ограничена мощность источника тока.
    Мощность - это количество энергии, которая расходуется, преобразуется или передаётся за единицу времени.
    Вот у нас есть кабель и нам нужно передать через него 5 ватт, чтобы достаточно быстро зарядить смартфон. Ка краз получается 5 вольт * 1 ампер = 5 ватт. То есть по нашему кабелю должен идти ток 1 ампер. Это достаточно большой ток, и, если у нашего кабеля будет слишком большой сопротивение (то есть он будет длинным, или тонким, или не из меди), то большАя часть передаваемой энергии будет тратиться на бесполезный нагрев кабеля.

    Если хочется поднять мощность вдвое, чтобы еще быстрее зарядить смартфон, придётся либо удвоить ток, а при этом удвоится учетверится энергия (ведь зависимсть от тока квадратичная), уходящая на нагрев и чтобы это го не происходило, нужно делать толще кабель, покрывать его серебром (у которого низкое сопротивление), делать провод короче. Всё это дорого и неудобно.
    Второй вариант - это удвоить напряжение, тогда при напряжении 10 вольт и том же токе в 1 ампер передаваться будет уже 10 ватт мощности при тех же потерях на нагрев проводов.
    Получается, что за счет увеличения напряжения можно снижать потери на передачу энергии по тем же тонким. гибким недорогим проводам, что и раньше, НО!

    Но. Чем выше напряжение, тем более высоки требования к изоляции между проводниками с разным потенциалом. А ещё химичесие источники обычно выдают не такое уж и большое напржение, приходится включать их последовательно, отчего возникают сложности с балансировкой при заряде\разряде, габаритами, конструкционной сложностью элементов... Кроме того, p-n-переходы в транзисторах и диодах не способны выдерживать больших напряжений, потому что может возникнуть пробой. Такая же проблема может возникнуть и в катушках индуктивности и в конденсаторах. Конденсаторы становятся более громоздкими, нужно больше изоляции, а транзисторы нельзя делать очень маленькими.

    Получается такая вот дилемма. Электроника между током и напряжением балансирует как между Сциллой и Харибдой, пытаясь сэкономить на том-на сём.

    Там, где нужны большие мощности, риходится задирать напряжение. Именно поэтому у нас в розетке 220в, а между фазами 380. Чтобы закипятить двухкилловатный чайник приходится пропускать ток почти 10 ампер, но нам важно, чтобы грелся чайник, а не провода от розетки до чайника и в стенах. Поэтому провода толстые, гораздо толще вашего шнурочка зарядки от мобильника или дорожек на плате внутри него.

    Там, где важна в основном логика и мощность требуется не сильно, лишь для подсветки экрана или яркого светодиода вспыщки, выбирается небольшое напряжение 5 в. В процессорах и вообще в интегральных микросхемах приходится использовать еще меньшее напряжение 3.3в, чтобы не пробивали очень тесно проложенные дорожки внутри. Снижать еще сильнее напряжение уже проблематично, поскольку есть ограничения снизу на открытие p-n переходов. Просто не хватает напряжения для переброса электронов в слоях полупроводнка.

    Так что не 5 вольтами едиными жива электроника. Где-то, например для питания светодиодов, не так важн о напряжение, как ток. Он должен быть в заданных рамках, поскольку превысив возможности рассеивать тепло мы буквально сожжем p-n-переход, поэтому приходится варьировать напряжение так, чтобы ток сохранялся в допустимы пределах.
    В автомобиле стандарт 12 вольт и во многих грузовиках 24. Про розетку я уже говорил и там отдельная тема почему и как устроены электро-сети разных стран. В вашем ноутбуке и смартфоне целый зоопарк напряжений. Раньше даже встречались устройства, где подсветка экрана требовала несколько киловольт.
    Мощность при этом не большая, а изоляция рассчитана на то, чтобы ничего не пробило, но это отдельная цепь внутри устройства и в каждом месте нужно то напряжение, на которое рассчитаны соответствующие участки цепи.
    Ответ написан
    2 комментария
  • Найдите все пифагоровы тройки, в которых все числа находятся в диапазоне [1; 5000]?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Начните с самого простого не оптимизированного решения:
    Вам нужно перебрать все целые A от 1 до 5000. Для каждого такого A вы можете перебрать все целые B от A+1 до 5000. Если корень из суммы их квадратов - целое число, то это, очевидно, тройка пифагора. Но вам нужно, чтобы C было меньше или равно 5000.
    Для отимизации вы можете не спешить извлекать корень, а сперва проверить его на превышение 5000*"2. Так вы немного сэкономите. Ещё вы каждый раз можете вычислять правую границу внутреннего цикла, так вы будете искать решение среди вдвое меньшего количества вариантов.
    Не знаю какие там требования сейчас по эффективности решения задачь, но для школьников такое решение я бы считал приемлемым. Да и не для школьников. Хотя н апитоне такая задача будет считаться с десяток секунд без оптимизаций. Однако временнЫе ограничения не были озвучены. Эдак и методом Монтекарло можно решать=)
    Ответ написан
    7 комментариев
  • Как найти и забрать нужные данные из json?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Что значит разная вложенность?
    Покажите какие монстры получаются и в чем конкретно проблема? Задача-то тривиальная: пройти циклом по списку, проверять условие и выдавать результаты через yeld, или собиать их в коллекцию.
    Ответ написан
    Комментировать
  • Как достать ссылку?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Так, например.
    py "json.load(urllib.request.urlopen('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-09-24'))['url']"
    Ответ написан
    Комментировать