Задать вопрос
Ответы пользователя по тегу Python
  • Ошибка При Создании Пинг Понга На Пайтон?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы читайте текст ошибки.
    То так то эдак пишете, то с малой, то с большой буквы название пакета.
    там критично:
    from kivy.app import App
    from Kivy.uix.widget import Widget


    kivy и Kivy для питона различаются. Пакет называется с маленькой буквы, а вы во второй строчке его импортируете с большой. Само собой он не найден.
    Вот вам об этом и в ошибке написано: "No module named 'Kivy'"
    File "C:\Python\main.py", line 2, in
    from Kivy.uix.widget import Widget
    ModuleNotFoundError: No module named 'Kivy'
    Ответ написан
  • Как в Python вычислить ближайшие точки по имеющимся GPS-координатам?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    ищет ближайшие рестораны, координаты которых есть у меня в словаре

    Если ваш бот планирует расти и поддерживать много всяких POI, в том числе помимо ресторанов, то имеет смысл вынести всё это в БД.
    Удобно использовать postgres с расширением postgis. В составе этого расширения есть оптимизированные функции поиска ближайших точек, кроме того в БД удобно хранить сами POI, их можно импортировать из OSM.

    Кроме этого не во всех подобных задачах правильно использовать геометрические метрики для нахождения ближайших точек.
    Какая-то точка может быть ближе к заданной геометрически, но она может оказаться на другой стороне реки, а крюк через мост до нее будет очень большим.
    Для этого вам лучше использовать какое-нибудь решение, учитывающее роутинг. Например OSRM. Такие сервисы зачастую умеют строить матрицы расстояний между точками. OSRM, кстати, отлично развёртывается в докере, на основе данных OSM он может строить как пешие маршруты (если, конечно, ваш регион покрыт пешими тропами в OSM), так и в других модальностях.
    Полезным артефактом от OSRM будет также геометрия маршрута и путевые точки по ходу его следования. Также OSRM в своём API имеет быстрый метод динамической привязки координат к графу дорог. Может пригодиться, скажем, для отслеживания курьера и предупреждения о его прибытии.
    Ответ написан
    Комментировать
  • Почему не записывается лог файл?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    всё правильно, с "a" должно создаваться. Вы просто, скорее всего, не нашли его. Он создаётся в текущем каталоге. сделайте обычный print(os.getcwd()) рядом с записью, и увидите путь, где лежит ваш файл.

    Но это плохая идея так писать логи. Для этого есть модуль logging. Вот здесь всё очень детально и с примерами изложено.
    Ответ написан
    Комментировать
  • Как вычислить время между записями-событиями в БД?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Если у вас нельзя дважды подряд уснуть не просыпаясь или, наоборот, проснуться дважды не засыпая, то вам помогут оконные функции. Вот, специально посмотрел, они есть в MySQL.
    Вам нужно из событий отфильтровать только чередующиеся засыпания/просыпания, размером окна охватывать соседние две записи, если первая - "засыпание", то это будет период сна, если "пробуждение", то период бодрствования.
    Вроде бы именно то, что вам нужно.

    Как делать запрос из питона вы найдёте в каждом первом примере найденном через гугл.
    Ответ написан
    Комментировать
  • Есть ли компилятор для python в оптимизированный байт-код?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    То есть вы хотите, чтобы хреново написанный питоновский код подвергался оптимизации при трансляции в байткод?
    Плохая идея неявной магией и постобработкой закидывать огрехи в качестве кода.
    Байткод формируется под вполне конкретную виртуальную машину. Производительность вашей программы зависит от качества и эффективности вашего кода, а также от скорости виртуальной машины, исполняющей байт-код. В случае с питоном вы можете воспользоваться Java-машиной перейдя на jython. Это также добавит возможностей для интеграции с подключением java-кода.

    Если в проекте на питоне производительность стала для вас бутылочным горлышком, это значит что либо вы выбрали не тот язык и стоит писать на Си, либо вы плохо работали над архитектурой: не применяли горизонтального масштабирования, неправильно разделили трудоёмкие задачи на отдельные процессы, допустили излишнюю связность или мутабельность, где их можно было избежать воспользовавшись сильными сторонами Питона и обойдя слабые.
    Ответ написан
    Комментировать
  • Где использовать super?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    С помощью super() можно вызывать любые родительские методы, не только конструктор.
    Кстати, __init__ -- это не конструктор, строго говоря. Он не создаёт инстанс. Инстанс создаётся в __new__, это и есть, фектически, конструктор. А __init__ -- это инициализация. Хотя в общем-то всем пофиг и конструктором его тоже все называют. Для простоты.

    В питоне есть множественное наследование. super создаёт прокси-объект с интерфейсом к предкам.
    Ответ написан
  • Как отсортировать в словаре данные по возрастанию по одному из ключей?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    У вас это строка. И сортировка происходит в алфавитном порядке.
    Вы можете вот так сортировать:
    key=lambda x: int(x['sick'])
    Ответ написан
    Комментировать
  • Почему пайчарм в тексте ошибки пишет, что нельзя померить длину числа, хотя четко виден список, а не число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Потому, что число - это не строка. У него нет длины.
    Если вам надо посчитать количество десятичных знаков числа, то делайте так:
    len(str(12345)) # 5
    Ответ написан
    Комментировать
  • Будет ли подобное использование eval безопасным?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    такой eval нельзя использовать лишь потому, что это небезопасно. Фактически, если использование eval не усугубит ситуацию, то почему бы не использовать.
    Довольно сумасшедшая идея ходить с открытой раной по улице. Но в защищенной среде в больнице между перевязками - это штатная ситуация, хотя и не отменяет необходимости быть осторожным.

    Оголённые провода в жилом помещении - это недопустимо, но в фазные шины с правильной маркировкой в электрощитовой, наверно, допустимы.
    Это касается не только eval.
    Однажды я слышал от студента примерно следующие рассуждения, когда ему требовалось написать простейший калькулятор:
    eval использовать нельзя (небезопасно), поэтому я пользовательский ввод записываю в питоновский файл и этот файл импортирую как модуль...
    Ответ написан
    7 комментариев
  • Как записать данные в файл на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Во-первых, надо форматировать код специальным тегом.
    Во-вторых, у вас переменная l локальна и не видна снаружи функции.
    В-третьих, чтобы что-то записать в файл, лучше пользоваться такой конструкцией:
    with open("log.txt", "w") as f:
        f.write('any text')

    При этом файл каждый раз открывается с перезаписью, то есть очисткой всего что там было до открытия.
    Чтобы не удалялось, нужно открывать так: open('filename.log', 'a')
    Тогда файл не будет пересоздаваться поверх старого и можно дописывать к нему данные.
    В-четвертых, в питоне есть отличный модуль logging. Нагуглить статью про его использование элементарно.
    И мне не придётся это всё писать...

    Читайте книжку. Ну что вы все лезете программировать обучаясь на слухах, сказаниях и преданиях вместо чтения статей и книг, где всё изложено коротко и лаконично.
    Ответ написан
    5 комментариев
  • Как решить такую задачу в Питоне?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Попробуйте структурировать своё решение.
    Вы верно подметили быстрые предварительные критерии отрицательного ответа:
    • кусков меньше 4
    • длина цепи не кратна четырём

    Уже хорошо.
    Дальше вы можете пробовать строить квадрат цепью от угла и при каждой неудачной попытке мысленно "перецеплять" очередное звено из начала в конец цепи.
    Вам осталось придумать критерий остановки по неудаче. Не обязательно же перецеплять ВСЕ звенья цепи, достаточно делать это пока не (ЧТО?).
    Думайте. Вам не нужен готовый ответ.
    Ответ написан
  • Как спарсить эту JSON страницу?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    ну читайте же внимательно:
    print(json['result']['line'])
    TypeError: list indices must be integers or slices, not str

    json['result'] у вас это не словарь, а список, а к нему обращаться можно только по целочисленному индексу.
    print([item['line'] for item in json['result']])
    Ответ написан
    Комментировать
  • Как удалить пустой список в списке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    лучше так:
    elms = [item for item in elms if item == []]
    А если вообще всё пустое надо убрать то так:
    elms = list(filter(None, elms))
    Ответ написан
    Комментировать
  • Что использовать для обучения на питоне?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    чтобы сеть отличала подачу (как написаны тексты)

    Святая наивность!
    По такой четкой постановке грех не решить задачу одной строчкой вообще.
    Готовой библиотеки для "сравнения подачи текста (как написано)" вы не найдёте.

    Пробуйте посчитать суммарную статистику N-грамм для всех подходящих и неподходящих текстов. Возьмите топ этой статистики (m самых часто употребимых в корпусе размеченных текстов n-грамм), зафиксируйте сортировку n-грамм и формируйте m-мерные вектора для каждого текста.
    На получившихся векторах обучайте многослойную нейронку.
    Экспериментируйте со скрытыми слоями, с размером вектора m, размером обучающей выборки, чтобы избегать переобучения и получить достаточный коэффициент правильных ответов.

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

    А так у яндекса есть какой-то инструментарий.
    Вот еще https://www.nltk.org/
    Либу для нейронок на питоне вообще найти не проблема. Любую берите с которой проще освоиться.

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

    Консультируйтесь со специалистами. Всё на свете нейронками не закидаешь.
    Ответ написан
    4 комментария
  • Как из двух массивов сделать один?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Что-то все какие-то сложно перевариваемые решения постят.
    Вот же понятно все и читабельно:
    full = {company['id']: company for company in first_list}
    for extra in second_list:
        item = full.setdefault(extra['company'], {})
        item.update(extra)
        item.pop('id', None)
        item.pop('alias', None)
    
    result = list(full.values())
    Ответ написан
    Комментировать
  • Как получить определённый кусок карты по координатам и в масштабе?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Уверен, что яндекс не в восторге от попыток скачать их тайлы для каких-то нелицензионных нужд, но вы можете сделать это притворившись браузером и соблюдая квоты, чтобы не вызвать подозрение у сервиса. Реальные квоты вам никто, конечно, не объявит и вам придётся пользоваться прокси и определять квоты эмпирически.
    Однако особой причины брать данные именно у яндекс-карт нет. OSM достаточно хорош и вам уже дали ссылку, где можно почитать про https://overpass-turbo.eu/ - инструмент для фильтрации загрузки геоданных OSM. Снапшот базы OSM можно скачать и полностью.
    База OSM - это векторные данные и метаданные гео-объектов. Существует несколько открытых бесплатных решений для рендера этих данных в тайлы. Настроить это рендер уже нетривиальная задача, поскольку нужно знать какие данные и каким стилем отображать, чтобы карта получилась информативной и эстетичной. Всегда можно найти готовые примеры стилей для рендера, а докер позволяет не ставить огромное количество зависимостей руками, но получить сервис рендера тайлов относительно легко.

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

    Есть такой сервис: https://nakarte.me/
    Весьма удобный интерфейс, чтобы быстро собрать карту в масштабе из готовой подложки и нескольких треков.
    Думаю им можно пользоваться и программно формируя по документации урлы для запросов.
    Ответ написан
    Комментировать
  • Для чего тут используется super, если класс наследуется только от object?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну строго говоря особой нужды нет. Такое делают, например, если в будущем собираются сменить базовый класс.
    Но если у вас __init__ вообще пустой и кроме супера ничего нет, то совсем бесполезно.
    В третьем питончике, кстати, уже вот так можно:
    class Container():
        def __init__(self):
            super().__init__()
    Ответ написан
    4 комментария
  • Как в python сделать чтобы скрипт-родитель продолжал работать даже есть в скрипт-дитё выдал ошибку?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Импортируйте и запускайте код в блоке try-except.
    Ответ написан
  • Поясните что значит в sorted(values, key=lambda x: (abs(x-one), x)) последнее значение x(после запятой)?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваша функция возвращает не один элемент, а все, отсортированные в порядке удаления от заданного.

    key=lambda x: (abs(x-one), x)
    это функция, по значениям которой сортируются элементы массива.
    Значение этой функции - кортеж из двух элементов: первый - это модуль разности, а второй это текущий элемент списка.
    Кортежи можно сравнивать на > и <. При этом они сравниваются поэлементно слева направо.
    Смысл добавления x в том, что расстояние от -1 до 0 и до -2 одинаковое и сортировка не различала эти два элемента между собой. Когда вы стали сортировать по ключевому кортежу, то при равенстве расстояния порядок определяется значением самого элемента. Выбирается сперва тот, что меньше (в вашем случае -2).
    Ответ написан
    6 комментариев