Задать вопрос
Ответы пользователя по тегу Python
  • Ошибка конвертирования SQL. Как исправить?

    @o5a
    Не особо знаком с pyodbc, но насколько понимаю, проблема в передаче значения без кавычек, т.е. select получается
    SELECT ACTIVE FROM [dbo].[BLAST_BLOCK] WHERE NAME =  4-20

    вместо корректного
    SELECT ACTIVE FROM [dbo].[BLAST_BLOCK] WHERE NAME =  '4-20'

    Лучше использовать передачу параметров вместо форматирования строки (именно для передачи значений полей), в таком случае не должно быть проблем с типами.
    cursor.execute('SELECT {} FROM {} WHERE NAME =  ?'.format(column, db_table), obj)
    Ответ написан
    2 комментария
  • Модифицируйте калькулятор, чтобы, помимо кнопок, действие определялось (вызывалось) по КОМБИНАЦИЯМ клавиш?

    @o5a
    Нужно добавить слежение за нажатиями клавиш и отдельную функцию для обработки
    # функция реакции на событие нажатия
    def key_pressed(event):
        # event.char - содержит строку нажатой клавиши
        print('pressed key:', event.char)
        # соответственно отфильтруйте все ненужные клавиши, а остальные передавайте в свой logicalc()
    
    app = Main(root)
    app.bind("<Key>", key_pressed)
    app.focus_set()
    app.pack()
    root.mainloop()
    Ответ написан
    Комментировать
  • Как из БД выбрать случайного юсера, но чтобы он не повторялся?

    @o5a
    Если за это время пользователи в базе не меняются, то один раз считать из базы id всех пользователей через
    cursor.execute("SELECT user_id FROM Users").fetchall()
    в список, перемешать его через random.shuffle и затем выбирать id по порядку
    Ответ написан
    Комментировать
  • Почему Label в tkinter не меняет аттрибут text при вызове функции?

    @o5a
    self.label_text.config(text = 'Text2')

    Или другой вариант, привязать к тексту переменную, при обновлении переменной изменится и текст
    l_text = StringVar()
    self.label_text = Label(self.cnv_img, textvariable=l_text, bg='gray', width=26).place(x = 0,y = 0)
    # для изменения
    l_text.set('Text2')
    Ответ написан
  • Почему бот не работает?

    @o5a
    Не понятно, зачем бесконечный цикл. Если цель - обработать исключения, лучше делать это для отдельных блоков. Запрос погоды лучше вынести в отдельную функцию, там же обработать исключение на случай проблем с API погоды или неправильного города. Повторяющиеся создания owm удалил. Так должно работать.

    from pyowm.owm import OWM
    from pyowm.utils.config import get_default_config
    import telebot
    
    TOKEN = токен телеграм
    OWM_KEY = API ключ OWM
    
    config_dict = get_default_config()
    config_dict['language'] = 'ru'
    
    bot = telebot.TeleBot(TOKEN)
    
    def get_weather(location):
        try:
            owm = OWM(OWM_KEY, config_dict)
            mgr = owm.weather_manager()
            observation = mgr.weather_at_place(location)
            w = observation.weather
            temp = w.temperature('celsius')["temp"]
    
            answer = answer = f"В городе {location} сейчас {w.detailed_status}\n"
            answer += " Температура сейчас в районе "+ str(temp) + "\n\n"
    
            if temp < 5:
                answer += "Сейчас ОЧЕНЬ ХОЛОДНО!"
            elif temp < 10:
                answer += "Сейчас холодно, одевайся!"
            elif temp < 20:
                answer += "Температура средняя,оденься потеплее!"
            else:
                answer += "Температура нормальная, одевайcя как хочешь!"
        except Exception as e:
            print('Error:', e)
            answer = 'Ошибка такая-то' # или любой другой, на случай неправильного города
    
        return answer
    
    # что под функцией с ошибкой подразумевалось не понятно, но допустим так
    def do_something_erronous():
        1/0
    
    @bot.message_handler(content_types=['text'])
    def send_echo(message):
        # логику работы с OWM переносим в отдельную функцию
    
        # запрашиваем текст о погоде в указанном городе
        answer = get_weather(message.text)
    
        bot.send_message(message.chat.id, answer)
    
    # что осталось от изначального блока исключений, если он Вам еще зачем-то нужен
    try:
        do_something_erronous()
    except Exception as e:
        print('Error:', e)
    
    bot.polling(none_stop=True)
    Ответ написан
    Комментировать
  • Как создать из списка подсписки и посчитать частоту повторения?

    @o5a
    Насколько понял задачу, нужно постепенно перебирая равные куски списка найти наибольшие, при которых все куски будут иметь одинаковые "уникальные индексы".

    Изменил код на поиск наименьшего периода.

    # рассчитываем "уникальные индексы" списка
    def unique_index(arr):
        elems = []
        for e in arr:
            if e not in elems:
                elems.append(e)
        indexes = {v:i for i,v in enumerate(elems)}
        result = [indexes[e] for e in arr]
        return result
    
    # собственно функция поиска максимального числа
    def find_min_period(arr):
        for i in range(3, len(arr)//2+1):
            # если делится на части
            if not len(arr)%i:
                # "уникальный индекс" 1-го куска
                unique = unique_index(arr[:i])
                # делим на части и проверяем, чтобы для каждой "уникальный индекс" был одинаковый
                for j in range(i, len(arr), i):
                    # при первом несовпадении сразу переходим к следующему делителю
                    if unique != unique_index(arr[j:j+i]):
                        break
                else:
                    # если все куски оказались с одинаковыми "уникальными индексами" выдаем наше число элементов
                    return i
        return None
    
    print(find_min_period([0, 1, 1, 2, 1, 3, 4, 4, 5, 4, 5, 6, 6, 3, 6]))
    # 5
    print(find_min_period([0, 1, 1, 2, 1, 1, 3, 4, 4, 40, 4, 4]))
    # 3
    print(find_min_period([0, 1, 1, 2, 1, 1, 3, 4, 4, 4, 4, 12]))
    # None
    Ответ написан
  • Как создать матрицу с количеством вхождений слова в предложение?

    @o5a
    Разбить весь текст на предложения, а внутри на слова. Затем 2 цикла один по предложениям в этом вложенном словаре, другой - по списку уникальных слов. И для каждого уникального слова считать кол-во его вхождений в текущее предложение (через count).
    Через list_comprehension будет выглядеть так
    [[sentence.count(word) for word in unique_words] for sentence in sentences]

    где unique_words - это собственно список уникальных слов
    sentences - вложенный список слов по каждому предложению.

    Разбить на предложения и слова наверное проще регулярными выражениями
    # по предложениям
    re.split(r'[\.!\?]', text)
    # по словам
    re.split(r'[\n \.,!\?]', text)

    Удачи.
    Ответ написан
    7 комментариев
  • Почему функция возвращает только первую итерацию?

    @o5a
    Не нужно использовать одинаковые переменные для разных по сути объектов, как минимум будете путаться, как максимум получите подобные ошибки (речь в данном случае про s, которую используете как список, но потом ее же используете как переменную для чтения строки из файла).

    Если цель была прочитать все строки с разбитием по пробелам во вложенный список, то сделайте так (consetsen в данном случае вообще лишний):

    def f_readlist():
        with open('flats_list') as file_flats:
            s = list()
            for row in file_flats:
                s.append(row.split())
        return s
    print(f_readlist())
    Ответ написан
    Комментировать
  • Как исправить ошибку AttributeError: 'str' object has no attribute 'str'?

    @o5a
    Ошибка говорит о том, что text это строка, и у нее нет метода str
    test = test.replace('', '')

    Если была цель преобразовать некоторый объект в строку, то синтаксис такой
    test = str(test).replace('', '')

    Не понятно для чего там этот ничего не значащий replace
    Ответ написан
    Комментировать
  • Как удалить символы из переменной строчного типа в питоне?

    @o5a
    word.translate(str.maketrans('', '', '-,.()?"@'))
    Ответ написан
    Комментировать
  • Как выровнять этот календарь?

    @o5a
    formatmonth(2015, 3, w=3)
    Ответ написан
    Комментировать
  • Список грузов и создание функции?

    @o5a
    emilio213, а сами как думаете, если использовать в любом варианте только .append(..) то получится реализовать совершенно разные требуемые функции?
    1. должны быть сохранены в переменной типа списка «load»

    2. удалять элементы из списка «загрузок»

    3. вставлять элементы в список «загрузок»

    Вы в курсе, что делает append?

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

    # как в задании упоминалось, список называется load, а не gruz
    load = []
    
    # добавление в список
    def add_positions():
        pass
    
    # удаление из списка
    def remove_positions():
        pass
    
    # вставка в определенную позицию списка
    def insert_positions():
        # используем бесконечный цикл ввода, пока не закончится ключевым словом "конец"
        print("Введите разделенные пробелом индекс для вставки и наименование груза")
        while True:
            inp = input('> ')
            if inp == 'конец':
                break
            else:
                # если не выбран "конец", пытаемся сделать вставку груза в указанную позицию списка
                # стоит добавить проверку ввода пользователя (н-р, вместо индекса текст и т.п.)
                idx, name = inp.split(maxsplit=1)
                load.insert(int(idx), name)
    
    
    # бесконечный цикл основного меню
    while True:
        # печатаем основное меню и даем пользователю выбрать возможные действия
        print('1. Добавить позиции\n2. Удалить из списка\n3. Вставить в список')
        option = input('Выберите опцию: ')
        # в зависимости от выбранной позиции запускаем нужную функцию (добавить/удалить и т.п.)
        if option == '1':
            add_positions()
        elif option == '2':
            remove_positions()
        elif option == '3':
            insert_positions()
        else:
            break
    
    # работа с меню окончена, печатаем получившийся список грузов
    print('Список грузов:')
    for item in load:
        print(item)
    input('...')
    Ответ написан
    Комментировать
  • Как найти все пары анаграмм?

    @o5a
    Проверки
    common_letters == len(x1)
    недостаточно для слов с повторяющимися буквами, например "рамма марма" оно не посчитает анаграммой. Для сравнения анаграмм можно использовать или отсортированные по буквам слова (sorted("кот") == sorted("ток")) или collections.Counter() , он возвращает словарь с частотой использования букв в слове, оба позволят однозначно подбирать анаграммы.

    Вариант через отсортированные строки (группируем результаты в словарь, позволит избавиться от повторного прохода по списку слов, позволит группировать сколько угодно анаграмм, а не только 2)
    from collections import defaultdict
    
    text = "кот нос ток сон клад рама вход книга вдох рамма марма мрама"
    arr = text.split(' ')
    
    result = defaultdict(set)
    
    for word in arr:
        sort_word = ''.join(sorted(word))
        result[sort_word].add(word)
    
    # выводим только парные результаты (2+ анаграмм)
    print([v for k,v in result.items() if len(v) > 1])
    
    #[{'кот', 'ток'}, {'нос', 'сон'}, {'вход', 'вдох'}, {'рамма', 'мрама', 'марма'}]
    Ответ написан
    Комментировать
  • Как реализовать ввод и вывод данных с виджета и на python?

    @o5a
    def on_button(self):
        start = int(self.entry.get() or '10')
    
        for x in range(start,-1,-1):
            time.sleep(1)
            print(x)
    Ответ написан
    Комментировать
  • Почему парсер выдает ошибку?

    @o5a
    find_all возвращает список найденных значений, поэтому нельзя напрямую к нему по цепочке применять find. Проще всего изменить до рабочего варианта, используя list comprehension (используя Ваш же синтаксис):

    'podkategoria': [item.find('div', class_='menu-categ').find('div', class_='menu-categ__header').find('a', class_='menu-categ__title').find('div', class_='menu-categ__title-text').get_text() for item in item.find('div', class_='hor-menu__submenu mega').find('div', class_='mega-m').find('ul', class_='mega-m__inner').find_all('li', class_='mega-m__item')]


    Т.е. формируем список из результатов find_all.

    Кстати, вместо цепочки find.find ... можно использовать select (синтаксис можно найти в документации, там записывается цепочка тэгов). Ищет аналогично, но выглядит более компактно и читабельно. В данном случае это бы выглядело так:

    'podkategoria': [p.text for p in item.select('div.hor-menu__submenu.mega div.mega-m ul.mega-m__inner li.mega-m__item div.menu-categ div.menu-categ__header a.menu-categ__title div.menu-categ__title-text')]


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

    {'НОВИНКИ': ['НОВИНКИ НИГМА', 'НОВИНКИ МАХАОН', ...], 'КНИГИ': ['ИД Мещеряков', 'ЭКСМО', 'АСТ' ... }
    Ответ написан
    Комментировать
  • Как найти сумму всех цифр числа?

    @o5a
    Частая ошибка в неработающих рекурсивных функциях - забывают, что она должна вернуть значение, а не просто вызваться. Это как раз тот случай, посмотрите на строку digital_root(result)
    Ответ написан
    Комментировать
  • Как создать функцию по замене рисунка в виджете Tkinter?

    @o5a
    Сложно вот так сказать, куда именно добавить изменения среди этих кусков кода, но чтобы картинка сразу изменилась, в управляющей функции надо использовать label.configure
    # запуск изменения картинки
    topImg = PhotoImage(file="new_img.png")
    l.configure(image=topImg)
    l.image = topImg
    Ответ написан
    2 комментария
  • Вместо деталей выполнения кода пишет Process finished with exit code 0. Что делать?

    @o5a
    Чтобы что-то было, нужно не просто вызывать функции, а сохранять куда-то возвращаемый ими результат.
    btn1 = pyautogui.locateOnScreen("...")
    btn1_center = pyautogui.center(btn1)
    pyautogui.click(*btn1_center)
    
    # насколько понимаю, можно напрямую кликнуть там, где найдет иконку
    pyautogui.click("my_icon.jpg")
    Ответ написан
    1 комментарий
  • Как отправить несколько фото в одном сообщении(Telegram-Bot)?

    @o5a
    нужно передавать список объектов InputMediaPhoto
    bot.send_media_group(message.chat.id,
        [telebot.types.InputMediaPhoto(open(photo, 'rb')) for photo in ['photo1', 'photo2']])
    Ответ написан
    Комментировать
  • Как ускорить (оптимизировать) код на Python?

    @o5a
    1. По поводу самого алгоритма поиска простых - есть более эффективный, Решето Эратосфена, в базовом исполнении он достаточно простой, приводить не буду, легко находится поиском. Это на случай, если действительно упирается в скорость.

    2. Вывести строку в виде a1+a2+... можно с помощью join()
    print("+".join(lst))

    3. Требование лексикографически минимального результата написано не до конца понятно, предположу, что достаточно вывести с отсортированными лексикографическими (т.е. по строке) значениями, т.е. просто сортируем наш список простых чисел по их строковым значениям, например так (map используется для перевода цифровых значений нашего списка в строковые):

    print('+'.join(sorted(map(str, lst))))
    Ответ написан
    Комментировать