Ответы пользователя по тегу Python
  • Подключение клиета к серверу не по локалке, как сделать?

    @bbkmzzzz
    Бежать читать про открытие/перенаправление портов, различия между серым/белым ip адресом, NAT и vpn, скорее всего
    Ответ написан
    Комментировать
  • Как создать из списка подсписки и посчитать частоту повторения?

    @bbkmzzzz
    В лоб, еще можно крутить, но работает. Вроде)
    def get_list_part_count(lst: list, start_divider):
        # ищем наименьшее количество частей списка
        ln = len(lst)
        while True:
            if ln % start_divider != 0:
                start_divider += 1
            else:
                break
        return start_divider
    
    
    def find_max_item_val_in_dict(dc: dict):
        # ищем максимальное значение элемента словаря
        # предполагаем, что отрицательных чисел в наших списках не будет
        max_val = -1
        result_item = None
        for key in dc:
            if dc[key] > max_val:
                max_val = dc[key]
                result_item = key
        return result_item
    
    
    def split_list_to_parts(lst, part_count):
        # делим список на части, заданные в параметре part_count
        part_len = int(len(lst) / part_count)  # длина одной части
        y = []  # результирующий список
        for multiplier in range(1, part_count + 1):
            #  заполняем наш список срезами исходного
            y.append(lst[(part_len * multiplier) - part_len:part_len * multiplier])
        return y
    
    
    def find_periodic_seq(seq, start_divider):
        #  получаем наш разделенный список
        splitted_list = split_list_to_parts(seq, get_list_part_count(seq, start_divider))
        #  тут будут храниться наши последовательности
        counters = []
    
        # нужно больше циклов!!!
        # пробегаем по нашему расщепенцу
        for sub_list in splitted_list:
    
            dc = {}
            for element in sub_list:
                #  заполняем словарь dc данными, сколько раз каждый элемент встречается в последовательности
                #  count намеренно не использовал
                try:
                    dc[element] += 1
                except KeyError:
                    dc[element] = 1
            # находим элемент, котрый максимально часто встречается в последовательности
            max_item = find_max_item_val_in_dict(dc)
    
            lst = []
            #  собираем индексы, на которых находятся наши элементы и запихиваем в список lst
            for pos, element in enumerate(sub_list):
                if element == max_item:
                    lst.append(pos)
            #  список со списками индексов максимально часто повторяющихся элементов, предварительно разбитого списка!
            counters.append(lst)
    
        #  если длина списка == количеству повторений первого элемента -> наш список содержит одинаковые элементы
        if len(counters) == counters.count(counters[0]):
            return counters[0]
        else:
            return None
    
    
    if __name__ == '__main__':
        #  не улетаем в небеса и ограничиваем бесконечный цикл
        stop_cycles = 10
        current_cycles = 1
    
        #  исходный список
        lst = [0, 1, 1, 2, 1, 3, 4, 4, 5, 4, 5, 6, 6, 3, 6]
    
        #  минимальное количество элементов в каждой части при дроблении списка на части
        start_divider = 3
        while True:
            if current_cycles > stop_cycles:
                print(f'Can not find sequence with {current_cycles} cycles, stopping :(')
                break
            
            #  вызываем нашу основную функцию
            result = find_periodic_seq(lst, start_divider)
            if not result:
                #  если ничего не нашлось - увеличиваем минимальную длину части на 1
                start_divider += 1
            else:
                print(f'seq was founded with {current_cycles} cycles! {result}')
                break
    Ответ написан
  • В чем суть ошибки TypeError?

    @bbkmzzzz
    Суть ошибки в не подходящих типах, например:
    x = '1'
    y = 2
    z = x + y  # нельзя сложить число и строку
    
    Traceback (most recent call last):
      File "main.py", line 3, in <module>
        z = x + y
    TypeError: can only concatenate str (not "int") to str

    в вашем случае TypeError: 'NoneType' object is not callable означает, что ваш объек - None, а есть попытка вызвать его, что невозможно.
    Проверяйте, что там за данные, сломалось, и в результате None.
    Ответ написан
    Комментировать
  • Как добиться видимости объектов созданных в формах Qt Designer при разработке кода в PyCharm?

    @bbkmzzzz
    Заведите в классе отдельное поле для форм, будет удобнее.
    import labaa2
    
    class Laba2(QMainWindow):
        def __init__(self):
            super().__init__()
            self.ui = self.setupUi(self)


    Тогда вся форма будет в ui
    self.ui.button # например

    Дело в том, что QtDesigner создает файлы в "своем формате" (xml, если правильно помню), попробуйте открыть ui файл блокнотом, увидите. Питон ни сном ни духом, что там такое находится и как с этим взаимодействовать, вот тут на сцену и выходит uic. Он преобразует дерево виджетов ui в валидный питоновский класс, который использует установленную питоновскую библиотеку-обертку над Qt.
    С uic 2 подхода:
    1. uic.loadUi('TEST.ui', self)
    (есть смысл запихнуть это в отдельное поле класса, например, self.ui = uic.loadUi('TEST.ui', self), дабы не возникло не нужных пересечений имен, да и, на мой взгляд, аккуратнее получиться, мало ли еще одну форму в этот же класс грузить будете.)
    uic парсит ui файл, и создает сущности. Каждый раз, при запуске программы это будет происходить.
    + Не требует промежуточных звеньев
    - Не работает автодополнение IDE
    - Парсинг и формирование питон класса при каждом запуске.
    2. Конвертация заранее.
    - Требует промежуточное действие между формой и программой. (преобразование в ui в py)
    + Работает автодополнение
    + Не тратится время на преобразование при запуске программы.
    + В PyCharm можно настроить конвертацию на горячую клавишу.

    Не надо наследовать класс сразу от двух классов, в 99.9% Вам это не надо, а странных для вас эффектов можете огрести.
    С использованием предварительной конвертации
    Импортируйте сконвертированную форму в самом начале, дайте ей понятное название, потом подключите
    import labaa2
    from labaa2.Ui_Laba2 import Ui_что_там_у_вас as MainForm_UI
    
    class Laba2(QMainWindow,):
        def __init__(self):
            super().__init__()
            self.ui = MainFormUI()
            self.ui.setupUi(self)

    теперь вся форма будет в ui, автодополнение работает, Pycharm скорее всего не увидит сигналов, но это нормально, работать они, естественно, будут.

    P.S. Pycharm и External tools
    Картинки

    5f8caa995f6ff805437661.png
    5f8cad28bb2ce085833759.png
    Для такой организации формочек
    5f8cadf60e0e2969686885.png
    Правой кнопкой по файлу - то, как Вы назовете external tool.
    5f8caefc48637441580438.png
    # импорт
    import labaa2
    from forms.py.temp_ui import Ui_MainWindow as MainForm
    
    
    class Laba2(QMainWindow,):
        def __init__(self):
            super().__init__()
            self.ui = MainForm()
            self.ui.setupUi(self)


    Добавление хоткея
    5f8cafbe07d7f009801572.png
    Ответ написан
    1 комментарий
  • Как определить имя переменной передаваeмой в min(), max() в python?

    @bbkmzzzz
    Вам это не надо. Вы работаете с данными, а не с именами переменных.

    Дичь, но это "то, что надо":
    a = 0
    b = 1
    c = 2
    d = 3
    
    alls = min(a, b, c, d)
    
    globs = globals().copy()
    for i in globs:
      if id(globs[i]) == id(alls):
        print("имя переменной, у которой самый маленький int:", i)
        break

    all - зарезервированное имя, не используйте его.
    Ответ написан
    Комментировать
  • Как сделать кд?

    @bbkmzzzz
    Например, сохранять время наступления события (прием сообщения), при наступлении следующего - вычислять разницу во времени и выполнять\не выполнять действия
    Ответ написан
    Комментировать
  • Создание динамических кнопок python и pyqt5?

    @bbkmzzzz
    QTableView\QTableWidget, в зависимости от желания разбираться с моделями, от объема, и QTableWidgetItem для кнопки в ячейку таблицы
    Ответ написан
    Комментировать
  • Как перехватывать информацию из консоли?

    @bbkmzzzz
    from subprocess import Popen, PIPE
    
     # запускаем команду, вывод перенаправляем в PIPE
    proc = Popen('cmd /c ping 8.8.8.8', stdout=PIPE)
    
    #  по завершении работы proc, прочитать данные из
    # stdout (и отправить ввод, если надо), результат не декодирован (bytes)
    res = proc.communicate()[0]  # <- communicate возвращает кортеж (stdout_data, stderr_data)
    
    print(res.decode('cp866')) # выводим на печать декодированные данные
    Ответ написан
    Комментировать
  • Как вывести несколько значений переменных с новой строки?

    @bbkmzzzz
    Строки
    model = 1
    color = "black"
    year = 2010
    number_of_doors = 6
    
    print(str(model) + "\n" + color + "\n" + str(year) + "\n" + str(number_of_doors))
    print('####')
    
    print("%d\n%s\n%d\n%d" % (model, color, year, number_of_doors))
    print('####')
    
    print(f"{model}\n" \
            f"{color}\n" \
            f"{year}\n" \
            f"{number_of_doors}")
    print("####")
    
    print(f"{model}\n{color}\n{year}\n{number_of_doors}")
    Ответ написан
    Комментировать
  • Python. Перебор уникальных значений пропускает значения?

    @bbkmzzzz
    Не стоит использовать имена, совпадающие с встроенными типами.

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

    @bbkmzzzz
    Не ловите ВСЕ исключения, не понятно-же, что именно произошло. Обрабатывайте конкретное, ну или сделайте хотя бы так:
    except Exception as e:
        print(e, e.args, file=sys.stderr)
    Ответ написан
    3 комментария
  • Как целенаправленно убить поток?

    @bbkmzzzz
    Для каждого потока завести переменную-флаг, например running, поток периодически проверяет ее, если она False - завершает свою работу.
    Ответ написан
    Комментировать
  • Как обрезать в списке в каждом элементе символы: [' ']?

    @bbkmzzzz
    А зачем список со списками из одного элемента?
    разделитель какой, ксати?
    x = [['Курица'] , ['Масло'], [' Гречка'], ['Молоко'], ['Мясо'], ['Рыба'], ['Хлеб']]
    for i in x:
      print(i[0], end=' ')
    print()
    
    new_list = []
    for i in x:
      new_list.append(i[0])
    print(" ".join(new_list))
    
    print(" ".join(i[0] for i in x))
    
    ln = len(x)
    stroke = ""
    for i, j in enumerate(x):
      stroke += j[0]
      if i < ln:
        stroke += " "
    print(stroke)
    Ответ написан
    Комментировать
  • Цикл for оставляет лишь последнюю строку из массива. Почему?

    @bbkmzzzz
    уберите все лишнее и увидите, что цикл перебирает все корректно. Остальное отладка. Добавляйте логи\принты и дебаг дебаг дебаг

    foods = ['Бургер', 'Картофель', 'Куринные ножки']
    for food in foods:
      print(food)
    Ответ написан
  • PyQT5 как заставить работать ProgressBar и lcdnumber в потоке?

    @bbkmzzzz
    Доступ к виджетам возможен только из основного потока, чтобы все работало из стороннего потока шлите сигнал и подписывайтесь на него в основном потоке.
    Ответ написан
    Комментировать
  • Проблема с импортом python?

    @bbkmzzzz
    Ответ написан
    Комментировать