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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Лучше это сделать так:
    str1 = "АБВГДЕ"
    set_of_char = set("ЕОРФ")
    for c in str1:
        if c in set_of_char:
            print("OK")

    Ещё лучше так:
    str1 = "АБВГДЕ"
    set_of_char = set("ЕОРФ")
    if set(str) & set_of_char:
        print("OK")
    Ответ написан
    Комментировать
  • Как получить значение того, что находится в скобках?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import re
    print(re.search(r'.*? \((\d+)\)', "example text (123456)").group(1))
    Ответ написан
    2 комментария
  • Как сделать web морду для выполнения python скриптов?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Если отчет генерируется долго или не стабильно по времени, то имеет смысл его "заказывать" через веб интерфейс, а потом скачивать готовый файл. В этом случае вам нужно сделать отдельную модель ТаскОтчета. Внутри неё записываются параметры построения отчета и статус готовности. Отдельный воркер на бэкенде смотрит регулярно на запрошенные отчеты и запускает ваш скрипт, после отработки обновляет статус задачи.
    GUI для всего этого можно сделать на основе джанговских джинериков и админки.

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

    Мне больше нравится второй вариант, конечно.

    Полагаю вам много не неясно из изложенного. Задавайте конкретные вопросы. Здесь помогут.
    Ответ написан
    Комментировать
  • Как сделать простой скрипт Скачать файлы по списку Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Зачем вам питон? Воспользуйтесь стандартной утилитой wget. Она это умеет.
    wget -i link1.txt
    Ответ написан
    2 комментария
  • Выдаёт ошибку AttributeError: 'NoneType' object has no attribute 'get' почему и как это исправить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    item.find("a", class_="js-item-slider")
    У вас скорее всего вот этот вызов возвращает None. А у него нет метода .get
    Вообще в таких случаях нужно полностью приводить трейс-бэк, чтобы нам не приходилось гадать на кофейной гуще.
    Ответ написан
    Комментировать
  • Как заменить символ строки на индекс этого символа в массиве?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    alpha_map = {c: str(i) for i, c in enumerate(alpha, 1)}
    word = input()
    new_word = ''.join(f'{idx} ' if idx else orig for idx, orig in ((alpha_map.get(c), c)  for c in word))
    print(new_word)
    Ответ написан
    Комментировать
  • Для чего нужен полиморфизм?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Полиморфизм - это широкое понятие.
    Идея его в том, чтобы скрыть лишние детали реализации и сделать код более универсальным.
    К примеру у вас есть абстрактный класс Фигура, у него есть абстрактный метод нарисовать(куда: Канва). Этот метод нельзя запускать, он абстрактный. Не понятно как рисовать абстрактную фигуру.
    Зато у фигуры есть потомки: Круг(Фигура) и Квадрат(Фигура). У них метод "нарисовать" перекрыт конкретной реализацией. Это виртуальный метод (есть такой термин в некоторых ЯП).
    За счет полиморфизма мы можем нарисовать любую фигуру не зная как она рисуется. Мы знаем только как с ней общаться на уровне ее интерфейса.
    Ответ написан
    4 комментария
  • Повтор сообщения Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну да, вы ж его в цикле отправляете. А цикл по списку. А в списке два элемента. Два раза и отправляет.
    Вы чего хотели-то?
    Имеется в виду негативная ветка внутри цикла. Если оба значения i не равны mes, то будет дважды выполнена ветка else
    Ответ написан
    Комментировать
  • Pyhton PIL почему не работает нормально?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from PIL import Image
    
    q = input("Название картинки: ")
    img = Image.open(q)
    img = img.convert("RGB")
    (w,h) = img.size
    print(w*h)
    with open("img.txt","w") as file:
        for y in range(h):
            for x in range(w):
                r, g, b = img.getpixel((x,y))
                file.write("#" if (r, g, b) == (0, 0, 0) else "_")
            file.write("\n")
    
    print(img.getpixel((0,0)))
    input("Enter что-бы завершить: ")
    Ответ написан
    5 комментариев
  • Как отправить запрос, содержащий русские буквы pymysql?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1. Используйте уже третий питон.
    2. Используйте utf-8 в коде.
    3. Если уж приспичило, используйте юникодные строки.
    4. Не пользуйтесь виндой. Там-поди до сих пор зоопарк из cp866, сз1251 и utf-8 в консолях, шелл скриптах и везде...
    5. Приспичила винда, да и вообще, примите за правило: на входе люьой текст приводите к юникоду, на выходе выводите в целевую кодировку.
    Из какой и в какую кодировку - читайте в параметрах потокв ввода/ывода. Если там не указано, попробуйте различить связан ли поток с файлом или с терминалом. В файл можно писать любую кодировку, главное правильно сконвертировать и не смешивать. В терминал писать нужно либо в юникоде (если указана кодировка в параметрах потока, то питон сам преобразует), либо в целевой кодировке, которую можно настроить/угадать, предположить и подобрать с нескольких попыток.

    Но лучше всего пользуйтесь третьим питоном. Там с юникодом все гораздо проще и однозначнее, чем во втором.
    Ответ написан
    Комментировать
  • Не работает telegram бот на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Для себя я решил эту проблему забавным и простым образом.
    У меня есть VDS для хостинга сайта. С неё телеграм доступен и не блокируется. Я превратил этот сервер в собственный прокси для апи телеграма простым конфигом для nginx:
    server {
        listen tg.my_own_domain.net:8079;
        server_name tg.my_own_domain.net;
        access_log /var/log/nginx/tg.my_own_domain.net-access.log;
        error_log /var/log/nginx/tg.my_own_domain.net-error.log;
        location / {
    	proxy_set_header X-Forwarded-Host $host;
    	proxy_set_header X-Forwarded-Server $host;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_pass https://api.telegram.org/;
    	client_max_body_size 100M;
        }
    }

    Очевидно, что моё решение именно вам скорее всего не подойдёт, но кому-то может оказаться полезным, ведь для его реализации достаточно иметь лишь свою VDS вне зоны блокировки, свой домен (хотя не обязательно) и больше ничего. Nginx у вас там уже скорее всего стоит, но и поставить его не долго.

    Для желающих более правильно решить этот вопрос могу посоветовать найти на docker hub готовый образ с телеграммовским прокси или вообще универсальным прокси.

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

    Кстати, чтобы вообще ничего не менять в коде бота и его конфигурации, можно на машине, где будет работать бот прописать в hosts ip зеркала телеграммовского API на домен api.telegram.org.

    Чужим непроверенным зеркалам API я бы не особо доверял, кстати.
    Ответ написан
    Комментировать
  • Почему в python вылетает ошибка list index out of range?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы вот здесь делаете присвоение.
    n = h
    n.remove(n[j])
    if h[j] not in n:
        print(h[j])

    В питоне переменные работают не так как в других языках программирования. n и h - это после присвоения два имени одного и того же объекта (списка). Удаляя из него элемент вы тут же его пытаетесь получить в этом же объекте из под другого имени.
    Вместо присвоения такого, делайте так:
    n = h[:]
    Это скопирует список, а не создаст еще одно имя старому.
    Ответ написан
    3 комментария
  • Как определить входит ли определённый отрезок времени в другой?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы можете сравнивать даты целиком на больше и меньше не приводя к строке:
    current_date >= start_date and current_date <= end_date

    А еще можно воспользоваться спорным фирменным питоновским синтаксисом:
    start_date <= current_date <= end_date
    Если все эти переменные типа datetime, то всё будет как надо.
    Ответ написан
    Комментировать
  • Как спарсить и скачать все картинки с сайта?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите в сторону консольной утилиты wget. Ее вполне можно поставить и под виндой. Она (утилита) уже умеет скачивать сайт целиком вместе с картинами следуя по ссылкам со страницы на страницу.
    Прочитайте ее документацию.
    Там есть опция рекурсивной загрузки -r.
    Ответ написан
    Комментировать
  • Как реализовать fifo из списков в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Не используйте такой некорректный способ удаления:
    bue.remove(bue[0])
    Метод remove удаляет элемент по значению, а не по индексу.
    Используйте bue.pop(0) для извлечения первого элемента и, если надо bue.pop(-1) для извлечения последнего. Метод возвращает извлеченный элемент.
    FIFO - означает First In First Out - это классическая очередь. Первый вошедший элемент выйдет первым. Своеобразная модель ЖКТ здорового человека. ЖКТ алкоголика - это так называемый Дек, извлекать элементы из которого допустимо с двух сторон. Почему вы тут используете слово FIFO я не понимаю.

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

    Дерзайте.
    Однако мне кажется, что вам еще рано решать такую задачу. Стоит почитать любую книгу про обучение программированию. Не важно даже, чтобы именно на питоне. Или вот есть неплохой онлайн курс за рубль.
    Ответ написан
    1 комментарий
  • Что нужно знать, чтобы решить эти две задачки на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нужно примерно следующее:
    • Что такое умножение.
    • Что такое таблица.
    • Что такое таблица умножения, зачем она бывает нужна и как устроена.
    • Надо понимать основы алгоритмизации: что такое алгоритм, какие есть базовые алгоритмические структуры (последовательное выполнение, ветвление, цикл) и для чего они нужны.
    • Нужно понимать синтаксис питона хотя бы на базовом начальном уровне. Можно почерпнуть из практически любой книги Марка Лутца про питон. Можно поискать вообще любую книга а-ля питон для чайников - этого будет достаточно для решения вашей задачи.
    • Нужно понимать концепцию цикла, вложенных циклов.
    • Нужно понимать базовую арифметику.


    Для постижения всех этих премудростей нужно планомерно и прилежно заниматься или иметь достаточно усидчивости, чтобы прочитать несколько статей википедии и книгу по питону.
    Судя по тому, что с этим вопросом вы пришли на этот ресурс, у вас всего этого нет. Это плохие новости. Предлагаю вам разозлиться на меня, на себя и на весь этот сложный мир, психануть и сидя на карантине освоить всё выше перечисленное и погрузиться в удивительный мир, где для производства чего-то стоящего и работающего не нужно ни тяжелых дорогих машин, ни станков, ни сложного оборудования, ни долгих лет учебы, а лишь компьютер и толика энтузиазма.
    Ответ написан
    Комментировать
  • Ошибка "SyntaxError: multiple statements found while compiling a single statement", в чем проблема?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    number == 79
    Вы сравниваете несуществующую переменную с константой 79. Используйте присвоение: "="
    И заодно расскажите, как это у вас работает в голове? Буквально следующей строчкой есть присвоение, написанное верно. Вам оказалось проще прийти на этот сайт и задать дурацкий вопрос, вместо того, чтобы секунду подумать и внимательно посмотреть код в том месте, куда вам заботливо указал интерпретатор. Как это так? Вы серьёзно?!
    Ответ написан
    7 комментариев
  • Как сделать, чтобы бот на telethon приветствовал в личку заходящих на канал?

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from functools import reduce
    x = input('Число:')
    a = input('Цифра:')
    assert a.isdigit() and len(a) == 1, f'Неправильная цифра {a!r}'
    assert x.isdigit(), f'Неправильное число {x!r}'
    print(reduce(int.__mul__, map(int, x)))  # long claps for @longclaps
    print(f"{a} {'есть' if a in x else 'нет'} в {x}")
    Ответ написан
  • Как узнать, что дополнительно устанавливалось к программе на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    pip freeze > requirements.txt
    Но папку питона на всякий случай тоже сохраните. И в пользовательском каталоге домашнем артефакты питона посмотрите. Не знаю где там в Винде питон либы хранит.
    Однако из вашего описания все же не ясно достаточно ли будет этих мер. Понятнее будет если покажете программу.
    Ну и фрилансер ваш схалтурил, похоже. Ни деплой не автоматизировал ни документацию не написал?
    Ответ написан
    Комментировать