Ответы пользователя по тегу Python
  • Почему кириллица неправильно отображается?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В заголовке Content-Type надо также указывать и кодировку.
    Разумеется, в Питоне указывать любую кодировку кроме UTF-8 совершенно бессмысленно.
    Соответственно, заголовок должен быть
    Content-Type: text/html; charset=utf-8
    Плюс в первом принте лишние символы.
    Я не очень понимаю, какой софт используется, но в целом вот такой код выведет в нужном порядке - заголовок, пустая строка, две строки одна под другой
    print("Content-Type: text/html; charset=utf-8\r\n")
    
    print("Hello world!<br>")
    print('Привет мир!')
    Ответ написан
    1 комментарий
  • Как сделать чтобы при вводе неправильных данных выводилась ошибка и пользователь вводил данные сначала?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем случае это реализуется с помощью цикла.
    Например, делаем бесконечный цикл, из которого выходим либо если введено корректное значение, либо (такой вариант тоже желательно предусмотреть) если пользователь больше не хочет работать с программой.
    Скажем, в консольной программе можно написать как-то так
    while True:
        data = input("Enter data: ")
        if data == '':
            print("Empty input. Exiting...")
            quit()
        if ( здесь пишем проверку):
            print("Please enter correct value")
        else:
            break


    В итоге ниже этого цикла в data будет корректное значение.
    проверок и сообщений об ошибках может быть несколько.
    Ответ написан
  • Как агрегировать данные по элементам вложенного массива?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В цикле.
    Все операции над массивами производятся в цикле.

    Чтобы посчитать количество элементов, вам не нужно Node.js/Pandas/MS SQL,PostgreSQL и их диалекты/Mongo а так же SQL, JAVASCRIPT и MONGODB

    Также, перебор массива в цикле с трудом можно отнести к DATA SCIENCE.
    Скорее - к первому классу начальной школы программирования.

    Попробуйте освоить эту чрезвычайно сложную операцию.
    В одном цикле вы перебираете записи массива, и в еще одном, вложенном, цикле перебираете list_cart и создаете новый массив, в котором ключом является элемент из list_cart, а значением - счетчик.
    Ответ написан
    Комментировать
  • Ошибка переводчиков или в оригинале такая же ошибка?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ошибка, причем дважды.
    В любых версиях Питона управление потоком выполнения осуществляется с помощью отступов.

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

    Эмпирическое правило: Если try используется только для того, чтобы вывести ошибку, то его ставить не надо.
    Для ученика, который тренируется на кошках, подойдет и трассировка.
    В серьезной же программе общением с пользователем должны заниматься только специально предназначенные для этого блоки программы. А не любая строчка, которой вдруг захотелось это сделать.
    Ответ написан
    Комментировать
  • Как понять что я готов к ООП?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если спрашиваете, то не готовы.

    В этом вопросе важно понимать, что изучив всего лишь объектный синтаксис, вы столь же готовы писать ООП, сколь готовы профессионально играть в шахматы, изучив как ходят фигуры.
    Главное в ООП - не синтаксис. А взаимодействие объектов. Композиция, наследование, инкапсуляция. Связность, связанность. Это все довольно сложно, и по усилиям, которые требуется затратить на обучение, запредельно отличается от изучения основ процедурного программирования.

    Так что просто запаситесь терпением, набирайтесь опыта в программировании, и постепенно разбирайтесь с ООП - сначала на примере чужих классов и книжек. Мартин, Фаулер - вот это вот всё.
    Ответ написан
    Комментировать
  • Как распарсить JSON в котором несколько блоков?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Есть такой анекдот, "Иван Соломонович, вы или крестик снимите, или трусики наденьте".
    Вот он очень подходит к вашему случаю.

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

    {"NumberStat":[{"ManNumDetection":[{"AreaID":1,"Channel":0,"EndTime":"2023-04-14 10:59:59","EnteredSubtotal":0,"ExitedSubtotal":0,"StartTime":"2023-04-14 10:00:00"}],"SN":"6M0D6EFPAG24E66","Uploading Time":"2023-04-14 11:00:49"}]}
    {"NumberStat":[{"ManNumDetection":[{"AreaID":1,"Channel":0,"EndTime":"2023-04-14 11:59:59","EnteredSubtotal":0,"ExitedSubtotal":0,"StartTime":"2023-04-14 11:00:00"}],"SN":"6M0D6EFPAG24E66","Uploading Time":"2023-04-14 12:00:49"}]}

    или, как рекомендуют в других ответах, переформатировать эту стену текста как единый JSON массив
    Ответ написан
  • Как передать в функцию с sqlite запросом, название переменной?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых вам надо научиться не путать имена колонок в SQL с переменными в Python.
    А во-вторых послушать Сергей Горностаев
    И сделать примерно так.
    def test(user_id):
       cur.execute("UPDATE users SET sqlid = sqlid - 10 WHERE user_id = ?", (user_id))
       conn.commit()
    test(345723)


    А если вдруг вы решили, что sqlid надо обязательно передавать через переменную, то внятно объяснить, почему вы так считаете.
    Ответ написан
    Комментировать
  • Как декодировать текст?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Правильный ответ
    print(base64.b64decode(text + '=' * (-len(text) % 4)))

    Все же написано в сообщении об ошибке. Строка не добита символами = до нужной длины, чтобы быть кратной 4
    Ответ написан
    Комментировать
  • Как запустить python через php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Главная проблема музыки в России начинающих программистов в том, что они "перерывают интернет" в поисках решения своей задачи. А надо - в поисках того, как разобраться, в чем проблема.
    Потому что само решение и так уже есть.

    Как минимум - в начало пхп скрипта и смотреть на ошибки
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    Ответ написан
    4 комментария
  • Как при работе с MongoDB стандартизировать коллекции?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Да, принято. Без этого, фактически, с Монгой вообще работать невозможно.
    Больше того, учитывая, что (в отличие от нормальных баз данных) имена ячеек всегда хранятся вместе с данными (то есть дублируются столько раз, сколько документов хранится базе), то у монгеров принято давать ключам имена из одной-двух букв для экономии памяти. И эти сокращения тоже надо потом транслировать в человеческие имена. То есть база данных для работы с базой данных становится не прихотью, а жизненной необходимостью.

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

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

    Флаг в руки и барабан на шею. Безумству храбрых поем мы песню.
    Ответ написан
    Комментировать
  • Как вывести данные из бд через строки?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я тоже долго тупил, но потом понял. Скорее всего, человеку требуется аналог fetch_assoc в РНР. То есть словарь, в котором уже есть имена полей, которые не нужно будет писать руками.
    sqlite_connection = sqlite3.connect('sqlite_python.db')
    sqlite_connection.row_factory = sqlite3.Row
    cursor = sqlite_connection.cursor()
    sqlite_select_query = """SELECT * from sqlitedb_developers"""
    cursor.execute(sqlite_select_query)
    records = cursor.fetchall()
    records = [dict(row) for row in records]
    print(records)

    В итоге получится это самое загадочное "все получить одним returnprint" без цикла.
    Ответ написан
  • Какой максимальный диапазон чисел в for i in range?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Господи, ну нельзя заниматься программированием с такими представлениями о логике.
    Причем не о какой-то там хитрой математической логике, а о логике своих действий.

    Неужели так трудно проверить свое собственное утверждение?
    for i in range(200000, 500000):
        if (i < 200005):
            print(i)
        if (i == 200005):
            print('...')
        if (i > 499995):
            print(i)


    Где здесь 0? Где здесь 208?
    С чего вы взяли, что эти цифры вообще берутся из этого цикла, а не откуда-то еще?

    Программист всегда должен проверять свои догадки.
    И если они не подтвердились, то искать другое объяснение своим проблемам.
    Ответ написан
    1 комментарий
  • Как в mysql.connector отключить добавление одинарных кавычек?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Никак.
    Собирать запрос через f-word и выполнять без параметров.
    Ответ написан
    Комментировать
  • Добрый день. Вопрос по Python связанный с вводом данных. Вводить число надо так чтобы программа принимала числа со знаками после запятой?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Давайте посмотрим на код вашей программы.
    a, b, c, d = map(int, input().split())

    Как вы думаете, что делает функция, выделенная жирным шрифтом?
    Ответ написан
    Комментировать
  • Объясните/заккоментируйте как работает эта програмка?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    такую программу можно написать в 5 раз короче
    и именно такое решение от вас и ожидается - примитивное, показывающее что вы понимаете самые базовые элементы языка - циклы, работу с переменными, строками.
    Никакие списки тут не нужны.
    От вас требуется продумать в голове алогоритм, и потом реализовать его на Питоне.

    Главное здесь - алгоритм
    Попробуйте для начала изложить его просто словами.
    Ответ написан
    21 комментарий
  • Ошибка sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type. Как исправить?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну хотя бы немного думать своей головой надо, а не просто копировать какие-то строчечки из интернета.
    Метод fetchall() возвращает данные какого типа?
    а в execute() надо передавать данные какого типа?

    Вот реально - неделю назад вы писали код, который был мало того что почти рабочим - он был осмысленным.
    Я понимаю, если бы вы не умели работать с базой данных. Но у вас уже был рабочий код!
    А здесь опять какие-то самолеты из соломы. Попытка получить скалярную переменную с числом из запроса, который возвращает ВСЕ колонки ВСЕХ строк таблицы.

    Для начала вам надо забыть про питон и телеграм, а сесть за консоль SQL
    и научиться писать все запросы, которые понадобятся
    Ответ написан
  • Как распаковать вложенный список?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Наверное, надо проверять элемент исходного списка, является ли он списком, и только тогда распаковывать?
    Если уровень вложенности у нас один, то так и написать
    chained = []
    for item in posl:
        if isinstance(item, list):
            for subitem in item:
                chained.append(subitem)
        else:
            chained.append(item)

    Это будет самый кондовый алгоритм. Задачу можно реализовать и короче, и оптимальнее. Но при изучении программирования надо сначала научиться составлять самому простейшие алгоритмы и их реализовывать, а не просто пытаться использовать по очереди какие-то магические заклинания - авось какое-то сработает. А если не сработает - то идти на Хабр, чтобы тебе его написали.
    Любой красивый код следует применять только тогда, когда ты понимаешь, как он работает, что делает внутри. А если не понимаешь, то лучше сначала разобраться, реализовать тот же алгоритм руками. Иначе ты будешь не программист, а обезьяна с гранатой.

    Если вложенность неограниченная, то придется познакомиться с таким понятием, как рекурсия.
    Ответ написан
    Комментировать
  • Почему возникает TypeError: must be str, not int?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В качестве аргумента count() ожидает строку, а не число
    Ответ написан
    Комментировать
  • С чего начать изучение python, веб-сайты, приложения,читы или что-то другое?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вот для меня это тоже проблема - не знаю, что ответить, когда задают этот вопрос.
    Пока остановился на ботах. Рекомендую делать бота для телеги. По крайней мере, это очень популярное направление, ну и можно что-то интересное замутить. Бот для изучения английского, например.
    spoiler
    Судя по вопросам здесь, питон+телеграм - это новый пхп+веб. Абсолютное дежавю: точно так же, как 10 лет назад, просто пудовищное количество людей, которые абсолютно не понимают, что они делают, но им всё надо прямо щас.


    Джангу не рекомендую, это ступенькой выше. Это и так-то боль, а если не знать Питона, то совсем будет плохо. Джангу лучше учить после пхп. Потому что на пыхе можно сделать веб-сайт так же просто, как на Питоне - калькулятор. И уже потом, примерно поняв, что к чему, можно садиться за джангу, чтобы имея общее представление об SQL, HTTP, устройстве веб-сайта -уже переходить на ORM, роутинг, MVC.
    Ответ написан
  • Как изменять переменную каждый цикл?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это не нужно делать.
    "Переменная", имя которой может меняться в цикле - это индекс массива. Списка или коллекции.
    В данном случае a - это список, и обращаться к его элементам можно по индексам, a[1], a[2], и так далее

    Соответственно, код будет
    a = []
    i = 1
    while i <= 5:
      a[i] = i
      i += 1
    Ответ написан
    1 комментарий