kwargs в аргументах __init__
Здраствуйте, когда я создал класс, я проверял можно ли одним словарем задать сразу несколько аргументов экземпляра. Оказалось, что можно:

class Test:
    dict_1 = {'a': 2, 'b': 1}
    def __init__(self):
        self.__dict__ = Test.dict_1

Тогда я подумал, что можно ли с помощью kwargs задать сколько душе угодно аргументов при создании экземпляров:

class Test:
    def __init__(self, **kwargs):
        self.__dict__ = kwargs

g = Test({'a': 2})

И тут появилась ошибка:

Traceback (most recent call last):
  File "C:\Users\79309\Desktop\ПРОЕКТЫ\практика\hhhhh.py", line 8, in <module>
    g = Test({'a': 2})
TypeError: __init__() takes 1 positional argument but 2 were given

Я сразу отрублю, но я писал не только аргумент а, но и другие, так что я не понимаю в чем проблема, можете помочь пожалуйста((

g = Test({'a': 2}) — при таком вызове вы просто передаете в
__init__ один позиционный аргумент: словарь
{'a': 2}. Ошибки бы не было, если бы он ожидал этот словарь отдельным позиционным аргументом
__init__(self, dict_)
А в словарь
**kwargs собираются все пары именованных аргументов и их значений.
Вызов должен выглядеть так:
Test(a = 1, b = 2) или
Test(**{'a': 1, 'b': 2}), где
** распакует переданный словарь в именованные аргументы (которые внутри
__init__ снова запакуются в
kwargs). Второй вариант может использоваться, если этот словарь хранится в отдельной переменной.

class Test:
    def __init__(self, **kwargs):
        print(kwargs) # {'a': 1, 'b': 2}
        self.__dict__ = kwargs

x = Test(a = 1, b = 2)

dict_ = { 'c': 3, 'd': 4 }
y = Test(**dict_)

А вот ваш первый пример с присваиванием заранее созданного словаря в
__dict__... Так не надо делать, потому что
__dict__ каждого экземпляра начинает ссылаться на один и тот же словарь
dict_1. Изменение значения атрибута у любого экземпляра будет приводить к изменению значений у всех:

class Test:
    dict_1 = {'a': 2, 'b': 1}
    def __init__(self):
        self.__dict__ = Test.dict_1

one = Test()
two = Test()

one.b = 100

print( one.b ); # 100
print( two.b ); # 100 (упс?!)

print( one.__dict__ is two.__dict__ ); # true

При необходимости, это можно сделать
self.__dict__ = {'a': 2, 'b': 1} так, чтобы при каждом вызове создавался отдельный словарь с этими значениями.


Удаление конкретного элемента по индексу

def func(number):
    number_list = []
    for i in number:
        number_list.append(i)
        if number_list[2] == '(' and number_list[6] == ')':
            del number_list[2]
            del number_list[6]
    print(number_list)
a = input('Введите номер:')
print(func(a))

Суть задачи, чтобы из вводимого номера телефона удалить скобки. Допустим ввожу:
+7(928)4567809. На выходе хочу получить тот же номер, но без скобок
Ошибка на выходе, которую не понимаю как исправить:

  if '(' in number_list[-11] and ')' in number_list[-7]:
IndexError: list index out of range

Попробуйте так:

res = number.replace("(", "").replace(")", "")

Но более гибко будет воспользоваться регулярным выражением, чтобы удалить любые символы кроме цифр и знака
+:

import re

res = re.sub(r"[^\d+]", "", number)

Пример:

In [6]: number = "+7(928) 456 / 78 - 09"

In [7]: re.sub(r"[^\d+]", "", number)
Out[7]: '+79284567809'


Crontab и python скрипт
Ubuntu 20.04 (на Raspberry)
Есть вот такой скрипт для примера:

#!/usr/bin/python3

try:
    print("Траляля")

Как сервис запускается и отрабатывает без ошибок.
В оболочке bash без привязки к пользователю тоже работает запуск скрипта.
Но если попытаться от пользователя выполнить:

* * * * * cd /home/ubuntu/GPIO/ && ./initial.py

выдает ошибку
initial.py: command not found
Что можно предпринять, господа?

В общем добавил эту запись в crontab -e и все работает...


цикл while с input()
я хочу написать цикл, который позволяет вводить число, до тех пор, пока оно не станет равно 12, в чём ошибка? Само число можно ввести только 1 раз, после этого программа завершается.
<code>
a=0
while a<10:
    b = int(input())
    a=a+1
    print(b)
    if b==12:
        print('breaking')
    break

</code>

В том, что
break не с тем отступом.
А ещё, как заметил @entithat, у
while условие неверное.


Сортировка списка из списка и элемента
Есть массив вот такого вида

k=[[[0.5, 2.5], 6], [[2.14, 2.14], 8], [[2.14, 2.14], 4]]

необходимо получить следующий результат

k=[[[2.14, 2.14], 4], [[0.5, 2.5], 6], [[2.14, 2.14], 8]]

Подскажите как это можно сделать?
Вот эти методы не работают

sorted(k, key=itemgetter(1))
sorted(adaptive, key=lambda i: i[1])


Как остановить бота python на сервере? [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 2 года назад.

                        Улучшить вопрос

Установил бота на сервер, всё работает, но как мне его остановить теперь? Помогите плсс
Устанавливал через termius с помощью screen

Если вы включали скрипт через
screen, то можно поступить так:

Пропишите
screen -ls данная команда выдаст вам все запущенные сессии
Пропишите команду
screen -XS название сессии quit - с помощью данной команды вы закроете нужную вам сессию


Почему DataFrame.shift не работает с ячейкой?
Почему смещение .shift отказывается работать?

df['atras'].shift(df['random'])

То есть, оно не хочет взаимодействовать с
df['random'] и выдает ошибку.
Как можно исправить?

df['random'] = np.random.randint(-2, 2, size = len(df))
df['atras2'] = df['atras'].shift(df['random'])

Пример:

Date        atras   random  atras2
20160901    471     1
20160901    462     -1      431
20160901    431     2       471
20160901    483     0       483
20160901    463     1       483

Ошибка:

c:\users\ii\appdata\local\programs\python\python37\lib\site-packages\pandas\core\series.py in shift(self, periods, freq, axis, fill_value)
   4544     def shift(self, periods=1, freq=None, axis=0, fill_value=None) -> "Series":
   4545         return super().shift(
-> 4546             periods=periods, freq=freq, axis=axis, fill_value=fill_value
   4547         )
   4548

c:\users\ii\appdata\local\programs\python\python37\lib\site-packages\pandas\core\generic.py in shift(self, periods, freq, axis, fill_value)
   9429         2020-01-08    45    48    52
   9430         """
-> 9431         if periods == 0:
   9432             return self.copy()
   9433

c:\users\ii\appdata\local\programs\python\python37\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1441     def __nonzero__(self):
   1442         raise ValueError(
-> 1443             f"The truth value of a {type(self).__name__} is ambiguous. "
   1444             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1445         )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Метод Series.shift(periods=1, freq=None, axis=0, fill_value=None) ожидает в качестве параметра
periods целое скалярное значение.
Т.е. Pandas не поддерживает динамическое смещение с разным шагом смещения. Шаг смещения должен быть один и должен быть задан как целое скалярное значение.

UPD: Вариант векторизированного решения:

idx = np.arange(len(df)) - df["random"]
# заменяем индексы выходящие за правую границу на `-1`
idx[idx >= len(df)] = -1

df["res"] = np.where(idx >= 0, df["atras"].to_numpy()[idx], np.nan)

результат:

In [123]: df
Out[123]:
       Date  atras  random  atras2    res
0  20160901    471       1     NaN    NaN
1  20160901    462      -1   431.0  431.0
2  20160901    431       2   471.0  471.0
3  20160901    483       0   483.0  483.0
4  20160901    463       1   483.0  483.0


Как найти номер недели в квартале и месяце?
В коде ниже к фрейму данных делаю обозначения для каждой строки дня, недели, месяца, квартала.

df = pd.read_csv('test.csv')

df['day'] = pd.DatetimeIndex(df['Date']).day
df['week'] = pd.DatetimeIndex(df['Date']).week
df['month'] = pd.DatetimeIndex(df['Date']).month
df['quarter'] = pd.DatetimeIndex(df['Date']).quarter

А как получить значения:

Неделя квартала - то есть в каждом квартале есть определенное кол-во недель
Например 7/21/1959 - "8" неделя
Неделя месяца - аналогично, но в каждом месяце 4-5 недель находится
Например 7/21/1959 - "3" неделя

Ссылка на файл.

Date
7/21/1959
7/22/1959
7/23/1959
7/24/1959
7/27/1959
7/28/1959
7/29/1959
7/30/1959
7/31/1959
08.03.1959
08.04.1959


Цикл доходит до 9 и дальше не добавляет
Вот код:
<code>
    a=1
    b=1
    ruskie=['а','б','в','г','д','е','э','ж']
    print(len(answer))
    trueanswer=[]
    while a<(len(answer)-1):
        if answer[a] in ruskie:
            if answer[a-1]==' ' and answer[a+1]==' ':
               print('dadadadaaadad')
               trueanswer.insert(b,answer[a])
               b=b+1
               a+=1
        else:
            a+=1
</code>
Цикл останавливается на значении а=9 б=2, должен доходить до значения длинны переменной"answer" и в переменную"trueanswer" выдавать буквы, возле которых два пробела.
Что я делаю не так?

    if answer[a] in ruskie:
        if answer[a-1]==' ' and answer[a+1]==' ':
           a+=1

если вы вошли в первое условие, но не вошли во второе, то у вас вообще вечный цикл будет
зачем тут использование
while, когда напрашивается обычный проход по буквам строки через
for:

for a in range(1, len(answer) - 1):

без использования внутри цикла
a += 1


Найти имя объекта в котором в паре ключ:значенение в значении указана некоторая иноформация
Есть словарь с подобным содержанием:

json
{
    'users': {
        '76561199129019742': {
            'AccountName': 'cfaxxpswwc57y',
            'PersonaName': 'SemDesonLon',
            'RememberPassword': '0',
            'MostRecent': '0',
            'Timestamp': '1618041785'
        },
        '76561199128794854': {
            'AccountName': 'utzmgfyb7snim',
            'PersonaName': 'SemDesonLon',
            'RememberPassword': '0',
            'MostRecent': '0',
            'Timestamp': '1618041785'
        }
    }
}

Есть значение AccountName, по которому нужно найти имя объекта в котором оно находится. Как это сделать в Python?
Пример:
Из этого
cfaxxpswwc57y
Получить это
76561199129019742

users = {
    '76561199129019742': {
        'AccountName': 'cfaxxpswwc57y',
    },
    '76561199128794854': {
        'AccountName': 'utzmgfyb7snim',
    }
}

def get_key_by_name(name):
    for key, obj in users.items():
        if obj['AccountName'] == name:
            return key

    return None

print( get_dict_by_name('cfaxxpswwc57y') ) # '76561199129019742'

Если это частая операция, можно создать вспомогательный словарь вида

'cfaxxpswwc57y': '76561199129019742',
'utzmgfyb7snim': '76561199128794854',

users = {
    '76561199129019742': {
        'AccountName': 'cfaxxpswwc57y',
    },
    '76561199128794854': {
        'AccountName': 'utzmgfyb7snim',
    }
}

keys = { val['AccountName']: key for key, val in users.items() }

def get_key_by_name(name):
    return keys.get(name) # Вторым параметром можно указать значение по умолчанию.
                          # В таком виде вернется None, если ключ не найден.

print( get_key_by_name('cfaxxpswwc57y') ) # '76561199129019742'


Выдача False при попытки использовать input / len
Я написал простенький код, который проверяет в пароле количество символов.
Все работает хорошо, однако при input мне сначала выводится False, который влияет на конечный результат.
<code>
def password_checker():
    if len(input(5 > 6)):
        print("Sorry you pass is too big")
    elif 5 == 5:
        print("okay, pass is done23")
    else:
        print("okay, pass is done")

password_checker()
</code>

def password_checker():
    pasw = input("Enter the password: ")
    if len(pasw) > 6:
        print("Sorry you pass is too big")
    elif len(pasw) == 5:
        print("okay, pass is done23")
    else:
        print("okay, pass is done")**текст, выделенный жирным шрифтом**

Попытаюсь объяснить ваши ошибки.

len(input(5 > 6)) - давайте разберём эту строчку.
Почти всё в пайтоне считываются как функции и
len и
input тоже не исключение из
правил.
Вы буквально говорите функции
input выведи мне
5 > 6в консоль, а потом прочитай что напишет юзер. Но так как нужен аргумент типа
str то выдает ошибку. Значит вывод, что вы должны объявить переменную
с
input изначально, а потом уже сравнивать.
Дальше разберём строчку:

elif 5 == 5:
Вы тут говорите напрямую машине: Если цифра 5 равняется цифре 5 то вывести следущее если основное условие не сработало, сравнивайте уже готовую переменную с
input но не забудьте всё обернуть в функцию
len
А вообще рекомендую для начала изучить азы работы пайтон, а потом уже делать свои простые програми


Как разделить склеенные слова в слове?
Проштудировал уже всю библиотеку
re, но фантазии все равно не хватает.
Есть сотни таких списков:

list = ['Фрикадельки', 'овощамиИнгредиентыБаклажан', 'Кабачок',
        'Стебель', 'сельдерея', 'Болгарский', 'перец']

И некоторые слова там склеены. Примерно как
'овощамиИнгредиентыБаклажан'
Нужно как-то разделить эти слова. Не могу понять за что зацепится здесь.

Можно так:
<code>
In [71]: re.split(r"([А-ЯЁ][а-яё]*)", 'овощамиИнгредиентыБаклажан')
Out[71]: ['овощами', 'Ингредиенты', '', 'Баклажан', '']
</code>
После этого можно еще раз пройтись по списку и удалить пустые строки...


Numpy: решение системы линейных уравнений методом Гаусса
Пытаюсь в Python создать алгоритм расчета СЛАУ методом Гаусса. Метод заключается в следующем. Составляем матрицу коэффициентов, включая свободный член. Затем приводим матрицу к треугольному виду. Для этого сначала по первому столбцу (с индексом 0) каждый элемент делим на диагональный (a0,0) (в примере - 3,8), вычисляя индекс m, а после пересчитываем строку 2 по формуле: каждый ее элемент (без элемента свободного члена из последнего столбца) минус произведение элемента над ним (из нулевой строки) и индекса m для второй строки. Отдельно отработаем со столбцом свободного члена (здесь алгоритм неважен).
Следом аналогичные действия надо проделать для третьей строки элементов (но учитывая, что на первой итерации элементы второй строки преобразованы вышеописанным алгоритмом, а коэффициент m будет считаться по второму столбцу: соответственно делим все его элементы на диагональный элемент из 2-й строки a1,1) (в примере 1,3).
Вопрос: я рассчитал вектор-столбец m: m = ([1,000,
1,684,
0,632])
И теперь надо отработать со второй строкой матрицы. И вот здесь сложность с индексацией. Во-первых, не могу перебрать значения m, тип которых float. Во-вторых, неверно задаю индексацию элементов второй строки (по сути — после нулевой это первая строка)
<code>
import numpy as np
matrix = np.array([[3.8, 6.7, -1.2, 5.2],
                   [6.4, 1.3, -2.7, 3.8],
                   [2.4, -4.5, 3.5, -0.6]])
def gaussFunc(matrix):
    # расчет len1 (3) и len2 (4) - здесь не приводится
    # код расчета m по нулевому столбцу:
    for row in range(len1):
        for column in range(len2-3):
            m = matrix[row][column] / matrix[column][column]
    elem = row-1                # значения столбцов по нулевой строке кладем в
                                # переменную elem
    for i in range(len(m)-1):   # идем циклом по диапазону трех значений m минус
                                  #последнее третье: ошибка по len для float

        while row < (len1-1):   # пока строка первая или вторая (в len2 их всего
                                  # 3):
             while column < (len2-1):  # пока колонка первая, вторая или третья
                                           # (минус столбец свободного
                                         # члена):
                 # пересчитанные коэффициенты второй (первой в numpy) строки:
                 # текущий элемент - m по данной строке*верхний элемент в данном
                 # столбце (из строки 0):
                 a = matrix[row][column] - m[i]*matrix[elem][column]
</code>

В конце приведена ссылка на jupyter notebook с более-менее полным решателем СЛАУ. Плюс трюк, как считать на pyton почти так же быстро, как на Фортране :)

Первоначальный ответ
Если не обращать внимание на возможное деление на ноль, то привидение к треугольному виду можно записать очень просто:

def gaussFunc(matrix):
    # функция меняет матрицу через побочные эффекты
    # если вам нужно сохранить прежнюю матрицу, скопируйте её np.copy
    for nrow, row in enumerate(matrix):
        # nrow равен номеру строки
        # row содержит саму строку матрицы
        divider = row[nrow] # диагональный элемент
        # делим на диагональный элемент.
        row /= divider
        # теперь надо вычесть приведённую строку из всех нижележащих строчек
        for lower_row in matrix[nrow+1:]:
            factor = lower_row[nrow] # элемент строки в колонке nrow
            lower_row -= factor*row # вычитаем, чтобы получить ноль в колонке nrow
    # все строки матрицы изменились, в принципе, можно и не возвращать
    return matrix

Результат для вашего примера:

array([[ 1.        ,  1.76315789, -0.31578947,  1.36842105],
       [-0.        ,  1.        ,  0.06800211,  0.49657354],
       [ 0.        ,  0.        ,  1.        ,  0.09309401]])

В чём засада. В ходе вычислений может оказаться ноль на диагонали.

matrix = np.array([[1, 0, 0, 1],
                   [0, 0, 1, 2],
                   [0, 1, 0, 3]])

Насколько я помню, перед тем, как делить на диагональный элемент сначала просматривают все строки, начиная с текущей, вниз. Выбирают строку с максимальным значением в текущей колонке и переставляют с текущей. После чего продолжают.
Проверка результата.
Функция
make_identity берёт матрицу, полученную методом Гаусса, и доводит её до единичной. Для этого строки перебираются снизу вверх и вычитаются из вышележащих строк, чтобы обнулить соответствующие колонки.

def make_identity(matrix):
    # перебор строк в обратном порядке
    for nrow in range(len(matrix)-1,0,-1):
        row = matrix[nrow]
        for upper_row in matrix[:nrow]:
            factor = upper_row[nrow]
            upper_row -= factor*row
    return matrix

Результат для вашего примера:
make_identity(gaussFunc(np.copy(matrix)))

array([[ 1.        ,  0.        ,  0.        ,  0.53344344],
       [-0.        ,  1.        ,  0.        ,  0.49024295],
       [ 0.        ,  0.        ,  1.        ,  0.09309401]])

Вырезаем последний столбец, получим строку корней:
roots = make_identity(gaussFunc(np.copy(matrix)))[:,3]

array([0.53344344, 0.49024295, 0.09309401])

Умножаем найденные корни на исходную матрицу и сравниваем с последним столбцом исходной задачи:
np.matmul(matrix[:,:3], roots.T) - matrix[:,3]
Результат вычисления
array([ 0.00000000e+00, -4.44089210e-16, -2.22044605e-16])
Следовательно, корни найдены правильно. С чем и поздравляю.
UPDATE
Метод Гаусса с выбором главного элемента. Плюс добавлена обработка нуля на диагонали.

def gaussPivotFunc(matrix):
    for nrow in range(len(matrix)):
        # nrow равен номеру строки
        # np.argmax возвращает номер строки с максимальным элементом в уменьшенной матрице
        # которая начинается со строки nrow. Поэтому нужно прибавить nrow к результату
        pivot = nrow + np.argmax(abs(matrix[nrow:, nrow]))
        if pivot != nrow:
            # swap
            # matrix[nrow], matrix[pivot] = matrix[pivot], matrix[nrow] - не работает.
            # нужно переставлять строки именно так, как написано ниже
            matrix[[nrow, pivot]] = matrix[[pivot, nrow]]
        row = matrix[nrow]
        divider = row[nrow] # диагональный элемент
        if abs(divider) < 1e-10:
            # почти нуль на диагонали. Продолжать не имеет смысла, результат счёта неустойчив
            raise ValueError(f"Матрица несовместна. Максимальный элемент в столбце {nrow}: {divider:.3g}")
        # делим на диагональный элемент.
        row /= divider
        # теперь надо вычесть приведённую строку из всех нижележащих строчек
        for lower_row in matrix[nrow+1:]:
            factor = lower_row[nrow] # элемент строки в колонке nrow
            lower_row -= factor*row # вычитаем, чтобы получить ноль в колонке nrow
    # приводим к диагональному виду
    make_identity(matrix)
    return matrix

В этой функции главный фокус в том, как переставлять строки. Простая формула
matrix[nrow], matrix[pivot] = matrix[pivot], matrix[nrow] не работает. При таком присваивании справа стоят указатели на строку, а слева - адреса, куда нужно скопировать значения. То есть при первом присваивании в строку
nrow будет скопирована строка
pivot, а в строку
pivot - содержимое строки
nrow -- но оно уже переписано из строки
pivot! То есть фактически строка
pivot скопируется в саму себя. И вместо перестановки двух строк будет копия одной строки.

matrix[[nrow, pivot]] = matrix[[pivot, nrow]] - работает. И c явным копированием тоже работает:
matrix[nrow], matrix[pivot] = matrix[pivot], np.copy(matrix[nrow])
UPDATE 2
Jupyter Notebook с кодом решателя СЛАУ
Помимо собственно решателя дано сравнение с Си-шным решателем
numpy.linalg.solve и трюк как ускорить скорость счёта решателя на пайтоне в 20 раз, что почти так же быстро, как чисто Си-шный решатель.
Строго говоря, решатель в
numpy даже не Си-шный, а фортрановский LAPACK gesv


Дана переменная, в которой находится словарь. Задача удалить ключ словаря, если в значении этого ключа ничего нет
Дана следующая переменная:

directories = {
'1': ['2207 876234', '11-2'],
'2': ['10006'],
'3': [],
'4': ['154'],
'5': []
}

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

def d():
    doc_number = input("Введите номер документа, который хотите удалить: ")
    dict_ = directories.copy()
    for k, v in list(dict_.items()):
        if v == []:
            del directories[doc_number]
            return ('Полка удалена')

d()

Подскажите что делаю не так. Спасибо

directories = {
    '1': ['2207 876234', '11-2'],
    '2': ['10006'],
    '3': [],
    '4': ['154'],
    '5': []
}

def d(dc):
    key = input("Введите номер документа, который хотите удалить: ")
    try:
        if len(dc[key]) == 0:
            del dc[key]
            return 'Полка удалена'
    except:
        return 'Key does not exists'
    return 'Ничего не произошло'

print(d(directories))

Либо:

def d(dc):
    key = input("Введите номер документа, который хотите удалить: ")
    if not dc.get(key, 1):
        del dc[key]
        return 'Полка удалена'
    return 'Ничего не произошло'


Помощь в Tkinter
Помогите пожалуйста,как в tkinter после ввода определенного слова сделать так, что бы выполнялось действие.К примеру  меня просят ввести имя(в виджет entry) если я ввожу Павел(именно Павел),то мне выдается сообщение:"У вас счастливое имя".
Заранее благодарю!
<code>
 window = Tk()
    window.geometry('850x500+500+150')
    entry=Label(width=84,bg='red')
    entry.place(x=125,y=400,height=50)
    entry1=Entry(width=20)
    entry1.place(x=358,y=410,height=35)
    font=("Arial Bold", 28)
    l='Напишите 'Павел
    label_2=Label(font=font,text=l)
    label_2.place(x=380,y=190)
    window.mainloop()
</code>

елси нужно сделать такое на некоторые имена, то можна сделать так:
<code>
a = ent.get()
if a == 'Павел':
    la = Label(text='У вас счастливое имя')
    la.place(x= ,y= )
</code>
такой метод подойте на одно два имя, если он вам подходит, используйте


Запуск кода через промежуток времени (каждую минуту на N-ной секунде)
Как мы все знаем есть функция
time.sleep(10) - исполнять код каждые 10 секунд. А как сделать так, чтобы эти 10 секунд были не в любое время, как например в 19 часов 14 минут 3 секунды, а затем 13 секунд, 23.... А чтобы старт был с каждой 10 секунды по времени комьютера?

datetime.now().second дает текущую секунду. Если из нужной вам секунды вычесть текущую, можно узнать, сколько секунд осталось ждать.

Timer(секунды, функция).start() откладывает вызов функции на указанное время.

from datetime import datetime
from threading import Timer

def on_10th_second():
    print('yo-ho-ho', datetime.now())

def shedule(func, nth_sec):
    now_sec = datetime.now().second
    wait = (60 + nth_sec - now_sec) % 60
    # На  7-й секунде: (60 + 10 - 7) % 60 → 3 (осталось 3 сек до 10-й)
    # На 17-й секунде: (60 + 10 - 17) % 60 → 53

    Timer(wait, func).start()
    Timer(wait + 1, lambda: shedule(func, nth_sec)).start()

shedule(on_10th_second, 10)

print('ok') # В отличие от sleep, синхронный код ниже Timer() продолжает выполняться.

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


Как передать переменные в другой handler
На примере я показываю реализацию обработки реферальных ссылок для телеграм бота

ref_id_1lv = ''
ref_id_2lv = ''
@dp.message_handler(commands=['start'])
async def start_message(message: types.Message):
    try:
        start, payload = message.text.strip().split()
        try:

            ref_id_1lv, ref_id_2lv = payload.strip().split('_')
        except:
            ref_id_1lv = payload
            ref_id_2lv = None
        global ref_id_1lv, ref_id_2lv
        key = InlineKeyboardMarkup(row_width=1)
        key.add(InlineKeyboardButton('Я согласен/согласна', callback_data = 'agree'))
        text = str(config.start_message_for_user)
        await bot.send_message(message.from_user.id, text, parse_mode = '', reply_markup = key)

@dp.callback_query_handler(lambda call: call.data == 'agree')
async def agree_ref_start(callback: types.CallbackQuery):
  if callback.data == 'agree':
    cur = con.cursor()
    cur.execute(f'UPDATE users SET status = 1 WHERE chat_id = {callback.from_user.id};')
    cur.execute(f'UPDATE users SET ref_id_1lv = {ref_id_1lv} WHERE chat_id = {callback.from_user.id};')
    cur.execute(f'UPDATE users SET ref_id_2lv = {ref_id_2lv} WHERE chat_id = {callback.from_user.id};')
    cur.execute(f'SELECT how_mach_ref FROM users WHERE chat_id = {ref_id_1lv} and chat_id = {ref_id_2lv};')
    for how_mach_ref in cur.fetchmany(2):
        how_mach_ref1 = how_mach_ref[0]
        how_mach_ref2 = how_mach_ref[1]
    cur.execute(f'UPDATE users SET how_mach_ref = {how_mach_ref1 + 1} WHERE chat_id = {ref_id_1lv};')
    cur.execute(f'UPDATE users SET how_mach_ref = {how_mach_ref2 + 1} WHERE chat_id = {ref_id_2lv};')
    con.commit()
    await bot.send_message(callback.from_user.id, 'Всё Ок')

Но проблема в реализации функции. Как можно передать переменные
ref_id_1lv и
ref_id_2lv в хэндлер с callback-ами
Код ошибки:

File "telegrambot.py", line 103, in agree_ref_start
    cur.execute(f'UPDATE users SET ref_id_1lv = {ref_id_1lv} WHERE chat_id = {callback.from_user.id};')
sqlite3.OperationalError: near "WHERE": syntax error

Вы можете использовать FSM aiogram'а. Пример использования есть здесь
Для начала, вам нужно импортировать
FSMContext и, на пример,
MemoryStorage

from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage

Далее указать
MemoryStorage в Dispatcher'е. Выглядеть это будет примерно так

storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

Чтобы передать переменные в другой обработчик, вам нужно вписать в аргументы функций
state: FSMContext

async def start_message(message: types.Message, state: FSMContext):

async def agree_ref_start(callback: types.CallbackQuery, state: FSMContext):
Далее, в функции
start_message сохраняете переменную. Работает как словарь:

async with state.proxy() as data:
    data['ref1'] = ref_id_1lv
    data['ref2'] = ref_id_2lv

Теперь, в функции
agree_ref_start достаем эти переменные:

async with state.proxy() as data:
    ref_id_1lv = data['ref1']
    ref_id_2lv = data['ref2']

После этого не забываем почистить все эти переменные из памяти:
await state.finish()
Если что-то непонятно, приложу готовый для вас код:

# Импортируем нужное
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage

# Не забудьте в Dispatcher прописать MemoryStorage

@dp.message_handler(commands=['start'])
async def start_message(message: types.Message, state: FSMContext):
    try:
        start, payload = message.text.strip().split()
        try:
            ref_id_1lv, ref_id_2lv = payload.strip().split('_')
        except:
            ref_id_1lv = payload
            ref_id_2lv = None
        # Сохраняем переменные
        async with state.proxy() as data:
            data['ref1'] = ref_id_1lv
            data['ref2'] = ref_id_2lv
        key = InlineKeyboardMarkup(row_width=1)
        key.add(InlineKeyboardButton('Я согласен/согласна', callback_data = 'agree'))
        text = str(config.start_message_for_user)
        await bot.send_message(message.from_user.id, text, parse_mode = '', reply_markup = key)

@dp.callback_query_handler(lambda call: call.data == 'agree')
async def agree_ref_start(callback: types.CallbackQuery, state: FSMContext):
  if callback.data == 'agree':
    # Достаем переменные
    async with state.proxy() as data:
        ref_id_1lv = data['ref1']
        ref_id_2lv = data['ref2']

        cur = con.cursor()
        cur.execute(f'UPDATE users SET status = 1 WHERE chat_id = {callback.from_user.id};')
        cur.execute(f'UPDATE users SET ref_id_1lv = {ref_id_1lv} WHERE chat_id = {callback.from_user.id};')
        cur.execute(f'UPDATE users SET ref_id_2lv = {ref_id_2lv} WHERE chat_id = {callback.from_user.id};')
        cur.execute(f'SELECT how_mach_ref FROM users WHERE chat_id = {ref_id_1lv} and chat_id = {ref_id_2lv};')
        for how_mach_ref in cur.fetchmany(2):
            how_mach_ref1 = how_mach_ref[0]
            how_mach_ref2 = how_mach_ref[1]
        cur.execute(f'UPDATE users SET how_mach_ref = {how_mach_ref1 + 1} WHERE chat_id = {ref_id_1lv};')
        cur.execute(f'UPDATE users SET how_mach_ref = {how_mach_ref2 + 1} WHERE chat_id = {ref_id_2lv};')
        con.commit()
        await bot.send_message(callback.from_user.id, 'Всё Ок')

        await state.finish() # Завершаем FSM, очищаем переменные

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


Как записывать и распозновать речь с определенным промежутком?
Есть такой вот код где для записи используется pyaudio возможно ли записывать только 15 секунд
<code>
import speech_recognition as sr

word_cnt = 1 #так как считаем кол-во проблелов,а последнего пробела нет
mic = sr.Microphone(device_index = 0)
r = sr.Recognizer()

with mic as source:
    audio = r.listen(source)
    print("done")

try:
    text = r.recognize_google(audio,language='ru-RU')
    print (text)

except sr.UnknownValueError:
    print("Не понял")

except sr.RequestError:
    print("Нет ответа от серверов гуугла".format(e))

#for i in range(len(text)):
#    if text[i] == ' ':
#        word_cnt += 1
#print(word_cnt)
</code>

Согласно документации вроде бы можно задать такой параметр:
<code>
r.listen(source, phrase_time_limit=15)
</code>


Выходит ошибка в терминале когда ввожу pip [дубликат]

На этот вопрос уже даны ответы здесь:

pip не является внешней или внутренней командой / не распознано как имя командлета, функции, файла сценария или выполняемой программы

                                (5 ответов)

Закрыт 2 года назад.

"pip" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Помогите пожайлуста!

Если у вас Windows 10, то выполните следующее:
Открываем в панели управления пункт система далее нажимаем на Дополнительные параметры системы далее переменные среды, а после измените параметр Path и добавьте туда следующее:

ваш путь к Python
ваш путь к Python\Scripts\

(Это мой пример)

C:\Users\PC\AppData\Local\Programs\Python\Python39\
C:\Users\PC\AppData\Local\Programs\Python\Python39\Scripts\


Инлайн кнопки телеграм бота
SQL-запрос лежит в переменной,переменная прицепленна к кнопке. клиент нажимает кнопку и запрос(переменная улетает в базу) и возвращается выборка, которая показывается клиенту.
Вопрос: как сделать чтоб улетал запрос после нажатия? И убрать имя бота в запросе
Вот код кнопок:
<code>
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

    @dp.message_handler(commands=['start'])
    async def process_command(message: types.Message):
        await message.reply("Нажмите одну из кнопок", reply_markup=kb.inline_kb_full)

        inline_kb_full = InlineKeyboardMarkup(row_width=2).add(inline_btn_1)
        inline_kb_full.add(InlineKeyboardButton('Вторая кнопка', callback_data='btn2'))
        inline_btn_3 = InlineKeyboardButton('кнопка 3', callback_data='btn3')
        inline_btn_4 = InlineKeyboardButton('кнопка 4', callback_data='btn4')
        inline_btn_5 = InlineKeyboardButton('кнопка 5', callback_data='btn5')
        inline_kb_full.add(inline_btn_3, inline_btn_4, inline_btn_5)
        inline_kb_full.row(inline_btn_3, inline_btn_4, inline_btn_5)
        inline_kb_full.insert(InlineKeyboardButton("query=''", switch_inline_query=''))
        inline_kb_full.insert(InlineKeyboardButton("query='qwerty'", switch_inline_query='qwerty'))
        inline_kb_full.insert(InlineKeyboardButton("Inline в этом же чате", switch_inline_query_current_chat='wasd'))
        inline_kb_full.add(InlineKeyboardButton('Связаться с оператором', url=config.url))
</code>

если вы хотите, что бы запрос в базу данных шел после нажатия кнопки, сделайте её в calldata


Как применить apply к двум столбцам?
Посчитать абсолютное значение отклонения
b от
c с использованием
apply и сохранить результат в столбец
d.

df = pd.DataFrame({ 'a':[7083.3317, 1249.9998, 3749.9999, 2083.3332],
                    'b': [182.93, 34.534, 59.334, 84.93],
                    'c': [157.93, 10.534, 24.334, 55.93]})

        a          b        c
0   7083.3317   182.930  157.930
1   1249.9998   34.534   10.534
2   3749.9999   59.334   24.334
3   2083.3332   84.930   55.930

К сожалению, нижеприведённое решение не принимается:

df['d'] = abs(df['b'] - df['c'])

Надо:

f = lambda row: abs(row['x'] - row['y'])
df['d'] = df.loc[:, 'b', 'c'].apply(f, axis=1)

Выдаёт ошибку:

IndexingError: Too many indexers

Можно без
.apply() - у Pandas Series есть метод Series.abs():

In [25]: df['d'] = (df['b'] - df['c']).abs()

In [26]: df
Out[26]:
           a        b        c     d
0  7083.3317  182.930  157.930  25.0
1  1249.9998   34.534   10.534  24.0
2  3749.9999   59.334   24.334  35.0
3  2083.3332   84.930   55.930  29.0

Как это сделать при помощи lambda функции:

In [28]: df.apply(lambda row: row["b"] - row["c"], axis=1)
Out[28]:
0    25.0
1    24.0
2    35.0
3    29.0
dtype: float64

NOTE: метод
DataFrame.apply(..., axis=1) - очень медленный и его стоит использовать только если невозможно найти другое векторизированное решение.


Поиск по регулярным выражениям в Python
Есть строка следующего вида
test = 'Найти символ key_1_2 и key_1'. У меня есть список с ключами, которые необходимо найти в строке и извлечь их позицию
list_key = ['key_1', 'key_1_2', 'key_2', 'key_2_2']. Проблема заключается в том, что когда я в цикле закидываю
key_1 в строку он находит этот ключ в подстроке
key_1_2  и возвращает позицию этой подстроки.

import re
test = 'Найти символ key_1_2 и key_1'
list_key = ['key_1', 'key_1_2', 'key_2', 'key_2_2']
for key in list_key:
    result_search = re.search(key, test)
    if result_search:
        key_position = result_search.span()[0]
        print(key, test, key_position)

Как можно настроить поиск регулярки, чтобы она четко находила ключи.

Добавляйте
\b, чтобы проверялись границы слов
Пример:

import re

test = 'Найти символ key_1_2 и key_1'
print(test)

list_key = ['key_1', 'key_1_2', 'key_2', 'key_2_2']
for key in list_key:
    result_search = re.search(fr"\b{key}\b", test)
    if result_search:
        key_position = result_search.span()[0]
        print(key, key_position)

Результат:

Найти символ key_1_2 и key_1
key_1 23
key_1_2 13


Как в Python подключить к скрипту настройки из файла?
Пишу бот для инсты на InstaPy. Поскольку в InstaPy очень много настроек, хочу вывести их в отдельный текстовый файл чтобы при смене настроек не переписывать их в исходнике, а просто поправить в файле. Подскажите как это сделать чтобы не пришлось в коде нагараживать кучу if? Просто пока толком не понимаю как правильно это сделать.

Используй Python файл
<code>
import filename
</code>


Общие вхождения или пересечения двух QuerySet Django Q object
Есть два сформированных QuerySet, надо сформировать итоговый QuerySet, но только встречающийся там и там. то есть найти пересечения с помощью Q. Ниже будет пример с обычным list, чтобы понять, что я имею ввиду.
views

filter = 'sometext'
list1 = Orders.objects.filter(device__in=filter).values_list('related_uuid')
list2 = Clients.objects.filter(name__in=filter).values_list('related_uuid')
conds = Q(related_uuid__in=list1) | Q(related_uuid__in=list2)
return Orders.objects.filter(conds)
# выводит все вхождения list1 и list2, а надо пересечения

пример вывода c list для понимания:

list1 = [1,2,3]
list2 = [4,5,1]
conds = Q(related_uuid__in=list1) | Q(related_uuid__in=list2)
return Orders.objects.filter(conds)
# вывод только записи 1
# пример не рабочий, просто для понимания, что мне надо найти пересечения

надо вывести только значение
1, так как оно встречается в обоих
list. Как сделать это с помощью
Q?

<code>
conds = Q(related_uuid__in=list1) & Q(related_uuid__in=list2)
</code>
Рекомендую прочитать про Django Q Operations. Можно даже переведенные со старый версий, особо ничего не менялось


Django Добавление комментариев
Проблема заключается в том что если ввести комментарий и нажать на кнопку ДОБАВИТЬ несколько раз подряд быстро, то комментарий  добавится несколько раз.
Подскажите как сделать проверку для добавления комментариев что бы можно было добавлять раз в 30 сек допустим.
модель и форма простая
<code>
class Reviews(models.Model):

    name= models.CharField(max_length=255, verbose_name='Имя')
    text= models.TextField('Сообщение',max_length=500)
    product=models.ForeignKey(Product,verbose_name='Продукт',on_delete=models.CASCADE)
    data = models.DateTimeField(auto_now=True,db_index=True,verbose_name='Добавлено')

    def __str__(self):
        return f"{self.name}-{self.product}"

    class Meta:
        verbose_name='Отзыв'
        verbose_name_plural='Отзывы'
        ordering = ['-data',]

class ReviewsForm(forms.ModelForm):

    class Meta:
        model= PostRewiews
        fields= ('text',)

class BlogAddReview(View):

    def post(self,request,id):
        if request.user.is_authenticated:
            post = Post.objects.get(id=id)
            form=ReviewsForm(request.POST or None)
            if  form.is_valid():
                form=form.save(commit=False)
                form.name = request.user.username
                form.post=post
                form.save()
            return redirect(request.META.get('HTTP_REFERER','redirect_if_referer_not_found'))
        else:
            return redirect('login')
</code>

Предлагаю при первом клике "дизейблить" кнопку.
<code>
function disable_on_click() {
  var element = document.getElementById('the-button-id');
  element.setAttribute("disabled", "disabled");
}
</code>


Как вернуть работоспособность спрятаному окну?
После применения методов
withdraw и
deiconify окно заморозилось:не отвечает на команды,не работают кнопки,меню и т.д.
Ну собственно вопрос - что делать?
Вот сам проект , в нём есть файл "проект.py",для работы которого нужен,как минимум 1 работающий COM порт
Код из файла проект.py

import serial.tools.list_ports
from tkinter import *
from tkinter import ttk
from Arduino import Arduino
from win32api import GetSystemMetrics, GetMonitorInfo, MonitorFromPoint
import time

monitor_info = GetMonitorInfo(MonitorFromPoint((0,0)))
monitor_area = monitor_info.get("Monitor")
work_area = monitor_info.get("Work")
task_bar = monitor_area[3] - work_area[3]

resx_win = str(int((GetSystemMetrics(0)/2)-(900/2)))
resy_win = str(int((GetSystemMetrics(1)/2)-(700/2) - task_bar))
resx_head = str(int((GetSystemMetrics(0)/2) - 800/2))
resy_head = str(int((GetSystemMetrics(1)/2) - (500/2)- task_bar))
warningx_head = str(int((GetSystemMetrics(0)/2)-300/2))
warningy_head = str(int((GetSystemMetrics(1) / 2) - (200 / 2) - task_bar))
resx_LED = str(int((GetSystemMetrics(0)/2)-950/2))
resy_LED = str(int((GetSystemMetrics(1)/2)-(600/2) - task_bar))

ports = serial.tools.list_ports.comports()
for port, desc, hwid in sorted(ports):
    port

head = Tk()

head.geometry('800x500+'+resx_head+'+'+resy_head)
head.title('Лаунчер')
head.resizable(width=False, height=False)
head.wm_attributes('-alpha', 0.95)
custom_bg = PhotoImage(file = 'custom_bg.png',master = head)
head.iconbitmap('window.ico')

def warning_port_baud_def():
    warning_port_baud = Toplevel()
    warning_port_baud.grab_set()
    warning_port_baud.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_port_baud.title('Ошибка')
    warning_port_baud.iconbitmap('mistake.ico')
    warning_port_baud.resizable(width=False, height=False)
    warning_canvas = Canvas(warning_port_baud, width=300, height=200)
    warning_canvas.pack()
    warning_port_baud_frame = Frame(warning_port_baud)
    warning_port_baud_frame.place(relwidth=1, relheight=1)

    warning_port_baud_label = Label(warning_port_baud_frame,text='Введите \nнеобходимые\n значения '    #
                                                '\nдля порта \nи скорости', font= ("message-box",16))   #
    warning_port_baud_label.place(x=120, y=20, width=180, height=150)                                   # Окно,вылезающее при
    global warning_image                                                                                # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_port_baud_frame)                    # порта или бодрейта
    warning_ico = Label(warning_port_baud_frame, image=warning_image)                                   # Ну и картинка для
    warning_ico.place(x=15, y=43)                                                                       # этого окна
    warning_port_baud.mainloop()

def warning_port_def():
    warning_port = Toplevel()
    warning_port.grab_set()
    warning_port.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_port.title('Ошибка')
    warning_port.iconbitmap('mistake.ico')
    warning_port.resizable(width=False, height=False)
    warning_port_canvas = Canvas(warning_port,width=300, height=200)
    warning_port_canvas.pack()
    warning_port_frame = Frame(warning_port)
    warning_port_frame.place(relwidth=1, relheight=1)
    warning_port_label = Label(warning_port_frame, text='Некорректный\nввод порта',font=("message-box", 16))  #
    warning_port_label.place(x=120, y=20, width=180, height=150)               # Окно,вылезающее при
    global warning_image                                                            # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_port_frame)     # порта
    warning_ico = Label(warning_port_frame, image=warning_image)                    # Ну и картинка
    warning_ico.place(x=15, y=43)
    warning_port.mainloop()

def warning_port_num_def():
    warning_port_num = Toplevel()
    warning_port_num.grab_set()
    warning_port_num.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_port_num.title('Ошибка')
    warning_port_num.iconbitmap('mistake.ico')
    warning_port_num.resizable(width=False, height=False)
    warning_port_num_canvas = Canvas(warning_port_num,width=300, height=200)
    warning_port_num_canvas.pack()
    warning_port_num_frame = Frame(warning_port_num)
    warning_port_num_frame.place(relwidth=1, relheight=1)
    warning_port_num_label = Label(warning_port_num_frame, text='Некорректный\nввод порта:\nукажите '
                                'его\n номер\n[1,2,3 и т.д.]',font=("message-box", 16)) #
    warning_port_num_label.place(x=120, y=20, width=180, height=150)                   # Окно,вылезающее при
    global warning_image                                                                # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_port_num_frame)     # номера порта
    warning_ico = Label(warning_port_num_frame, image=warning_image)                    # Ну и картинка
    warning_ico.place(x=15, y=43)
    warning_port_num.mainloop()

def warning_port_name_def():
    warning_port_name = Toplevel()
    warning_port_name.grab_set()
    warning_port_name.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_port_name.title('Ошибка')
    warning_port_name.iconbitmap('mistake.ico')
    warning_port_name.resizable(width=False, height=False)
    warning_port_name_canvas = Canvas(warning_port_name,width=300, height=200)
    warning_port_name_canvas.pack()
    warning_port_name_frame = Frame(warning_port_name)
    warning_port_name_frame.place(relwidth=1, relheight=1)
    warning_port_name_label = Label(warning_port_name_frame, text='Некорректный\nввод порта:'
                                '\nданный порт\nне подключен',font=("message-box", 16))  #
    warning_port_name_label.place(x=120, y=20, width=180, height=150)                    # Окно,вылезающее при
    global warning_image                                                                 # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_port_name_frame)     # порта
    warning_ico = Label(warning_port_name_frame, image=warning_image)                    # Ну и картинка
    warning_ico.place(x=15, y=43)
    warning_port_name.mainloop()

def warning_baud_def():
    warning_baud = Toplevel()
    warning_baud.grab_set()
    warning_baud.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_baud.title('Ошибка')
    warning_baud.iconbitmap('mistake.ico')
    warning_baud.resizable(width=False, height=False)
    warning_baud_canvas = Canvas(warning_baud,width=300, height=200)
    warning_baud_canvas.pack()
    warning_baud_frame = Frame(warning_baud)
    warning_baud_frame.place(relwidth=1, relheight=1)
    warning_baud_label = Label(warning_baud_frame, text='Некорректный\nввод бодрейта:\nиспользуйте\nцифры',font=("message-box", 16))  #
    warning_baud_label.place(x=120, y=20, width=180, height=150)               # Окно,вылезающее при
    global warning_image                                                            # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_baud_frame)     # порта
    warning_ico = Label(warning_baud_frame, image=warning_image)                    # Ну и картинка
    warning_ico.place(x=15, y=43)
    warning_baud.mainloop()

def warning_baud_min_def():
    warning_baud_min = Toplevel()
    warning_baud_min.grab_set()
    warning_baud_min.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_baud_min.title('Ошибка')
    warning_baud_min.iconbitmap('mistake.ico')
    warning_baud_min.resizable(width=False, height=False)
    warning_baud_min_canvas = Canvas(warning_baud_min,width=300, height=200)
    warning_baud_min_canvas.pack()
    warning_baud_min_frame = Frame(warning_baud_min)
    warning_baud_min_frame.place(relwidth=1, relheight=1)
    warning_baud_min_label = Label(warning_baud_min_frame, text='Некорректный\nввод бодрейта\nМинимум: 300',font=("message-box", 16))  #
    warning_baud_min_label.place(x=120, y=20, width=180, height=150)               # Окно,вылезающее при
    global warning_image                                                            # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_baud_min_frame)     # порта
    warning_ico = Label(warning_baud_min_frame, image=warning_image)                    # Ну и картинка
    warning_ico.place(x=15, y=43)
    warning_baud_min.mainloop()

def port_OlO_def():
    port_OlO = Toplevel()
    port_OlO.geometry('300x200+' + warningx_head + '+' + warningy_head)
    port_OlO.title('Ошибка')
    port_OlO.resizable(width=False, height=False)
    port_OlO.iconbitmap('mistake.ico')
    port_OlO_frame = Frame(port_OlO)
    port_OlO_frame.place(relwidth=1, relheight=1)
    port_OlO_label = Label(port_OlO_frame, text='Издеваетесь?',font=("message-box", 16))
    port_OlO_label.place(x=120, y=20, width=180, height=150)
    global warning_image
    warning_image = PhotoImage(file='y_warning.png', master=port_OlO_frame)
    warning_ico = Label(port_OlO_frame, image=warning_image)
    warning_ico.place(x=15, y=43)
    port_OlO.mainloop()

###################################

def Win():
    head.withdraw()
    win = Toplevel()
    win.geometry('900x700+' + resx_win + '+' + resy_win)
    win.title('Набор')
    win["bg"] = "#a17a86"
    win.iconbitmap('window.ico')
    win.resizable(width=False, height=False)
    win.protocol("WM_DELETE_WINDOW", lambda: head.destroy())    # Закрывает окно head,при закрытии этого

    frame_lobby = Frame(win)
    frame_lobby.place(relwidth = 1,relheight = 1)
    frame_lobby.configure(background = "#FFAEC2")

    LED_bg = PhotoImage(file = 'LED_bg.png')
    LCD_bg = PhotoImage(file = 'LCD_bg.png')
    buzzer_bg = PhotoImage(file = 'buzzer_bg.png')
    ultrasound_bg = PhotoImage(file = 'ultrasound_bg.png')
    servo_bg = PhotoImage(file = 'servo_bg.png')
    DS18B20_bg = PhotoImage(file = 'DS18B20_bg.png')

    help_button_image = PhotoImage(file = 'help_button_image.png')
    help_button_image_small = help_button_image.subsample(85, 85)

    def LED_window_def():
        win.withdraw()
        LED_window = Toplevel()
        LED_window.grab_set()
        LED_window.geometry('950x600+{}+{}'.format(resx_LED,resy_LED))
        LED_window.title("Светодиод")
        LED_window.resizable(width=False, height=False)
        LED_window.protocol("WM_DELETE_WINDOW", lambda: head.destroy())
        LED_frame = Frame(LED_window)
        LED_frame.place(relwidth = 1,relheight = 1)
        LED_frame.configure(background = "")

        LED_button_on_off = Label(LED_frame,text = 'Тут будет гифка ON/OFF')
        LED_button_on_off.place(x = 30,y = 120,width = 200,height = 130)

        LED_button_on_off_str = Label(LED_frame, text='Тут будет гифка ON/OFF--STR')
        LED_button_on_off_str.place(x = 260,y = 120,width = 200,height = 130)

        LED_button_bright = Label(LED_frame,text = 'Яркость (ШИМ со шкалой)')
        LED_button_bright.place(x = 490,y = 120,width = 200,height = 130)

        LED_button_bright_POT = Label(LED_frame,text = 'Яркость(потенциометр)')
        LED_button_bright_POT.place(x = 720,y = 120,width = 200,height = 130)

        tut_budet_bg = Label(LED_frame,text = 'Тут будет <BG>')
        tut_budet_bg.place(x = 325,y = 0 ,width = 300,height = 80)

        help_button = ttk.Button(LED_frame,text = 'Условие',image = help_button_image_small,compound = LEFT,)
        help_button_style = ttk.Style(head)
        help_button_style.configure('TButton', font=('lucida console', '15'),background = '#fafad2')
        help_button.place(x = 760,y = 15,width = 140,height = 45)

        def undo():
            win.deiconify()
            LED_window.withdraw()

        undo_LED_button = ttk.Button(LED_frame,text = 'Назад',command = undo)
        undo_LED_button.place(width = 100,height = 45)

    LED_button = Button(frame_lobby,image = LED_bg,command = LED_window_def)
    LED_button.place(x = 50,y = 20)
    ultrasound_button = Button(frame_lobby, image=ultrasound_bg)
    ultrasound_button.place(x = 50,y = 245)
    LCD_button = Button(frame_lobby,image = LCD_bg)
    LCD_button.place(x = 50,y = 470)
    buzzer_button = Button(frame_lobby,image = buzzer_bg)
    buzzer_button.place(x = 475,y= 20)
    servo_button = Button(frame_lobby,image = servo_bg)
    servo_button.place(x = 475,y = 245)
    DS18B20_button = Button(frame_lobby,image = DS18B20_bg)
    DS18B20_button.place(x = 475,y = 470)

    win.mainloop()

def WinSon():

    port_ch = (var_p.get())         #
    if port_ch == PortList[0]:      # Если в меню не выбран порт,
        port_ch = entry_p.get()     # читает поле ввода
        print(port_ch)              #

    baudrate = (var_bd.get())       #
    if baudrate == BaudList[0]:     # То же самое,
        baudrate = entry_bd.get()   # только уже с бодрейтом
        print(baudrate)             #
    index = port_ch.find("COM")

    if len(port_ch) == 0 or len(baudrate) == 0: #
        print(len(port_ch))                     # Проверка на длину введённых данных
        print(len(baudrate))                    # <Потом добавлю поиск подстроки 'COM'>
        warning_port_baud_def()                 #
    elif index == -1:
        warning_port_def()
    elif baudrate.isdigit() == False:
        warning_baud_def()
    elif int(baudrate) < 300:
        warning_baud_min_def()
    elif port_ch == 'COM':
        warning_port_num_def()
    elif port_ch != port:
        warning_port_name_def()
    else:
        Win()

frame = Frame(head)
frame.place(relwidth = 1,relheight = 1)

bg = PhotoImage(file = 'bg_800x500.png')    #
wallpaper = Label(frame,image = bg)         # Пикча для BG
wallpaper.pack()                            #

t_p = ttk.Label(frame, text='ПОРТ/выбери или напиши', background='#A52A2A',
                font = ('lucida console','14'),anchor = CENTER)
t_p.place(x=20, y = 220, width = 370, height = 60)
PortList = ['Выберите порт', port]
var_p = StringVar(frame)
var_p.set(PortList[0])

opt_p = ttk.OptionMenu(frame, var_p, *PortList)
opt_p.place(x=20, y=280, width=185, height=30)

entry_p = Entry(frame,font = 15)
entry_p.place(x = 205,y = 280,width = 185,height = 30)

t_bd = ttk.Label(frame,text = 'БОДРЕЙТ указанный в \nскетче ардуино|выбери или напиши',
    background = '#A52A2A',font = ('lucida console','14'),anchor = CENTER)
t_bd.place(x = 410,y = 220,width = 370,height = 60)
BaudList = ['Выберите скорость',300,1200,2400,4800,9600,19200,38400,57600,74880,115200]
var_bd = StringVar(frame)
var_bd.set(BaudList[0])
opt_bd = ttk.OptionMenu(frame, var_bd, *BaudList)
opt_bd.place(x = 410,y = 280,width = 185,height = 30)

entry_bd = Entry(frame, font=15)
entry_bd.place(x=595, y=280, width=185, height=30)

further = PhotoImage(file = 'далее.png')
small_further = further.subsample(15, 15)

further_Button_style = ttk.Style(head)
further_Button_style.configure('TButton',font = ('lucida console','15'))

further_Button = ttk.Button(frame,text = 'Далее',image = small_further,
    compound = LEFT,style = 'TButton',command = WinSon)          # WinSon
further_Button.place(x = 350,y = 370,width = 130,height = 50)

head.mainloop()

Проблема вот в чем:

LED_window = Toplevel()
LED_window.grab_set()  # <--

...

def undo():
    win.deiconify()
    LED_window.withdraw()

Метод
.grab_set() делает дочернее окно модальным, так что пока оно существует, основное окно блокируется. Если дочернее окно просто скрыть, то основное окно так и останется заблокированным.
Нужно или отменять действие
.grab_set() с помощью метода
.grab_release():

def undo():
    win.deiconify()
    LED_window.grab_release()
    LED_window.withdraw()

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

def undo():
    win.deiconify()
    LED_window.destroy()

Третий вариант - не делать
.grab_set(), т.к. у вас в любом случае предыдущие окна скрываются, поэтому нет смысла их блокировать. Можно еще совместить последние два варианта: не блокировать и при выходе уничтожать.


discord.py отправка сообщения без ввода команды в канале
у меня есть код:
<code>
import discord
from discord.ext import commands

Bot = commands.Bot(command_prefix="")

@Bot.command(pass_context=True)

async def go_say(ctx):
    say_at_me = input("Введите сообщение через консоль: ")
    await ctx.send(say_at_me)

Bot.run('.......')
</code>
что нужно добавить что бы при запуске бота, можно было писать в дискорд канал без того что бы кто то ввёл команду?

В библиотеке
asyncio есть специальный метод -
asyncio.run_coroutine_threadsafe(def(args), loop)
Он принимает 2 аргумента. Первый - вызываемая функция, второй - поток, в котором ее нужно вызвать. Создадим асинхронную функцию для отправки сообщения. Ее не нужно помечать декоратором
@bot.command(), так как она не будет являться командой бота.
Функция будет принимать 2 аргумента - ID текстового канала (
int) и текст для отправки (
str). После вызова, используя объект бота получаем объект канала из ID и отправляем туда сообщение.

async def send_msg(channel, text):
    channel = bot.get_channel(channel)
    await channel.send(text)

Как только бот готов к работе (функция-событие бота
on_ready()), можем принимать в консоли текст и id, а затем передавать их в функцию
send_msg(), в потоке бота.

@bot.event
async def on_ready():
    text = input('Введите сообщение:')
    channel = int(input('Введите ID канала, куда нужно отправить сообщение\n>'))
    asyncio.run_coroutine_threadsafe(send_msg(channel, text), bot.loop)

Полный код:

import discord, asyncio
from discord.ext import commands

bot = commands.Bot(command_prefix='!')

async def send_msg(channel, text):
    channel = bot.get_channel(channel)
    await channel.send(text)

@bot.event
async def on_ready():
    text = input('Введите сообщение:')
    channel = int(input('Введите ID канала, куда нужно отправить сообщение\n>'))
    asyncio.run_coroutine_threadsafe(send_msg(channel, text), bot.loop)

bot.run(TOKEN)


Python Получить данные словаря если есть его имя как строка
Например у меня есть:
<code>
client1={"Name":"Vladimir","Surname":"Ivanovich","age":40}
client2={"Name":"Sergey","Surname":"Vitaliev","age":23}
info="client1"
</code>
Как теперь получить словарь client1 из переменной info?(То есть если-бы info="client2", то тогда он выводил словарь client2, а если info="client1", то выводить client1)
Помогите пожалуйста :D

Лучше так не делать. Можно просто пололожить ваши словари в ещё один словарь, и обращаться к ним по ключу:
<code>
clients = {
    "client1": {"Name":"Vladimir","Surname":"Ivanovich","age":40},
    "client2": {"Name":"Sergey","Surname":"Vitaliev","age":23},
}

info="client1"

print(clients[info])
</code>


IndentationError: expected an indented block. 38 строка
Ошибка IndentationError: expected an indented block на 38 строке.
Весь код:

# импорт модулей
import random
import time

# создание переменных
money = 0
health = 100

# приветствие
print("Добро пожаловать в 'Бесконечную Россию'")
print("Выберите действие:")
print("1) Пойти работать (+ 20 руб.)")
print("2) По спать (+10 здоровья)")
print("3) Купить лотерейный билет (- 25 руб.)")
print("4) Пойти погулять (+10 здоровья. Возможно случиться какая-то неприятность, и будет минус к здоровью)")
print("5) Стата")
answer = input("")

# выбор и что за ним последует
if answer == "1":
    print("Подождите 40 секунд")
    time.sleep(40)
    money += 20
    print("Вы заработали 20 рублей!")
    print("Теперь ваш баланс", money, "руб.")
    # перейти к "Выберите действие"
if answer == "2":
    if health == 100:
        print("Ваш запас здоровья на максимуме, если вы поспите то вам не прибавиться здоровье. ")
        print("Если вы хотите продолжить нажмите 'y', потом [ENTER]. Если хотите вернуться к началу нажмите 'n', а потом [ENTER]")
        answer_sleep = input("")
        if answer_sleep == "y":
            print("Подождите 30 секунд.")
            time.sleep(30)
            # перейти к "Выберите действие"
        if answer_sleep == "n":
            # перейти к "Выберите действие"
    elif health < 80:
        print("Подождите 30 секунд")
        time.sleep(30)
        health += 20
        print("Вам добавлено 20 жизней. Теперь у вас", health, "жизней")
    else:
        print("Подождите 30 секунд")
        time.sleep(30)
        print("Ваш запас здоровья полностью востановлено")
if answer == "3":
    if money > 25:
        money -= 25
        number = random.randint(100, 999)
        print("Ваш номер билета", number)
        print("Подождите 10 секунд, мы проверяем какой билет выиграл")
        chance_to_win = random.randint(1, 100)
        timw.sleep(10)
        if chance_to_win == 100:
            money += 20000
            print("Поздравляем! Вы выиграли 20 000 рублей! Теперь на вашем балансе", money, "руб.")
        else:
            print("Сожалеем, но ваш номер билета не выиграл.")
    else:
        print("Вам не хватает денег для покупки лотерейного билета")
if answer == "4":
    chance_to_trouble = random.randint(1,50)
    if chance_to_trouble == 2:
        print("Вы решили пойти погулять.")
        print("Подождите 15 секунд.")
        time.sleep(15)
        health -= 5
        print("Вы споткнулись. Ваше здоровье уменьшилось на 5. Теперь у вас", health, "здоровья")
    elif chance_to_trouble == 4:
        print("Вы решили пойти погулять.")
        print("Подождите 15 секунд.")
        time.sleep(15)
        health -= 15
        print("Вы решили проехаться на самокате, и упали с него. Ваше здоровье уменьшено на 15. Теперьу вас", health, "здоровья")
    elif chance_to_trouble == 10:
        print("Вы решили пойти погулять.")
        print("Подождите 15 секунд.")
        time.sleep(15)
        health -= 30
        print("Вы решили покататься на велосипеде, ив врезались в стену. Ваше здоровье уменьшено на 30. Теперь у вас", health, "здоровья")
    else:
        if health < 90:
            print("Вы погуляля, без проишествий. Вам добавлено 10 жизней. Теперь у вас", health, "здоровья")
        else:
            print("Вы погуляли без проишествий. Вас запас здоровья полностью восстановлен")
if answer == "5":
    print("У вас", health, "здоровья")
    print("У вас", money, "рублей")

Содержание строки:

elif health < 80:
Сразу говорю, код ещё далеко не дописан, поэтому советов по остальной части кода не надо

Эта ошибка возникает, потому что вы после
if answer_sleep == "n": не написали никакого действия, а по правилам так не положено.
Если вы хотите пока что оставить там "пустоту", то напишите в теле
if строку
pass так:

# импорт модулей
import random
import time

# создание переменных
money = 0
health = 100

# приветствие
print("Добро пожаловать в 'Бесконечную Россию'")
print("Выберите действие:")
print("1) Пойти работать (+ 20 руб.)")
print("2) По спать (+10 здоровья)")
print("3) Купить лотерейный билет (- 25 руб.)")
print("4) Пойти погулять (+10 здоровья. Возможно случиться какая-то неприятность, и будет минус к здоровью)")
print("5) Стата")
answer = input("")

# выбор и что за ним последует
if answer == "1":
    print("Подождите 40 секунд")
    time.sleep(40)
    money += 20
    print("Вы заработали 20 рублей!")
    print("Теперь ваш баланс", money, "руб.")
    # перейти к "Выберите действие"
if answer == "2":
    if health == 100:
        print("Ваш запас здоровья на максимуме, если вы поспите то вам не прибавиться здоровье. ")
        print("Если вы хотите продолжить нажмите 'y', потом [ENTER]. Если хотите вернуться к началу нажмите 'n', а потом [ENTER]")
        answer_sleep = input("")
        if answer_sleep == "y":
            print("Подождите 30 секунд.")
            time.sleep(30)
            # перейти к "Выберите действие"
        if answer_sleep == "n":
            # перейти к "Выберите действие"
            pass                        # <-----
    elif health < 80:
        print("Подождите 30 секунд")
        time.sleep(30)
        health += 20
        print("Вам добавлено 20 жизней. Теперь у вас", health, "жизней")
    else:
        print("Подождите 30 секунд")
        time.sleep(30)
        print("Ваш запас здоровья полностью востановлено")
if answer == "3":
    if money > 25:
        money -= 25
        number = random.randint(100, 999)
        print("Ваш номер билета", number)
        print("Подождите 10 секунд, мы проверяем какой билет выиграл")
        chance_to_win = random.randint(1, 100)
        timw.sleep(10)
        if chance_to_win == 100:
            money += 20000
            print("Поздравляем! Вы выиграли 20 000 рублей! Теперь на вашем балансе", money, "руб.")
        else:
            print("Сожалеем, но ваш номер билета не выиграл.")
    else:
        print("Вам не хватает денег для покупки лотерейного билета")
if answer == "4":
    chance_to_trouble = random.randint(1,50)
    if chance_to_trouble == 2:
        print("Вы решили пойти погулять.")
        print("Подождите 15 секунд.")
        time.sleep(15)
        health -= 5
        print("Вы споткнулись. Ваше здоровье уменьшилось на 5. Теперь у вас", health, "здоровья")
    elif chance_to_trouble == 4:
        print("Вы решили пойти погулять.")
        print("Подождите 15 секунд.")
        time.sleep(15)
        health -= 15
        print("Вы решили проехаться на самокате, и упали с него. Ваше здоровье уменьшено на 15. Теперьу вас", health, "здоровья")
    elif chance_to_trouble == 10:
        print("Вы решили пойти погулять.")
        print("Подождите 15 секунд.")
        time.sleep(15)
        health -= 30
        print("Вы решили покататься на велосипеде, ив врезались в стену. Ваше здоровье уменьшено на 30. Теперь у вас", health, "здоровья")
    else:
        if health < 90:
            print("Вы погуляля, без проишествий. Вам добавлено 10 жизней. Теперь у вас", health, "здоровья")
        else:
            print("Вы погуляли без проишествий. Вас запас здоровья полностью восстановлен")
if answer == "5":
    print("У вас", health, "здоровья")
    print("У вас", money, "рублей")


zope interface verifyObject() не замечает self атрибута в классе
В документации говорится, что:
Attributes of the object, be they defined by its class or added by its
__init__ method, will be recognized:

>>> from zope.interface import Interface, Attribute, implementer
>>> from zope.interface import Invalid
>>> from zope.interface.verify import verifyObject
>>> oname, __name__ = __name__, 'base' # Pretend we're in a module, not a doctest
>>> class IBase(Interface):
...     x = Attribute("The X attribute")
>>> __name__ = 'module' # Pretend to be a different module.

>>> class IFoo(IBase):
...     y = Attribute("The Y attribute")
>>> __name__ = oname; del oname

>>> @implementer(IFoo)
... class Foo(object):
...     x = 1
...     def __init__(self):
...         self.y = 2

>>> verifyObject(IFoo, Foo())
True

Я пытаюсь повторить то же самое, только с другим кодом:

import zope.interface
from zope.interface.verify import verifyObject

class IPerson(zope.interface.Interface):
    _name = zope.interface.Attribute('Name')
    _surname = zope.interface.Attribute('Surname')
    _age = zope.interface.Attribute('Age')

@zope.interface.implementer(IPerson)
class Test:
    _surname = ""

    def __init__(self):
        self._name = ""
        self._age = ""

verifyObject(IPerson, Test)

И у меня возникает ошибка, что не все атрибуты реализованы. По сути проверка замечает только поле класса

zope.interface.exceptions.MultipleInvalid: The object <class 'models.Test'> has failed to implement interface models.IPerson:
Does not declaratively implement the interface
The models.IPerson.Name attribute was not provided
The models.IPerson.Age attribute was not provided

Что я делаю не так, подскажите, пожалуйста

Да, была похожая проблема, если забыть скобки, то параметр будет сам класс, а не его экземпляр.
То есть, такая разница:
<code>
>>> class Foo(object):
...     x = 1

>>> Foo
<class '__main__.Foo'>
>>> Foo()
<__main__.Foo object at 0x6fffffdde5c0>
</code>


Даны две переменные со словарем и словарем с вложенным списком. Как написать функцию в python для ДЗ?
Есть исходная структура с хранимыми данными:

documents = [
{'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},
{'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},
{'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}
]

directories = {
'1': ['2207 876234', '11-2'],
'2': ['10006'],
'3': []
}

Задача:Пользователь по команде “as” может добавить новую полку
Примеры работы:
Введите команду:
as
Введите номер полки:
10
Результат:
Полка добавлена. Текущий перечень полок: 1, 2, 3, 10.
Введите команду:
as
Введите номер полки:
1
Результат:
Такая полка уже существует. Текущий перечень полок: 1, 2, 3.
Сейчас реализовал следующий код:

def add_shelf():
    number_1 = input("Введите номер новой полки: ")
    #number = input("Введите номер полки: ")
    directories[number] = []
    for k in directories.items():
        if number in k:
            return ('Такая полка уже существует. Текущий перечень полок: ') + str(k)
        else:
            return (number_1) + str(directories[number])
number = input("Введите номер полки: ")
add_shelf()

Возвращает такой результат:
"Такая полка уже существует. Текущий перечень полок: ('1', [])"
Не могу понять следующее:

Почему при запросе номера полки (которая есть в словаре) мне выходит результат:
Введите номер новой полки;
Почему при вводе вводе существующей полки, выдает не полный список полок?
Почему при вводе несуществующей полки, не добавляется новая и не выводится весь список полок?

Потому что у вас код функции начинается с такой строки, она выводится в любом случае:

number_1 = input("Введите номер новой полки: ")

Потому что вы сами сбрасываете имеющуюся полку в пустой список, видимо там должен быть
number_1 и этот код вместе с кодом п.1 должен работать при определённом условии:

directories[number] = []

Из-за ошибки в п.1 и п.2, а также из-за того, что
return сразу возвращает управление, на первой же итерации цикла, остальные иитерации цикла не выполняются. Вам надо придумать что-то другое, как-то собрать всю информацию, прежде чем возвращать результат.


Как вывелась эта формула
Встретил задание по программированию: "Из чисел от 10 до 99 вывести те, сумма цифр которых равна S".
И вот само решение:

 s = int(input())
 for i in range(10,99):
     if((i//10)+(i%10)==s): print(i)

Как вывелась эта формула
(i // 10) + (i % 10) == s ?

Первая часть - деление на 10 нацело, т.е. первая цифра двузначного числа.
Вторая часть - получение остатка от деления на 10, т.е. вторая цифра двузначного числа.
Далее - просто их суммирование...
Например, 73
<code>
73 // 10 == 7
73 %  10 == 3
</code>


Каким средством получить settings.ini удобнее, с содержимым в виде словаря и несколькими переменными?
Необходимо записать словарь и переменные в файл settings.ini, (** если файл отсутствует, создать его)
Заготовка словаря:

dict1 = [
    {'object': 'label', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'button', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'color', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'line', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'unknown', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
]

Переменные:

theme = light
icon_size = 32
indent = 36

Вопрос:
Каким образом удобней всего это сделать?
config parser, yaml или json? (важно чтобы файл назывался именно "settings.ini")

Можно так записать:

import configparser

dict1 = [
    {'object': 'label', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'button', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'color', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'line', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
    {'object': 'unknown', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command'},
]

config = configparser.ConfigParser()

config['DEFAULT'] = {'theme': 'theme', 'icon_size': 32, 'indent ': 36}

for d in dict1:
    config[d['object']] = d

with open('example.ini', 'w') as f:
    config.write(f)

Считывание из ini:

import configparser

config = configparser.ConfigParser()
config.read('example.ini')

print(dict(config['DEFAULT']))
# {'theme': 'theme', 'icon_size': '32', 'indent': '36'}

for section in config.sections():
    print(dict(config[section]))

# {'object': 'label', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command', 'theme': 'theme', 'icon_size': '32', 'indent': '36'}
# {'object': 'button', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command', 'theme': 'theme', 'icon_size': '32', 'indent': '36'}
# {'object': 'color', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command', 'theme': 'theme', 'icon_size': '32', 'indent': '36'}
# {'object': 'line', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command', 'theme': 'theme', 'icon_size': '32', 'indent': '36'}
# {'object': 'unknown', 'icon': 'icon', 'icon_hover': 'icon_hover', 'command': 'command', 'theme': 'theme', 'icon_size': '32', 'indent': '36'}

Файл
example.ini:

[DEFAULT]
theme = theme
icon_size = 32
indent  = 36

[label]
object = label
icon = icon
icon_hover = icon_hover
command = command

[button]
object = button
icon = icon
icon_hover = icon_hover
command = command

[color]
object = color
icon = icon
icon_hover = icon_hover
command = command

[line]
object = line
icon = icon
icon_hover = icon_hover
command = command

[unknown]
object = unknown
icon = icon
icon_hover = icon_hover
command = command


Как получить модуль без знания его названия в Python-3?
Я столкнулся с одной проблемой. Задача в том что мне нужно создать такую папку в которой любой человек может закинуть свой модуль где после всего моя программа будет их использовать, но опять же я не могу их импортировать пока так как нет данных о их названиях.
Тогда предположим что я смог хотя бы получить их названия из общей базы данных для этой папки. Но получить я их смог только в определенном списке.
Пример :
mods = ["mod_1", "mod_2", "mod_3"]
Мне нужно в программе импортировать эти модули, но я не могу и предположить как импортировать модули таким образом
+ По возможности объясните возможно ли импортировать модули из какой-то определённой папки. Просто мне не очень хочется сливать программные модули и пользовательские в одно окружение.

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

import os

directory = 'путь к папке'

files = os.listdir(directory)

Потом получаем имена файлов без расширения и импортируем их:

import importlib

for file in files:
    module_name = file.replace('.py', '')
    importlib.import_module(module_name)

Ну и ещё неплохо бы добавить проверку для каждого файла, что это действительно py-файл, прежде чем пытаться его импортировать, но это уж вы сами.


Даны две переменные со словарем и словарем с вложенным списком. Как написать функцию в python?
Есть исходная структура с хранимыми данными:

documents = [
{'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},
{'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},
{'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}
]

directories = {
'1': ['2207 876234', '11-2'],
'2': ['10006'],
'3': []
}

Задача:
Пользователь по команде “l” может увидеть полную информацию по всем документам
Пример работы:
Введите команду:
l
Результат:

№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2

На данный момент реализовал только часть задания:

def l():
    for c in documents:
        type = c['type']
        number = c['number']
        name = c['name']
        print('№: {1}, тип: {0}, владелец: {2}'.format(type, number, name))

    l()

результат

№: 2207 876234, тип: passport, владелец: Василий Гупкин
№: 11-2, тип: invoice, владелец: Геннадий Покемонов
№: 10006, тип: insurance, владелец: Аристарх Павлов

Ну во первых не стоит называть переменную
type.
Можно написать небольшую функцию
get_key для получения ключа по значению.

documents = [
{'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},
{'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},
{'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}
]

directories = {
'1': ['2207 876234', '11-2'],
'2': ['10006'],
'3': []
}

def get_key(d, value):
    for k, v in d.items():
        if value in v:
            return k

def l():
    for c in documents:
        doc_type = c['type']
        number = c['number']
        name = c['name']
        print('№: {1}, тип: {0}, владелец: {2} полка{3}'.format(doc_type, number, name, get_key(directories,number)))

l()


Как в Tkinter считать текст из виджета Text и построчно выполнить команды в нём
Необходимо реализовать такую систему.
Изначально у банка один клиент, на него должен быть открыт счёт с любой суммой.
В отдельном поле должна быть предусмотрена возможность ввода простых команд, которые поддерживают следующие операции:
DEPOSIT name sum Зачислить сумму sum на счет клиента name. Если клиента нет, то он создается и на него заводится счет с указанной суммой.
WITHDRAW name sum Снять сумму sum со счета клиента name. Если клиента, то счет создается. Баланс при выполнении такой операции у вновь созданного клиента должен быть отрицательный.
BALANCE name Узнать остаток средств на счету клиента name. Для каждого запроса BALANCE программа должна вывести остаток на счету данного клиента. Если же у клиента с запрашиваемым именем не открыт счет в банке, выводится сообщение «NO CLIENT». Если пользователь не указал имя клиента – то выводится баланс всех существующих клиентов.
TRANSFER name1 name2 sum Перевести сумму sum со счета клиента name1 на счет клиента name2. Если у какого-либо клиента, то он заводится в системе и ему создается счет с переведенной суммой.
INCOME p Начислить всем клиентам, у которых открыты счета, p% от суммы счета. Проценты начисляются только клиентам с положительным остатком на счету, если у клиента остаток отрицательный, то его счет не меняется. После начисления процентов сумма на счету остается целой, то есть начисляется только целое число денежных единиц. Дробная часть начисленных процентов отбрасывается.
Программа должна обрабатывать желаемые команды, при этом каждая новая команда вводится с новой строки, а потом нажимает на кнопку "Calculate". Результат должен быть выведен в поле справа.
Количество команд, которые может ввести пользователь за один раз – не более 20. При необходимости следует предусмотреть прокрутку в поле. Пользователю допускается вводить "пустые строки" - несколько раз нажимать на кнопку "enter".
<code>
from tkinter import *

win = Tk()
win.geometry('750x750')
win.minsize(width='750', height='750')
win.maxsize(width='750', height='750')

def clears():
    Texts.delete('1.0',END)

cli = {'test':3000}

def start():
    inputs_1 = Texts.get('1.0', END)
    inputs_2 = inputs_1.split()

    comand = inputs_2[0]
    name = inputs_2[1]
    balanse = cli[name]
    sums = int(inputs_2[2])
    for i in inputs_2:
        if i == 'DEPOSIT':
            cli['%s'%name] += sums
            print(cli)

Texts = Text(win, width='50', height='9', wrap='word', font='arial 20')
Texts.place(x='14', y='450')

scr = Scrollbar(command=Texts.yview)
scr.pack(side=RIGHT, fill = Y)
Texts.config(yscrollcommand=scr.set)

Zapusk = Button(win, width='15', height='5', text='Запуск', font='arial 10', command=start)
Zapusk.place( y='350',x='607')

Clear = Button(win, width='15', height='5', text='Очистить', font='arial 10', command=clears)
Clear.place(y='350', x='15')

line = Canvas(bg='green', width='750', height='3')
line.place(y='350', x=0)

win.mainloop()
</code>
Выполняется только 1 команда. Другие не читаются. Не получается прочитать и выполнить всё построчно из виджета Text. Пробовал ставить цикл и очищать 1 значения в списке, эфекта не было.
Заранее спасибо.

Текст, полученный из
Text, нужно разбить на отдельные строки, потом циклом по этим строкам пройти, каждую строку разбивая по пробелам.
Пример:

def start():
    inputs_1 = Texts.get('1.0', END)
    lines = inputs_1.splitlines()  # Разбиваем весь текст на отдельные строки

    # Циклом идем по строкам, каждую строку обрабатываем отдельно
    for line in lines:
        if line:  # Если не пустая строка
            line = line.split()
            command = line[0]

            if command == 'DEPOSIT':
                if len(line) < 3:
                    print("Для команды DEPOSIT не указано имя или сумма")
                    break  # Останавливаем цикл

                name = line[1]
                sum_ = line[2]
                cli[name] += sum_
                print(cli)
            elif command == 'BALANCE':
                print(cli)

            ...


Генератор строки
Генератором строки назовём наименьший префикс, который нужно повторить (возможно, нецелое число раз) чтобы получить эту строку. Например, генератор строки "ababab" - это строка "ab", генератор строки "abcabca" - это строка "abc", генератором строки "abcd" является она сама.
По данной строке найдите её генератор.
Входные данные
Непустая строка, состоящая из строчных букв английского алфавита. Длина строки не превышает одного миллиона символов.
Выходные данные
Гениратор строки
Тест:
ababab
Ответ: ab
Тест:
abcabca
Ответ: abc
Тест:
abcd
Ответ: abcd
<code>
string = input()
gen_str = "" + string[0]
s = set(string[0], )
fiend_gen = False

for i in range(1,len(string)):
    if string[i] == string[0]:
        fiend_gen = True
        for j in range(i + 1, len(string)):
            if string[j] == string[0]:
                break
            elif not string[j] in s:
                gen_str += string[j]
                s.add(string[j])
if fiend_gen:
    print(gen_str)
else:
    print(string)
</code>

Первый алгоритм более оптимизированный, в зависимости от конкретного содержимого тестов вполне может задачу с миллионом символов решить:
Попробовать код онлайн!

def solve(s):
    allc, curc = set(iter(s)), set()
    for l, c in zip(range(1, len(s) + 1), s):
        curc.add(c)
        if len(curc) < len(allc):
            continue
        for j in range(l):
            good = True
            for k in range(l + j, len(s), l):
                if s[j] != s[k]:
                    good = False
                    break
            if not good:
                break
        else:
            return s[:l]

for e in ['ababab', 'abcabca', 'abcd']:
    print('in:', e, 'out:', solve(e))

Вывод:

in: ababab out: ab
in: abcabca out: abc
in: abcd out: abcd

Второй алгоритм очень простой, но медленный для миллиона символов:
Попробовать код онлайн!

def solve(s):
    for i in range(1, len(s) + 1):
        if (s[:i] * ((len(s) + i - 1) // i))[:len(s)] == s:
            return s[:i]

for e in ['ababab', 'abcabca', 'abcd']:
    print('in:', e, 'out:', solve(e))

Вывод:

in: ababab out: ab
in: abcabca out: abc
in: abcd out: abcd

Тот же код что выше но в немного развёрнутом (упрощённом?) виде:
Попробовать код онлайн!

def solve(s):
    for i in range(1, len(s) + 1):
        r, t = s[:i], ''
        while len(t) < len(s):
            t += r
        if t[:len(s)] == s:
            return r

for e in ['ababab', 'abcabca', 'abcd']:
    print('in:', e, 'out:', solve(e))

Вывод:

in: ababab out: ab
in: abcabca out: abc
in: abcd out: abcd

Решил реализовать самый быстрый алгоритм, который я пока придумал, на основе префикс-функции. Там есть не оптимальная точка, но она гораздо реже случается, поэтому в среднем алгоритм будет гораздо быстрее чем
O(N^2) сложность. Также под вопросом насколько верный алгоритм, надо проверять на тестах. Если не пройдёт время, то есть ещё место куда оптимизировать.
Попробовать код олайн!

def prefix_func(s):
    n = len(s)
    pi = [0] * n
    for i in range(1, n):
        j = pi[i - 1]
        while j > 0 and s[i] != s[j]:
            j = pi[j - 1]
        if s[i] == s[j]:
            j += 1
        pi[i] = j
    return pi

def solve(s):
    n = len(s)
    if n == 0:
        return ''
    pi, minpl = prefix_func(s), n
    for i in range(n - 1, 0, -1):
        e = pi[i]
        pl = i + 1 - e
        sl = n - 1 - i
        if e == 0 or 2 * e < i + 1 or e % pl != 0 or sl >= pl:
            continue
        if sl == 0:
            return s[:pl]
        if all(s[j] == s[n - sl + j] for j in reversed(range(sl))):
            minpl = min(minpl, pl)
    if minpl == n and pi[-1] <= n - pi[-1]:
        return s[:n - pi[-1]]
    return s[:minpl]

for e in ['ababab', 'abcabca', 'abcd', 'anna']:
    print('in:', e, 'out:', solve(e))

Вывод:

in: ababab out: ab
in: abcabca out: abc
in: abcd out: abcd


Как мне из list получить list в формате JSON?
Мой код:

import json

pop = ['1', '2', '3']
tit = json.dumps(pop)
print(tit)

На выходе я получаю:

["\u0413\u043e\u0434", "\u0420\u043e\u0441\u0441\u0438\u044f", "\u0421\u0428\u0410"]

А мне нужно получить в JSON:

['Год', 'Россия', 'США']

Воспользуйтесь параметром json.dumps(..., ensure_ascii=False):

tit = json.dumps(pop, ensure_ascii=False)

Пример:

In [26]: l = ['Год', 'Россия', 'США']

In [27]: json.dumps(l)
Out[27]: '["\\u0413\\u043e\\u0434", "\\u0420\\u043e\\u0441\\u0441\\u0438\\u044f", "\\u0421\\u0428\\u0410"]'

In [28]: json.dumps(l, ensure_ascii=False)
Out[28]: '["Год", "Россия", "США"]'


pygame муравей Ленгтона не работает на классах [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

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

Закрыт 2 года назад.

                        Улучшить вопрос

господа. Я решил сделать классического муравья Ленгтона, используя
pygame и классы для другой задумки. Смысл в том, что перенеся основной код в структуру классов, муравей перестал визуализироваться, однако если я вывожу в консоль координаты, то консоль показывает, что муравей ходит.
Представляю две версии кода, одна - неработаующая на классах, вторая работающая, но без классов
Программа на классах:

import pygame

width, height = 800, 600
display = pygame.display.set_mode((width,height))
pygame.init()
qg = 2
x, y = 300, 300
display.fill((255,255,255))
directions = ((0, -1), (-1, 0), (0, 1), (1, 0))
direction = 0
a = 0

class ant():
    qg = 2
    directions = ((0, -1), (-1, 0), (0, 1), (1, 0))
    dx = 0
    dy = 0

    def __init__(self, x, y, direction, a):
        self.x = x
        self.y = y
        self.direction = direction
        self.a = 0

    def turn(self):
        '''print(ant.qg, ant.dx, ant.dy, ant.a, self.x, self.y, self.direction)'''
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        # update position
        ant.dx, ant.dy = ant.directions[self.direction]
        self.x += ant.dx * ant.qg
        self.y += ant.dy * ant.qg
        '''
        try:
            a = display.get_at((x, y))
        except:
            break
        '''
        if self.a == (255, 255, 255, 255):
            # White square
            pygame.draw.rect(display,(255,0,0),(self.x,self.y,ant.qg,ant.qg))     # paint red
            self.direction = (self.direction + 1) % 4                               # turn left
        else:
            # Red square
            pygame.draw.rect(display,(255,255,255),(self.x,self.y,ant.qg,ant.qg)) # paint white
            self.direction = (self.direction + 3) % 4                               # turn right
        pygame.display.update()

kolya = ant(x, y, direction, a)
while True:
    kolya.turn()

Программа без классов:

import pygame
width, height = 800, 600
display = pygame.display.set_mode((width,height))
pygame.init()
qg = 2
x, y = 300, 300
display.fill((255,255,255))
directions = ((0, -1), (-1, 0), (0, 1), (1, 0))
direction = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    # update position
    dx, dy = directions[direction]
    x += dx * qg
    y += dy * qg

    try:
        a = display.get_at((x, y))
    except:
        break

    if a == (255, 255, 255, 255):
        # White square
        pygame.draw.rect(display,(255,0,0),(x,y,qg,qg)) # paint red
        direction = (direction + 1) % 4                 # turn left
    else:
        # Red square
        pygame.draw.rect(display,(255,255,255),(x,y,qg,qg)) # paint white
        direction = (direction + 3) % 4                     # turn right
    pygame.display.update()

print ("end")

Дело было в закоментированной мной строке
self.a = display.get_at((self.x, self.y)) - это строка считывает пиксель


Как удалить ключ из словаря python зная индекс?
Есть словарь:

ad_vocabulary = {'Сдам 1-к квартиру': {'Цена': '4000 грн.', 'Местоположение': 'Питер'}}

Знаю, то что ключ
'Сдам 1-к квартиру' имеет 0 индекс.
Как я могу его теперь удалить без указания самого ключа?

Начиная с Python 3.7 порядок ключей словаря сохраняется в порядке вставки/добавления, следовательно можно говорить об индексе ключа. Хотя напрямую Python не поддерживает индексирование ключей словаря по порядковому номеру. Но создав список ключей можно имитировать "удаление по индексу".
Пример:
<code>
In [16]: dct = {2: 22, 1: 11}

In [17]: _ = dct.pop(list(dct)[0])

In [18]: dct
Out[18]: {1: 11}
</code>


Как конвентировать колонку с датой в символьном виде в datetime формат?
Есть данные, с датой в символьном виде:
<code>
0       12/апр/21 3:45 PM
1      12/апр/21 12:41 PM
2       12/апр/21 2:27 PM
3      09/апр/21 11:09 AM
4      09/апр/21 10:47 AM
              ...
733     22/мая/18 7:49 PM
734     20/июн/18 1:03 PM
735     25/июн/18 3:07 PM
736     29/мар/18 7:37 PM
737     27/мар/18 3:48 PM
</code>
Как их можно нормально переделать в pandas.datetime формат?


Ошибка 500 Internal error при использовании шаблонов во Flask
При использовании шаблонов в HTML-файле и
render_template() в файле с Flask'ом, на странице в браузере появляется ошибка "500 Internal error". При запуске HTML-файла отдельно все нормально работает. Также, в консоли выводится ошибка
jinja2.exceptions.TemplateNotFound: test.html Как это можно исправить?
Flask:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    return render_template('index.html', title='Солнечная система', text='Планета', text1='Звезда')

if __name__ == '__main__':
    app.run(port=8080, host='127.0.0.1')

HTML:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style.css" />
    <title>{{ title }}</title>
  </head>
  <body>
    <img src="9-32.jpg" alt="здесь должна была быть картинка, но не нашлась">
    <h1>{{ text }}</h1>
    <h2>{{ text1 }}</h2>
  </body>
</html>

TemplateNotFound - не находит ваш template.
Он должен лежать в директории, которая задает при создании приложения.

app = Flask(app_name, template_folder='path/to/template/folder')

по умолчанию -
template_folder="templates", что бы index.html был виден фласку, он должен лежать там.


Как посчитать количество элементов в каждой строке?
Надо создать новую колонку, в которую поместить сумму элементов "Да" из предыдущих колонок:

import pandas as pd
df = pd.DataFrame({'A': {0: 'Да', 1: 'Да', 2: 'Да'},
                    'B': {0: 'Да', 1: 'Нет', 2: 'Да'},
                    'C': {0: 'Нет', 1: 'Да', 2: 'Нет'},
                    'D': {0: 'Да', 1: 'Да', 2: 'Нет'}})

    A   B   C   D
0   Да  Да  Нет Да
1   Да  Нет Да  Да
2   Да  Да  Нет Нет

Посчитать элементы в одной строке получается:

x = (df.loc[1, 'A': 'D'] == 'Да').sum()
print(x)
3

А вот пройтись циклом не получается:

df.loc[:, 'E'] = [(df.loc[i, 'B':'D'] == 'Да').sum() for i in range(len(df) + 1)]

Выдаёт ошибку:

KeyError: 3

Такие задачи решаются в Pandas без циклов:

df["res"] = df.loc[:, :"D"].eq("Да").sum(axis=1)

результат:

In [272]: df
Out[272]:
    A    B    C    D  res
0  Да   Да  Нет   Да    3
1  Да  Нет   Да   Да    3
2  Да   Да  Нет  Нет    2


работа с Q в django и объединение QuerySet
Есть две модели
Orders и
Clients, при создании генерируется одинаковый
related_uuid у каждой. То есть они так связаны. При поиске на сайте надо найти все вхождения в обоих моделях и вывести все
Orders включая те, где
related_uuid встречается в модели
Clients.
models.py

class Orders(models.Model):

    device = models.CharField(max_length=150)
    related_uuid = models.CharField(max_length=22, blank=True)

    def __str__(self):
        return self.device

class Clients(models.Model):

    name = models.CharField(max_length=150)
    related_uuid = models.CharField(max_length=22, blank=True)

    def __str__(self):
        return self.name

views.py

def getQuery(self):
    search_query = self.request.GET.get('filter')
    results_query1 = Orders.objects.filter(Q(device__icontains=search_query))
    results_query2 = Clients.objects.filter(Q(name__icontains=search_query))
    conds = Q(related_uuid__icontains=results_query1) | Q(related_uuid__icontains=related_query2)
    search_filter_three = Orders.objects.filter(conds)
    return search_filter_three

то есть я ищу вхождения в обоих моделях
потом пытаюсь отобрать все входження в модели
Orders по полю
related_uuid с обоих моделей

выводит ошибку
django.db.utils.OperationalError: (1241, 'Operand should contain 1 column(s)')

<code>

    results_query1 = Orders.objects.filter(device__icontains=search_query).values_list('related_uuid')
    results_query2 = Clients.objects.filter(name__icontains=search_query).values_list('related_uuid')
    conds = Q(related_uuid__in=results_query1) | Q(related_uuid__in=related_query2)

</code>
Думаю это то, что вам надо


Как забанить участников у которых нет определённой роли discord.py?
Мне нужно забанить всех участников у которых нет определённой роли, но я не понимаю, как это сделать.

По умолчанию каждый участник сервера имеет стандартную роль @everyone, которую нельзя выдать или снять. Она распространяется на всех участников.
Для получения объекта роли используем метод
utlis.get() из библиотеки
discord

from discord import utils

Для получения роли, в
utils.get() первым аргументом передается список всех ролей сервера, а вторым указывается
id или
name нужной нам роли. Мы будем искать роль @everyone для конкретного сервера именно по названию, так как не знаем конкретного id

guild = None # здесь должен быть объект сервера
             # его можем получить любым доступным способом, например:
             # guild = bot.get_guild(id)
             # или просто получить из контекста команды: guild = ctx.guild
default_role = utlis.get(guild.roles, name = '@everyone')

Затем, в цикле перебираем всех участников сервера и проверяем, чтобы в наличии была только эта роль

for member in guild.members:
    if (len(member.roles) == 1) and (member.roles[0] == default_role):
            print(member.name) # здесь нужно банить участника, вместо этого просто выводится имя

Полный код:

import discord
from discord.ext import commands
from discord import utils

bot = commands.Bot(command_prefix='!', intents = discord.Intents.all())

@bot.command()
async def test(ctx):
    default_role = utils.get(ctx.guild.roles, name = '@everyone')
    for member in ctx.guild.members:
        if (len(member.roles) == 1) and (member.roles[0] == default_role):
            print(member.name)

bot.run(TOKEN)


В некоторых окнах не работает ввод текста с помощью python
Мне нужно ввести переменную в окно windows когда я попробовал ввести текст в notepad либо же cmd то все работало но когда я решил ввести текст в окно Steam то у меня ничего не получилось, хотя если просто набрать текст на клавиатуре то все отлично вводется
Использовал модули keyboard,pyautogui,pywinauto
ни с каким из выше приведенных модулей ввод текста не работал
как решить эту проблему

code = 'some_text
keyboard -
 keyboard.write(code, delay=0.05)
pywinauto -
send_keys(code)
pyautogui -
pyautogui.write(code)

Всё дело в фокусе ввода. Но можно и без него. Вот накидал за 20 минут для интерфейса на английском:

from pywinauto.application import Application

app = Application(backend="uia").start(cmd_line=ur'"C:\Program Files (x86)\Steam\Steam.exe" ')
steam = app.window(title='Steam')
steam.wait('ready', timeout=20)
steam.type_keys('{ENTER}')

create_account = app.window(title='Create Your Account')
create_account.wait('ready', timeout=15)
create_account.child_window(title="Email Address", control_type="Edit").set_text("[email protected]")

Метод
.type_keys() - он на крайний случай, и чаще всего не для edit box'ов. Он ставит фокус ввода и вызывает
pywinauto.keyboard.send_keys(). Вот документация по
keyboard.send_keys(), всё то же самое можно через
.type_keys() делать, только для ввода пробелов надо
with_spaces=True передать.
P.S. Конечно, в этом примере не обрабатывается окно обновления или ошибка загрузки окна из сети (там явно веб содержимое). Но каков вопрос, таков и ответ. Дальше можно и самому поизучать. Рекомендую начать с Getting Started Guide, потом Waiting for Long Operations.


Не получается передать данные из таблицы QTableWidget в словарь
У меня есть таблица, в которой хранятся какие-то данные. Эти данные мне надо передать в словарь, чтобы сохранить его в файле формата
json.
Я использую строку
self.ui.tableWidget.item(row, column).text(),
чтобы достать данные из таблицы, но у меня появляется ошибка:

'NoneType' object has no attribute 'text'.

Вот весь код

def save(self):
        row_dict = {}
        row_list = []
        for column in range(self.ui.tableWidget.columnCount()):
            for row in range(self.ui.tableWidget.rowCount()):
                value = self.ui.tableWidget.item(row, column).text()
                row_list.append(str(value))
            row_dict[column] = row_list
            row_list = []

Буду благодарен за помощь.

... чтобы не было ошибок, попробуйте так:
<code>
def save(self):
    row_dict = {}
    row_list = []
    for column in range(self.ui.tableWidget.columnCount()):
        for row in range(self.ui.tableWidget.rowCount()):

#            value = self.ui.tableWidget.item(row, column).text()
            value = self.ui.tableWidget.item(row, column)
            if value is not None:
                row_list.append(value.text())
            else:
                row_list.append('')

        row_dict[column] = row_list
        row_list = []
</code>


Как сделать последовательный ввод значений пользователем в боте?
Есть бот ВК, пользователь должен написать 3 значения в отдельных сообщениях подряд, чтобы потом произвести с ними определенное действие. Как лучше всего решить данную задачу? Пробовал создавать объект для пользователя и в него закидывать значения, но после, например, сбоя программы по какому-либо поводу у меня демон поднимет бота, но объекта уже не будет. Есть идея при каждом вводе значения делать сохранение обновленного объекта в файл, но мне кажется есть лучше варианты.

Легче всего, по моему мнению, заносить ID пользователя и текущее значение в Redis.
В таком случае вылет бота никак не помешает продолжить диалог