Сложение чисел в словаре в python [закрыт]

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

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

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

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

<code>
c = {}
a = {'a': 1}
b = {'b': 2}
</code>
Хочу сложить 2 числа из ключей a и b, чтоб получился результат c = {'c': 3}
Подскажите как реализовать

Вот так можно сделать

dt = {'a': 1,'b': 2}
dt['c']=dt['a']+dt['b']

Результат

{'a': 1,'b': 2,'c':3}


Как сделать, чтобы в коде в функции print параметр end был всегда равен пустой строке
Как сделать, чтобы в коде в функции
print параметр
end был всегда равен пустой строке (
'')?

Можно заменить настоящий
print своим, вот так:

old_print = print

def new_print(*args, **kwargs):
    kwargs['end'] = ''
    old_print(*args, **kwargs)

print = new_print

print('abc')
print('123')
print('!')
# abc123!

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

sep=' '

end='\n'

file=None

Пример:

print('abc')
print('123')
print('!')
print(*'abc', sep='|')
# abc123!a|b|c


В чем заключается ошибка в моем рeшeнии?
Ввoд: двa цeлыx чиcлa 0 ≤ m ≤ n ≤ 1000; 20 цeлыx чиcел из отрезкa [0; 1000]
Вывoд: кoличество чисел, имеющих значение не меньше m, нo не бoльшe n.
<code>
import sys

array = [int(i) for i in sys.argv[3:]]

if (0 <= m and m <= n and n <= 1000):
    m = int(sys.argv[1])
    n = int(sys.argv[2])

    a = 0

    for x in range(0, 20):
        if m <= int(array[x]) and int(array[x]) <= n:
            a += 1

    result = a
    print(result)
</code>
Пpимер
Ввод:
0 10 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9
Вывод:
20
Где
0 - минимaльный рaзмер числа
10 - мaксимaльный рaзмер  числа
0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 - сами числа

Добавил ограничение на считывание 22 элементов: m + n + <20 чисел>:

import sys

items = [int(x) for x in sys.argv[1:22+1]]

num = 0
m, n = items[:2]

for x in items[2:]:
    if m <= x <= n:
        num += 1

print(num)

Можно немного схитрить и сократить количество строк, сохранив читаемость:

import sys

items = [int(x) for x in sys.argv[1:22+1]]
m, n = items[:2]
num = sum(1 for x in items[2:] if m <= x <= n)
print(num)

Запуск в консоли:

python main.py 0 10 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9
20

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

      m  n [             чисел в 21 штук            ]
Ввод: 0 10 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9


Как запомнить значение в переменную при вызове subprocess
Есть код

topic = "asde"
commandlisten = ("echo", ""+topic+"")
try:
    commandOutput = subprocess.run(commandlisten, timeout=1)
    print (commandOutput)
except subprocess.TimeoutExpired:
    print ('asd')

при его выполнении выводит

asde
CompletedProcess(args=('echo', 'asde'), returncode=0)

как сохранить вывод командной строки в переменную то есть переменная commandOutput была равна asde

Надо использовать subprocess.Popen и subprocess.Popen.communicate.

import subprocess

args = ["echo", "asde"]
process = subprocess.Popen(args, stdout=subprocess.PIPE)
data = process.communicate(timeout=1)
print(data[0].decode('utf-8'))

Метод communicate позволит нам связываться с созданным нами процессом. Говорят, можно даже передать процессу ввод.
После того, как процесс завершится, в
data будет кортеж, состоящий из двух элементов - содержимое stdout и stderr, бинарной строкой.


Не работает код pyqt5 как надо
У меня есть код. В котором я хочу сделать функцию. При нажатии кнопки
open1 добавляется в
gridlayout виджет и фон заблюривается.
Так же и со второй кнопкой, только открывается уже другой виджет. Я хочу сделать так, что при нажатии
open1 открывался виджет, в котором я смогу нажать
ESC и он закроется и блур пропадет. Так же и со вторым окном.
Но почему-то у меня в коде блур пропадает, но виджет из
gridlayout не закрывается. Как это можно исправить?

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Ui_MainWindow3(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(463, 140)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(80, 50, 301, 71))
        self.label_3.setStyleSheet("background-color: rgb(255, 0, 4);")
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 150, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_3.setText(_translate("MainWindow", "Red label"))
        self.pushButton.setText(_translate("MainWindow", "Close"))

class ExampleApp3(QtWidgets.QMainWindow, Ui_MainWindow3):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton.clicked.connect(self.r)

    def r(self):
        self.close()

class Ui_MainWindow2(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(463, 140)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(80, 20, 301, 71))
        self.label_2.setStyleSheet("background-color: rgb(57, 110, 255);")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(200, 100, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_2.setText(_translate("MainWindow", "Blue label"))
        self.pushButton_2.setText(_translate("MainWindow", "Close"))

class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow2):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton_2.clicked.connect(self.d)

    def d(self):
        self.close()

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(463, 290)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(130, 140, 211, 51))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(90, 20, 301, 71))
        self.label.setStyleSheet("background-color: rgb(128, 255, 10);")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 200, 211, 51))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Open1"))
        self.label.setText(_translate("MainWindow", "Green label"))
        self.pushButton_2.setText(_translate("MainWindow", "Open2"))

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton.clicked.connect(self.un)
        self.pushButton_2.clicked.connect(self.un2)

    def un(self):

        self.exampleApp = ExampleApp2()
        self.exampleApp.pushButton_2.clicked.connect(self.clickedApp2)
        countLayout = self.gridLayout.count()
        for it in range(countLayout):
            w = self.gridLayout.itemAt(0).widget()
            self.gridLayout.removeWidget(w)
            w.hide()

        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.addWidget(self.exampleApp, 0, 0, 2, 1)

        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(3)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(3)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(3)
        self.pushButton_2.setGraphicsEffect(self.effect3)

        self.pushButton.setEnabled(False)
        self.pushButton_2.setEnabled(False)

        self.effectFlag = True
        self.update()

    def un2(self):

        self.exampleApp_3 = ExampleApp3()
        self.exampleApp_3.pushButton.clicked.connect(self.clickedApp3)
        countLayout = self.gridLayout.count()
        for it in range(countLayout):
            w = self.gridLayout.itemAt(0).widget()
            self.gridLayout.removeWidget(w)
            w.hide()

        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.addWidget(self.exampleApp_3, 0, 0, 2, 1)

        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(3)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(3)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(3)
        self.pushButton_2.setGraphicsEffect(self.effect3)

        self.pushButton.setEnabled(False)
        self.pushButton_2.setEnabled(False)

        self.effectFlag = True
        self.update()

    def clickedApp2(self):
        self.exampleApp.close()
        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(0)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(0)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(0)
        self.pushButton_2.setGraphicsEffect(self.effect3)

        self.pushButton.setEnabled(True)
        self.pushButton_2.setEnabled(True)

        self.effectFlag = False
        self.update()

    def clickedApp3(self):
        self.exampleApp_3.close()
        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(0)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(0)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(0)
        self.pushButton_2.setGraphicsEffect(self.effect3)

        self.pushButton.setEnabled(True)
        self.pushButton_2.setEnabled(True)

        self.effectFlag = False
        self.update()

    def keyPressEvent(self, e):
        if e.key()  == Qt.Key_Escape :
            self.exampleApp = ExampleApp3()
            self.exampleApp.close()
            self.effect = QtWidgets.QGraphicsBlurEffect()
            self.effect.setBlurRadius(0)
            self.pushButton.setGraphicsEffect(self.effect)
            self.effect2 = QtWidgets.QGraphicsBlurEffect()
            self.effect2.setBlurRadius(0)
            self.label.setGraphicsEffect(self.effect2)
            self.effect3 = QtWidgets.QGraphicsBlurEffect()
            self.effect3.setBlurRadius(0)
            self.pushButton_2.setGraphicsEffect(self.effect3)

            self.pushButton.setEnabled(True)
            self.pushButton_2.setEnabled(True)

            self.effectFlag = False
            self.update()

    def keyPressEvent2(self, e):
        if e.key()  == Qt.Key_Escape :
            self.exampleApp_3 = ExampleApp3()
            self.exampleApp_3.close()
            self.effect = QtWidgets.QGraphicsBlurEffect()
            self.effect.setBlurRadius(0)
            self.pushButton.setGraphicsEffect(self.effect)
            self.effect2 = QtWidgets.QGraphicsBlurEffect()
            self.effect2.setBlurRadius(0)
            self.label.setGraphicsEffect(self.effect2)
            self.effect3 = QtWidgets.QGraphicsBlurEffect()
            self.effect3.setBlurRadius(0)
            self.pushButton_2.setGraphicsEffect(self.effect3)

            self.pushButton.setEnabled(True)
            self.pushButton_2.setEnabled(True)

            self.effectFlag = False
            self.update()

if __name__=="__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())

я не совсем понимаю, что у вас происходит. Поэтому не вникая в логику, я сделал некоторые исправления и отметил их. Проверьте - это то что вы хотели?
<code>
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Ui_MainWindow3(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(463, 140)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(80, 50, 301, 71))
        self.label_3.setStyleSheet("background-color: rgb(255, 0, 4);")
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 150, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_3.setText(_translate("MainWindow", "Red label"))
        self.pushButton.setText(_translate("MainWindow", "Close"))

class ExampleApp3(QtWidgets.QMainWindow, Ui_MainWindow3):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

#?        self.pushButton.clicked.connect(self.r)
#?    def r(self):
#?        self.close()

class Ui_MainWindow2(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(463, 140)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(80, 20, 301, 71))
        self.label_2.setStyleSheet("background-color: rgb(57, 110, 255);")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(200, 100, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_2.setText(_translate("MainWindow", "Blue label"))
        self.pushButton_2.setText(_translate("MainWindow", "Close"))

class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow2):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

#?        self.pushButton_2.clicked.connect(self.d)
#?    def d(self):
#?        print("ExampleApp2 def d(self):")
#?        self.close()

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(463, 290)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(130, 140, 211, 51))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(90, 20, 301, 71))
        self.label.setStyleSheet("background-color: rgb(128, 255, 10);")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 200, 211, 51))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Open1"))
        self.label.setText(_translate("MainWindow", "Green label"))
        self.pushButton_2.setText(_translate("MainWindow", "Open2"))

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton.clicked.connect(self.un)
        self.pushButton_2.clicked.connect(self.un2)

        self.exampleApp_2, self.exampleApp_3 = None, None                 # +++

    def un(self):
# ?        self.exampleApp = ExampleApp2()
        self.exampleApp_2 = ExampleApp2()                                 # exampleApp_2
        self.exampleApp_2.pushButton_2.clicked.connect(self.clickedApp2)
        countLayout = self.gridLayout.count()
        for it in range(countLayout):
            w = self.gridLayout.itemAt(0).widget()
            self.gridLayout.removeWidget(w)
            w.hide()
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.addWidget(self.exampleApp_2, 0, 0, 2, 1)
        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(3)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(3)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(3)
        self.pushButton_2.setGraphicsEffect(self.effect3)
        self.pushButton.setEnabled(False)
        self.pushButton_2.setEnabled(False)
        self.effectFlag = True
        self.update()

    def un2(self):
        self.exampleApp_3 = ExampleApp3()
        self.exampleApp_3.pushButton.clicked.connect(self.clickedApp3)
        countLayout = self.gridLayout.count()
        for it in range(countLayout):
            w = self.gridLayout.itemAt(0).widget()
            self.gridLayout.removeWidget(w)
            w.hide()
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.addWidget(self.exampleApp_3, 0, 0, 2, 1)
        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(3)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(3)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(3)
        self.pushButton_2.setGraphicsEffect(self.effect3)
        self.pushButton.setEnabled(False)
        self.pushButton_2.setEnabled(False)
        self.effectFlag = True
        self.update()

    def clickedApp2(self):
        self.exampleApp_2.close()
        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(0)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(0)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(0)
        self.pushButton_2.setGraphicsEffect(self.effect3)
        self.pushButton.setEnabled(True)
        self.pushButton_2.setEnabled(True)
        self.effectFlag = False
        self.update()

    def clickedApp3(self):
        self.exampleApp_3.close()
        self.effect = QtWidgets.QGraphicsBlurEffect()
        self.effect.setBlurRadius(0)
        self.pushButton.setGraphicsEffect(self.effect)
        self.effect2 = QtWidgets.QGraphicsBlurEffect()
        self.effect2.setBlurRadius(0)
        self.label.setGraphicsEffect(self.effect2)
        self.effect3 = QtWidgets.QGraphicsBlurEffect()
        self.effect3.setBlurRadius(0)
        self.pushButton_2.setGraphicsEffect(self.effect3)
        self.pushButton.setEnabled(True)
        self.pushButton_2.setEnabled(True)
        self.effectFlag = False
        self.update()

    def keyPressEvent(self, e):
        if e.key()  == Qt.Key_Escape :

            if self.exampleApp_2: self.clickedApp2()                      # +++
            if self.exampleApp_3: self.clickedApp3()                      # +++

            '''
            self.exampleApp = ExampleApp3()
            self.exampleApp.close()
            self.effect = QtWidgets.QGraphicsBlurEffect()
            self.effect.setBlurRadius(0)
            self.pushButton.setGraphicsEffect(self.effect)
            self.effect2 = QtWidgets.QGraphicsBlurEffect()
            self.effect2.setBlurRadius(0)
            self.label.setGraphicsEffect(self.effect2)
            self.effect3 = QtWidgets.QGraphicsBlurEffect()
            self.effect3.setBlurRadius(0)
            self.pushButton_2.setGraphicsEffect(self.effect3)

            self.pushButton.setEnabled(True)
            self.pushButton_2.setEnabled(True)

            self.effectFlag = False
            self.update()
            '''

if __name__=="__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())
</code>


Не могу установить модуль "pyttsx3"
Все перепробовал, но не хочет находить библиотеку.
Уже и сносил pywin32, pypiwin32, pyttsx3 и менял но все равно пишет:
<code>
>>> import pyttsx3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pyttsx3'
</code>

Возможно у тебя просто не установлены pywin32 и pypiwin32
попробуй эту команду

pip install pywin32 pypiwin32 pyttsx3
ну после твоего комента могу предложить снова удалить их всех, потом переустановить, а потом на всякий случай, если ранее написанное не сработает установить библиотеку
speech

pip install speech


Подскажите идею ,как реализовать? [закрыт]

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

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

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

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

Даны целые p и q .Вивести на экран все делители числа q , взаимно простые с p.

Алгоритм таков:

Ищем все делители p
Ищем все делители q
Выбираем делитель числа p
Ищем его делители
Если хоть один делитель (кроме 1) совпадает, то вычеркиваем делитель
Повторяем пункты 3-5 пока не все делители числа p исследованы


Асинхронное выполнение функции с помощью asyncio

def parse_and_send_message(message):
    pass

x = threading.Thread(target=parse_and_send_message, args=("HELLO!"))
x.start()

Как перевести данный код с использованием asyncio ?
Сама функция
parse_and_send_message ничего не должна возвращать, внутри обработчик, который нужно выполнить в отдельном потоке, тк процесс занимает несколько секунд.

import threading, asyncio, random, time

def print2(message, n, sleep=False):
    if sleep: time.sleep(random.randint(50, 90) / 100)
    print(f'{n} {message} {threading.current_thread()}')

async def msg(message, n):
    for nn in range(n):
        await asyncio.sleep(random.randint(1, 30)/100)
        print2(message, nn, sleep=False)

async def main(n):
    await asyncio.gather(msg("HELLO-A", n), msg("HELLO-B", n),)

if __name__ == '__main__':
    for nn in range(10):
        threading.Thread(target=print2, args=["HELLO-T", nn], kwargs=dict(sleep=True)).start()
    asyncio.run(main(10))

out:

0 HELLO-A <_MainThread(MainThread, started 12400)>
1 HELLO-A <_MainThread(MainThread, started 12400)>
2 HELLO-A <_MainThread(MainThread, started 12400)>
0 HELLO-B <_MainThread(MainThread, started 12400)>
8 HELLO-T <Thread(Thread-9, started 5260)>
3 HELLO-A <_MainThread(MainThread, started 12400)>
0 HELLO-T <Thread(Thread-1, started 16608)>
3 HELLO-T <Thread(Thread-4, started 14520)>
5 HELLO-T <Thread(Thread-6, started 4452)>
2 HELLO-T <Thread(Thread-3, started 14544)>
9 HELLO-T <Thread(Thread-10, started 10820)>
1 HELLO-B <_MainThread(MainThread, started 12400)>
...


Как получить случайное число из диапазона?
суть программы в том,что пользователь вводит два числа,которые являются диапазоном.Из этого диапазона пользователь получает случайное значение. То же самое и с именем.Есть файл в 2000 строк(в каждой строке имя).Как сделать вывод рандомного имени?Всё ли у меня правильно?

print("твое случайное число : ")
print(random.randint(mini , maxi))

print("твое случайное имя : ")

with open("input.txt") as inp:
    lines = inp.readlines()

random_line = random.choice(lines).strip()

выдаёт ошибку в строке
print(random.randint(mini , maxi))
ошибка выглядит так

> Traceback (most recent call last):   File "nn.py", line 29, in
> <module>
>     lines = inp.readlines()   File "C:\Users\pavlv\AppData\Local\Programs\Python\Python38-32\lib\encodings\cp1252.py",
> line 23, in decode
>     return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position
> 13: character maps to <undefined>

При открытии файла, если не указывать кодировку, будет использоваться системная, а у вас это
windows-1252, а в файле используется другая кодировка.
Попробуйте явно указывать
utf-8:

...
with open("input.txt", encoding="utf-8") as inp:
    lines = inp.readlines()
...


Код не хочет работать как надо PyQt5
Я написал код, в котором есть checkbox и pushbutton. Я попробовал сделать так, что при нажатии на checkbox окно получало флаг "QtCore.Qt.WindowStaysOnTopHint". Но после того как я уберу галочку оно уже не должно быть поверх всех окон.
<code>

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(649, 237)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(570, 0, 81, 23))
        self.pushButton.setObjectName("pushButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(180, 90, 371, 41))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.checkBox.setFont(font)
        self.checkBox.setObjectName("checkBox")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "CLOSE"))
        self.checkBox.setText(_translate("MainWindow", "On the top of all windows"))

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.checkBox.stateChanged.connect(self.ontop)
        self.pushButton.clicked.connect(self.myClose)

    def ontop(self):
        if self.checkBox.isChecked():
            self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
            self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
            self.close()
            self.show()
        else:
            self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint)
            self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
            self.close()
            self.show()

    def myClose(self):
        self.close()

if __name__=="__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())
</code>

Предлагаю переписать код через setWindowFlag.
Его второй параметр позволит включать или отключать флаг:
void QWidget::setWindowFlag(Qt::WindowType flag, bool on = true)
Пример:

    def ontop(self):
        self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint, self.checkBox.isChecked())
        self.hide()
        self.show()

Весь код:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(649, 237)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(570, 0, 81, 23))
        self.pushButton.setObjectName("pushButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(180, 90, 371, 41))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.checkBox.setFont(font)
        self.checkBox.setObjectName("checkBox")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "CLOSE"))
        self.checkBox.setText(_translate("MainWindow", "On the top of all windows"))

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.checkBox.stateChanged.connect(self.ontop)
        self.pushButton.clicked.connect(self.myClose)

    def ontop(self):
        self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint, self.checkBox.isChecked())
        self.hide()
        self.show()

    def myClose(self):
        self.close()

if __name__=="__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())


Как совместить long polling и schedule?
Есть телеграм бот, реализованный через
pytelegrambotapi. Сделал таймер, который должен выполнять раз в n-секунд, но оно не отрабатывает почему-то.

def low_level_balance_timer():
    print('ax')
    users = getAllUsers()
    for user in users:
        pass
        #check balance
        # if balance low
        # notify
    time.sleep(60)

schedule.every(10).seconds.do(low_level_balance_timer)

def main_loop():
    bot.polling(True)
    while True:
        schedule.run_pending()
        time.sleep(1)

if __name__ == '__main__':
    main_loop()

У вас
schedule.run_pending() и
bot.polling(True) работают в одном потоке и когда вы вызываете
time.sleep(...), то текущий поток засыпает.
Поэтому, нужно разграничить их работу, создав второй поток, например так:

from threading import Thread

def low_level_balance_timer():
    print('ax')
    users = getAllUsers()
    for user in users:
        pass
        #check balance
        # if balance low
        # notify
    time.sleep(60)

def do_schedule():
    schedule.every(10).seconds.do(low_level_balance_timer)

    while True:
        schedule.run_pending()
        time.sleep(1)

def main_loop():
    thread = Thread(target=do_schedule)
    thread.start()

    bot.polling(True)

if __name__ == '__main__':
    main_loop()


Добавление python приложения в автозагрузку
у меня есть простенький код. Я хочу сделать так, чтоб при нажатии на галочку в приложении оно добавлялось в автозапуске системы. То есть когда я выключу и включу компьютер, то оно должно открыться вместе системой. Как это сделать?
я ее попробовал вставить но ничего не получилось -

import getpass

USER_NAME = getpass.getuser()

def add_to_startup(file_path=""):
    if file_path == "":
        file_path = os.path.dirname(os.path.realpath(file))
        bat_path = r'C:\Users\%s\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup' % USER_NAME

        with open(bat_path + '\\' + "open.bat", "w+") as bat_file:
            bat_file.write(r'start "" %s' % file_path)

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(294, 346)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(50, 90, 281, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.checkBox.setFont(font)
        self.checkBox.setObjectName("checkBox")
        self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
        self.horizontalScrollBar.setGeometry(QtCore.QRect(0, 330, 291, 16))
        self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalScrollBar.setObjectName("horizontalScrollBar")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(50, 160, 191, 22))
        self.comboBox.setObjectName("comboBox")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.checkBox.setText(_translate("MainWindow", "Добавить в автозагрузку"))

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())

Один из вариантов.
1)импортируйте модуль
os:
import os
2)Измените класс
ExampleApp.

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.checkBox.stateChanged.connect(self.copy_to_run)

    def copy_to_run(self):
        if self.checkBox.isChecked():
            file_path = sys.argv[0]
            file_name = file_path.split('\\')[-1]
            path = '%userprofile%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\'
            os.system(f'copy "{file_path}" "{path}{file_name}"')


Клас User отказывается выводить Name (discord.py)
<code>
    @Bot.command(pass_context= True)
    async def info(ctx):
        emb = discord.Embed()
        emb.colour= 0x39d0d6
        emb.add_field(name= "Имя", value= discord.User.name)
        await ctx.send(embed=emb)
</code>
Ошибка:

Class 'User' has no 'name' member

Вот эту запись

discord.User.name

Отсылает интерпретатор не к
name конкретного пользователя, а к статической переменной
name класса
User модуля
discord, а этой переменной там нет, и никогда не было.
В данной ситуации логично использовать конструкцию

request.User.name

(или, если я правильно понял, в вашем случае
ctx.User.name. Прошу поправить, если это не так)
О том, что такое статические переменные, можно почитать здесь. Тут это описано на примере Java, но для понимания того, что это вообще такое, этого будет достаточно.


отсортировать массив по возрастанию python [закрыт]

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

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

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

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

Есть произвольный массив чисел, необходимо отсортировать его в порядке возрастания.
Пробовал воспользоваться методом sort, но не очень продуктивно.

В Python весь стандартный функционал идёт в ногу с алгоритмами, так что должен работать быстро. Если этого мало - попробуйте
numpy.

import numpy
massive = [2,3,1,4,7,5,6,1]
ar = numpy.array(massive)
ar.sort()
print(ar)


Сравнение двух файлов конфигурации
У меня есть два файла конфигурации (дефолтная и юзер-конфигурация), которые содержат строчки
значение = параметр. Мне нужно сравнить эти два файла, чтобы в обоих файлах обязательно присутствовали и были равны строчки
значение, а параметр может быть любой.
Пока я могу сравнить только 2 файла на наличие вообще какой-то разницы, но пока к сожалению не построчно, помогите в этом разобраться:

def compareConfigs():
    file1 = open('default_config.ini', 'r')
    file2 = open('user_config.ini', 'r')
    if file1 == file2:
        print("Конфигурации равны")
    else:
        print("Конфигурации не равны.")

compareConfigs()

Как вариант:
<code>
def compareConfigs():
    file1 = open('default_config.ini', 'r')
    file2 = open('user_config.ini', 'r')
    s1=[line.split('=')[0] for line in file1]
    s2=[line.split('=')[0] for line in file2]
    file1.close()
    file2.close()
    for line1 in s1:
        if line1 not in s2:
            return False
    return True
</code>


Как получить информацию о том, какую роль в дискорде занимает человек discord.py
Как в коде python с помощью библиотеки discord.py получить сведения о том, какую роль занимает человек?

Если нужен список ролей (на сервере) участника. Представим ситуацию, что пользователю нужно по команде
myroles получить список ролей:

@bot.command(aliases=['myroles'])
async def _myroles(ctx):
      member = ctx.message.author
      member_roles = member.roles
      await ctx.send(f"{member.mention} список твоих ролей:\n{member_roles}")


IndentationError: unindent does not match any outer indentation level python во время создания голосового ассистента
Когда я начал писать код для создания своего голосового ассистента у меня возникла проблема при использовании библиотеки
Speech Recognition для Python.
Ошибка:
IndentationError: unindent does not match any outer indentation level
Вот часть кода где возникает ошибка:
r = sr.Recognizer()
Вот полный код на данный момент.

import os
import sys
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime

opts = {
    "alias": ('jarvis', 'jervis', 'jirves', 'jurves', 'jervas'
              'jalvis', 'jelvis', 'jilves', 'julves', 'jelvas'),
    "tbr": ('say', 'tell', 'show', 'how much', 'will', 'would',
            'could', 'may', 'can', 'must', 'the'),
    "cmds": {
        "ctime": ('current time', 'time', 'what time is it'),
        "radio": ('turn on the music', 'turn on the radio',
                  'play radio'),
        "jokes": ('tell a joke', 'do you know any jokes',
                    'make me laugh')
    }
}

# functions

def speak(what):
    print(what)
    speak_engine.say(what)
    speak_engine.runAndWait()
    speak_engine.stop()

#start

 r = sr.Recognizer()
 m = sr.Microphone(device_index=1)

 with m as source:
     r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()

speak("Good day my master")
speak("Jarvis is listening")

# stop_listening = r.listen_in_background(m, callback)

# while True:
#     time.sleep(0.1) # infinite loop

все библиотеки нормально установлены с помощью pip, все библиотеки протестированы

IndentationError - ошибка, возникающая при неправильных отступах в коде.
Вот исправленный код:

import os
import sys
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime

opts = {
    "alias": ('jarvis', 'jervis', 'jirves', 'jurves', 'jervas'
              'jalvis', 'jelvis', 'jilves', 'julves', 'jelvas'),
    "tbr": ('say', 'tell', 'show', 'how much', 'will', 'would',
            'could', 'may', 'can', 'must', 'the'),
    "cmds": {
        "ctime": ('current time', 'time', 'what time is it'),
        "radio": ('turn on the music', 'turn on the radio',
                  'play radio'),
        "jokes": ('tell a joke', 'do you know any jokes',
                    'make me laugh')
    }
}

# functions

def speak(what):
    print(what)
    speak_engine.say(what)
    speak_engine.runAndWait()
    speak_engine.stop()

#start
r = sr.Recognizer()
m = sr.Microphone(device_index=1)

with m as source:
     r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()

speak("Good day my master")
speak("Jarvis is listening")

#stop_listening = r.listen_in_background(m, callback)

#while True:
#   time.sleep(0.1) # infinite loop


aiohttp определенное timeout
При парсинге у меня возникла проблема, он как бы застывает на месте. Ничего не происходит, никаких логов, абсолютно ничего.
Не изменяется нагрузка CPU и потребление памяти.
Вот сейчас он застыл после обработки 8000 ссылки.
Не знаю в чем проблема.
Думаю сервер отключил подключения, и как бы запросы зависли.
Можно ли как нибудь указать время на выполнения запроса, например 30 секунд, чтобы если прошло данное время, выкидывало ошибку какую нибудь, чтобы я смог отловить ее и выполнить запрос снова?
Сейчас использую такой код
<code>
async def async_request(items):
    url = items[0]
    global request_semaphone
    async with request_semaphone:
        try:
            async with aiohttp.ClientSession() as client:
                async with client.get(url) as r:
                    print("Статус:", r.status , "url:", url)
                    if(r.status == 200):
                        name = url.split("/")[-1]
                        if(name.find(".jpg") != -1):
                            await save_image(r, name)
                        else:
                            if(len(items) > 1):
                                return [await r.text(), url, items[1]]
                            else:
                                return [await r.text(), url]

                    else:
                        print(r.status, "Задержка 1 секунда")
                        await asyncio.sleep(1)
                        await async_request(url)

        except Exception as e:
            print("Блокировка. Ожидание 10 секунд", e, items)
            await asyncio.sleep(1)
            await async_request(url)
</code>
Также выслушаю предложения, почему python (или сам парсер) зависает.

В документации описано как указать таймаут:
<code>
timeout = aiohttp.ClientTimeout(total=30)
async with aiohttp.ClientSession(timeout=timeout) as session:
    ...
</code>


Порт 6000 недоступен
Обнаружил неработающий порт в FastAPI. Запускаю на 6000 порте и оказывается, сервер недоступен. Соседние порты работают.
<code>
from fastapi import FastAPI
import uvicorn

HOST = '0.0.0.0'
PORT = int(6000)

app = FastAPI()

@app.get('/')
async def get_courses_method():
    return {}

if __name__ == "__main__":
    uvicorn.run(app, host=HOST, port=PORT)
</code>

Это не ошибка
FastAPI. Safari, Firefox, Chrome и, возможно, другие браузеры будут запрещать запросы на порт 6000, поскольку он обычно используется для протокола X11, а не для просмотра веб-страниц.
Здесь вы можете увидеть список запрещенных портов в исходном коде Chrome, среди которых порт 6000
Дополнительное чтение здесь и тут


Как получить username из формы Django?
Есть некая онлайн игра, которая для авторизации требует, чтобы пароль был хеширован в MD5 в порядке username + password. Как получить username из формы для использования его в хешировании?
forms.py
<code>
from django import forms
from .models import AdvUser
from django.contrib.auth import password_validation
from django.core.exceptions import ValidationError
from captcha.fields import CaptchaField
from .models import user_registrated

class RegisterUserForm(forms.ModelForm):
    email = forms.EmailField(required=True, label='Адрес электронной почты')
    password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput, help_text=password_validation.password_validators_help_text_html())
    password2 = forms.CharField(label='Пароль (повторно)', widget=forms.PasswordInput, help_text='Введите тот же самый пароль еще раз для проверки')
    captcha = CaptchaField()

    # Валидация пароля
    def clean_password(self):
        password1 = self.cleaned_data['password1']
        if password1:
            password_validation.validate_password(password1)
        return password1

    # Проверка на совпадение паролей, после валидации
    def clean(self):
        super().clean()
        password1 = self.cleaned_data['password1']
        password2 = self.cleaned_data['password2']
        if password1 and password2 and password1 != password2:
            errors = {'password2': ValidationError ('Введенные пароли не совпадают', code='password_mismatch')}
            raise ValidationError(errors)

    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        user.is_active = False
        user.is_activated = False
        if commit:
            user.save()
        user_registrated.send(RegisterUserForm, instance=user)
        return user

    class Meta:
        model = AdvUser
        fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name',)
</code>

def save(self, commit=True):
    user = super().save(commit=False)
    username = self.cleaned_data.get('username')
    ...


Kак отловить закрытие окна?
Надо, чтобы при закрытии окна появлялся
askyesno с вопросом "Вы уверены, что хотите закрыть окно?". Я пытался сделать нечто вроде этого:

root=Tk()
def ask(e):
    if e.x==200 and e.y==0:
        if askyesno(message='Вы уверены,что хотите закрыть окно?'):
            root.destroy()
root.bind('<Button-1>',ask)

Но я убедился, что значок крестика находится вне системы координат окна. Во всех более-менее серьёзных программах есть такие предупреждения, но в интернете я ничего лучше, чем убрать значок крестика и вместо этого поставить кнопку "Exit", я не нашёл.

...
root.protocol("WM_DELETE_WINDOW", function_on_close)
...


После нажатия на кнопку, нужно добавлять в переменную damage рандом. числа и суммировать их
<code>
import random
from tkinter import *

root = Tk()
root.geometry("600x400+200+100")

credit = 0
damage = 0

def random_damage():
    damage = random.randrange(30, 90)
    print(damage)

btn_one = Button(text="btn", width="20", command=random_damage).pack()

root.mainloop()
</code>
Не могу сделать так, чтобы рандом. числа суммировались и сохранялись в переменной

import random
from tkinter import *

root = Tk()
root.geometry("600x400+200+100")

credit = 0
damage = 0

def random_damage():
    global damage
    if damage == 0:
        damage = random.randrange(30, 90)
        print(damage)
    elif damage > 0:
        dam = random.randrange(30, 90)
        damage += dam
        print(damage)

btn_one = Button(text="btn", width="20", command= lambda: random_damage()).pack()

root.mainloop()

Если у вас была проблема с тем, что функция не выполнялась, то вы забыли скобки после
random_damage при нажатии кнопки. Так же когда присваиваете функцию кнопке, то после
command = лучше прописывать
lambda: функция(), это нужно чтобы функция не использовалась сразу при создании окна.


Фильтрация названий столбцов по первым символам или по совпадению определенных символов
Анализирую Excel таблицу, в которой есть несколько листов, в заголовках которых, отличается только одно название ячейки. А именно: название ячейки "Дата пост.ф.1.2" отличается от названия аналогичной по содержанию ячейки в другом листе "Дата пост.ф.1" (в последней имя ячейки короче на 1 символ).
Пример кода:

import pandas as pd
sheet = input('Введите номер интересующей страницы: ')
sheet_result = 'Данные_' + str(sheet)
dd = pd.read_excel('test.xlsx', sheet_name=sheet_result)
result = dd.query('`Дата пост.ф.1.2`.notnull() == True') # фильтр ненулевых значений
print(len(result['Район']))

При выборе таблицы, в которой имя ячейки отличается от "Дата пост.ф.1.2" выдается ожидаемая ошибка:

pandas.core.computation.ops.UndefinedVariableError:
name 'BACKTICK_QUOTED_STRING_Дата_пост_DOT_ф_DOT_1_DOT_2' is not defined

Как сделать аналогичную конструкцию через метод
query() (или в случае невозможности использовать указанный метод - альтернативный), где при выборе имени ячейки будет проверяться неполное совпадение по названию, а частичное, например "Дата пост" или "Дата пост.ф"?
Конструкции
if-else не хочется применять, т.к. страдает гибкость и в случае изменения исходных названий ячеек возникнут проблемы.

Метод DataFrame.query() не позволяет работать с именами столбцов, в которых встречаются символ точки или другие символы пунктуации или специальные символы.
В Pandas можно воспользоваться другими методами.
Пример:
Исходный DF:

In [15]: df
Out[15]:
   col 1  col 1.2  col 1.3  col 2  col2.1
0      3        4        4      1       9
1      1        7        0      0       0
2      7        7        2      2       0
3      4        3        0      1       5
4      0        7        9      5       5

In [16]: df.columns
Out[16]: Index(['col 1', 'col 1.2', 'col 1.3', 'col 2', 'col2.1'], dtype='object')

выбираем столбцы начинающиеся со строки
"col 1":

In [17]: df.columns.str.contains(r"^col 1")
Out[17]: array([ True,  True,  True, False, False])

In [18]: df.columns[df.columns.str.contains(r"^col 1")]
Out[18]: Index(['col 1', 'col 1.2', 'col 1.3'], dtype='object')

In [19]: df.loc[:, df.columns.str.contains(r"^col 1")]
Out[19]:
   col 1  col 1.2  col 1.3
0      3        4        4
1      1        7        0
2      7        7        2
3      4        3        0
4      0        7        9

Если нужен соответствующий DF (подмножество исходного DF с отобранными столбцами), то можно воспользоваться методом DataFrame.filter():

In [20]: df.filter(like="col 1")
Out[20]:
   col 1  col 1.2  col 1.3
0      3        4        4
1      1        7        0
2      7        7        2
3      4        3        0
4      0        7        9

In [21]: df.filter(regex="^col 1")
Out[21]:
   col 1  col 1.2  col 1.3
0      3        4        4
1      1        7        0
2      7        7        2
3      4        3        0
4      0        7        9

выберем все столбцы содержащие точку в названии:

In [22]: df.filter(regex="\.")
Out[22]:
   col 1.2  col 1.3  col2.1
0        4        4       9
1        7        0       0
2        7        2       0
3        3        0       5
4        7        9       5


Рисуем диагонали квадрата в Python
Задача следующая - напишите программу, которая запрашивает у пользователя сторону квадрата и символ, а затем рисует этот символ по диагоналям квадрата. Гарантируется, что входное число всегда нечетное.
<code>
s = int(input('vv chislo: '))
char = str(input('vv simbol: '))
if s % 2 == 1:
    for i in range(1, s, 2):
        i = ' ' * (i-2) + char + ' ' * (s - (i + 1)) + char + ' ' * (i - 2)
        print(i)
    for i in range(s, 0, -2):
        i = ' ' * (i-2) + char + ' ' * (s - (i + 1)) + char + ' ' * (i - 2)
        print(i)
</code>
Помогите пожалуйста разобраться с проблемой вывода. В середине выводит 2 символа и с неправильными отступами.

Я могу предложить чуть попроще:

Хранить список из пробелов (допустимы ли такие накладные расходы?)
На каждой строчке выставлять символ на нужной диагональной позиции
Печатать получившуюся строку
А затем сбрасывать обратно в пробел.

<code>
    s = int(input('vv chislo: '))
    char = str(input('vv simbol: '))
    if s % 2 == 1:
        current_line = [' '] * s
        for i in range(0, s):
            current_line[i] = char
            current_line[s-1 - i] = char
            print(''.join(current_line))
            current_line[i] = ' '
            current_line[s-1 - i] = ' '
</code>
Получается один цикл, довольно прозрачно работает.
Надеюсь, подойдет.


NameError("name 'message' is not defined")
В Telegram Bot API возникает вот такая ошибка NameError("name 'message' is not defined") . Возникает когда выбираю iPhone из Catalogo. Подскажите как и почему возникает ошибка. Это мой первый бот.

import telebot
import config
from telebot import types

bot = telebot.TeleBot(config.TOKEN)
@bot.message_handler(commands=['start'])

def welcome(message):

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton("Catalogo")
    item2 = types.KeyboardButton("Regole")
    markup.add(item1, item2)

    bot.send_message(message.chat.id, "Benvenuto, {0.first_name}!\nIo sono - {1.first_name}.".format(message.from_user, bot.get_me()),
    parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])

def risposta(message):
    if message.chat.type == 'private':
        if message.text == "Catalogo":

            markup = types.InlineKeyboardMarkup(row_width = 1)

            item1 = types.InlineKeyboardButton("iPhone", callback_data = "iPhone")
            item2 = types.InlineKeyboardButton("Samsung", callback_data = "Samsung")
            item3 = types.InlineKeyboardButton("Huawei", callback_data = "Huawei")
            item4 = types.InlineKeyboardButton("Xiaomi", callback_data = "Xiaomi")
            item5 = types.InlineKeyboardButton("Nokia", callback_data = "Nokia")
            item6 = types.InlineKeyboardButton("LG", callback_data = "LG")

            markup.add(item1, item2, item3, item4, item5, item6)
            bot.send_message(message.chat.id, "Scegliete cosa vi interessa:", reply_markup=markup)

        elif message.text == "Regole":
            bot.send_message(message.chat.id, " 1)Dovete vivere a Roma.\n2)Il pagamento viene effettuato dopo aver scielto il telefono.\n3)")

        else :
            bot.send_message(message.chat.id, "Scusate non ho capito")

@bot.callback_query_handler(func=lambda call: True)

def callback_inline(call):
    try:
        if call.message:
            if call.data == 'iPhone':
                markup = types.InlineKeyboardMarkup(row_width = 3)

                item1 = types.InlineKeyboardButton("iPhone 11 Pro Max", callback_data = "iPhone 11 Pro Max")
                item2 = types.InlineKeyboardButton("iPhone 11 Pro", callback_data = "iPhone 11 Pro")
                item3 = types.InlineKeyboardButton("iPhone 11", callback_data = "iPhone 11")
                item4 = types.InlineKeyboardButton("iPhone XS Max", callback_data = "iPhone XS Max")
                item5 = types.InlineKeyboardButton("iPhone XS", callback_data = "iPhone XS")
                item6 = types.InlineKeyboardButton("iPhone XR", callback_data = "iPhone XR")
                item7 = types.InlineKeyboardButton("iPhone X", callback_data = "iPhone X")
                item8 = types.InlineKeyboardButton("iPhone 8 Plus", callback_data = "iPhone 8 Plus")
                item9 = types.InlineKeyboardButton("iPhone 8", callback_data = "iPhone 8")
                item10 = types.InlineKeyboardButton("iPhone 7 Plus", callback_data = "iPhone 7 Plus")
                item11 = types.InlineKeyboardButton("iPhone 7", callback_data = "iPhone 7")
                item12 = types.InlineKeyboardButton("iPhone SE", callback_data = "iPhone SE")
                item13 = types.InlineKeyboardButton("iPhone 6s Plus", callback_data = "iPhone 6s Plus")
                item14 = types.InlineKeyboardButton("iPhone 6s", callback_data = "iPhone 6s")
                item15 = types.InlineKeyboardButton("iPhone 6 Plus", callback_data = "iPhone 6 Plus")
                item16 = types.InlineKeyboardButton("iPhone 6", callback_data = "iPhone 6")

                markup.add(item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16)
                bot.send_message(message.chat.id, "Scegliete il modello:", reply_markup=markup)

            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Catalogo",
            reply_markup=None)

    except Exception as e:
        print(repr(e))

bot.polling(none_stop=True)

Я забыл поставить call в
bot.send_message(message.chat.id, "Scegliete il modello:", reply_markup=markup) .


Python3 неверно печатает элементы списка
Есть простой список:

tasks = [
    ['Зона 1:\rЗадача 1\r', True],
    ['Зона 1:\rЗадача 2\r', True],
    ['Зона 1:\rЗадача 3\r', True],
    ['Зона 2: \rЗадача 1\r', True],
    ['Зона 2: \rЗадача 2\r', True],
    ['Зона 2: \rЗадача 3', True]
]

При выполнении следующих трех инструкций печатаются совсем разные данные:

for task in tasks:
    print(task)
    print(task[0])
    print(task[1])

Терминал:

['Зона 1:\rЗадача 1\r', True]
Задача 1
True
['Зона 1:\rЗадача 2\r', True]
Задача 2
True
['Зона 1:\rЗадача 3\r', True]
Задача 3
True
['Зона 2: \rЗадача 1\r', True]
Задача 1
True
['Зона 2: \rЗадача 2\r', True]
Задача 2
True
['Зона 2: \rЗадача 3', True]
Задача 3
True

Почему
print(task[0]) обрезает строку перед печатью? Может ли это как-то быть связано с тем, что я использую фреймворк Django или тем, что список - результат преобразования json-строки?

Почему
print(task[0]) обрезает строку перед печатью?

Потому что в строке присутствует символ возврата каретки
\r (CARRIAGE RETURN).
Описание из Wikipedia:

Перемещает позицию печати в крайнее левое положение (исходно — без
  перевода на следующую строку).

Могу предположить, что Вы хотели использовать перевод строки
\n.


Выгрузка Google таблицы
Использую таблицу в качестве БД.
Не могу понять каким образом я могу выгрузить таблицу в .json файл.

Вероятно, самое простое, это

Экспортировать лист в CSV с помощью Google Sheets API / Drive API
Преобразовать данные из CSV в JSON c помощью tablib

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


Помощь с составлением регулярного выражения
При парсинге необходимо вытащить один из параметров, которого нет на странице,
но оно есть в js.
Кусок Js

i","brandId":14426,"nomenclatures":{"2217416":{"cod1S":2217416,"ordersCount":700,"artikul":"

Необходимо вытащить значение в ordersCount
Я сначала пытался вытащить 2 index поиска text.find() и потом вырезать из текста, но он выкидывало -1, т.е не найдено
Сейчас пытаюсь c помощью регулярки, но возникла проблема с составлением ее.
Не могу понять, как ограничить слева и справа.
Последняя попытка
/^"ordersCount":.\$/

Попробуйте так, только следите за типом кавычек (в примере для двойной кавычки):
<code>
import re
s = 'i","brandId":14426,"nomenclatures":{"2217416":{"cod1S":2217416,"ordersCount":700,"artikul":"'
r = re.findall(r'\"ordersCount\":(\d+)', s)
print(r)
</code>


Как вытащить из БД данные за месяц?
Подскажите, пожалуйста, как из БД SQLite вытащить данные за месяц. В таблице
student есть столбик
Date, как вытащить данные именно за промежуток времени?

Пример:
<code>
SELECT * FROM student WHERE Date BETWEEN '2020-02-01' and '2020-02-29'
</code>


Конвертация даты в удобно-читаемую форму Python
Имеется строка

2020-01-25T19:27:49.3223932

Как ее конвертировать в удобно - читаемую форму? Например 25.01.2020
Пробовал так

datetime.datetime.strptime(first_comment, '%Y-%m-%dT%H:%M:%S')

In [15]: from datetime import datetime as DT

In [16]: DT.strptime(dt_str.partition("T")[0], "%Y-%m-%d").strftime("%d.%m.%Y")
Out[16]: '25.01.2020'


Dronekit python
Всем привет.
Могу ли я подключиться к любым дронам используя dronekit?
Или dronekit поддерживает только определённые типы дронав?
Пожалуйста, помогите.

Прочитай про MAVlink (протокол для обмена сообщения с дронами и взаимодействия между компонентами дрона).


PyQt5. Диалоговое окно
<code>
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.show()
        self.b = QDialogButtonBox(QDialogButtonBox.Discard | QDialogButtonBox.Cancel | QDialogButtonBox.Yes)
        self.b.show()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
</code>
Что нужно добавить/изменить в этом коде, чтобы диалоговое окно правильно отображалось(нельзя было изменить его размер и т. п.)

Вам нужно добавить эти строки в
__init__:

size = self.b.size()
self.b.setMinimumSize(size)
self.b.setMaximumSize(size)

Должно получиться так:

def __init__(self):
    super().__init__()
    self.show()
    self.b = QDialogButtonBox(QDialogButtonBox.Discard | QDialogButtonBox.Cancel | QDialogButtonBox.Yes)
    self.b.show()

    size = self.b.size()
    self.b.setMinimumSize(size)
    self.b.setMaximumSize(size)

UPD1:

def __init__(self):
    super().__init__()
    self.show()
    self.b = QDialogButtonBox(QDialogButtonBox.Discard | QDialogButtonBox.Cancel | QDialogButtonBox.Yes)
    self.b.setWindowFlags(Qt.CustomizeWindowHint| Qt.WindowCloseButtonHint)
    self.b.show()

    size = self.b.size()
    self.b.setMinimumSize(size)
    self.b.setMaximumSize(size)


Найти повторяющиеся элементы в списке, используя while, if , for in
Подскажите пожалуйста, как будет выглядеть код, который находит повторяющиеся элементы в списке с использованием циклов.
Допустим, список:
[1,2,3,1,1,1,2,3,3,2,2,]
вывод:

1:4
2:4
3:3

Как вариант
<code>
list1 = [1,2,3,4,2,1,3,2,1]
counter ={}
for el in list1:
    if el not in counter:
        c=0
        for n in list1:
            if n==el:
                c+=1
        counter[el]=c
print(counter)
</code>


Выполняется определенный код при завершении команды через ctrl + c
Какие есть способы реализации данной идеи, кроме как поместить весь код в
<code>
try:
 обычный код
except KeyboardInterrupt:
 код при завершении програмы через ctrl + c
</code>

import sys, contextlib

def main(a) -> bool:
    print('обычный код %s' % a)
    raise KeyboardInterrupt
    raise ZeroDivisionError('err')
    return True

def excepthook(*args):
    la = len(args)
    if la == 3:
        (exc_type, exc_val, exc_tb) = args
    elif la == 1:
        (exc_type, exc_val, exc_tb) = (type(args[0]), args[0], args[0].__traceback__)
    elif not la:
        (exc_type, exc_val, exc_tb) = sys.exc_info()
    else:
        raise AssertionError(args)
    if exc_type == KeyboardInterrupt:
        print('код при завершении програмы через ctrl + c')
        raise
    else:
        raise exc_type(exc_val).with_traceback(exc_tb)

def test():
    try: raise UserWarning('ex')
    except Exception as e:
        try: excepthook(e)
        except UserWarning:
            try: excepthook()
            except UserWarning:
                try: excepthook(e, e)
                except AssertionError: print('ok')
                else: print('-1')
            else: print('-2')
        else: print('-3')

if __name__ == '__main__':
    test()
    sys.excepthook = excepthook
    # with contextlib.suppress(UserWarning, KeyboardInterrupt):
    main(1)
    # b = False
    # with contextlib.suppress(UserWarning, KeyboardInterrupt):
    #     b = main(2)
    # if not b:
    #     sys.exit()
    print('-')


сортировка строки массива numpy
Требуется отсортировать только первую строку двумерного массива по возрастанию так, чтобы вторая строка была связана с первой.
Из массива:

a = ([[30,  10,  20],
      [ 0,   1,   2]])

на выходе нужно получить:

b = ([[10,  20,  30],
      [ 1,   2,   0]])

С помощью np.argsort сортируется каждая строка по возрастанию:

import numpy as np
a = np.array([30,20,10])
b = np.array([0, 1, 2])
a = np.vstack((a, b))
ind = np.argsort(a, axis = 1)
b = np.take_along_axis(a, ind, axis=1)
print(b)

Получается:

[[10 20 30]
 [ 0  1  2]]

Нужно, чтобы вторая строка не сортировалась, а была привязана к первой строке.


Как сделать ветку replykeyboard кнопок python
<code>
 def send_welcome(message):
   bot.send_message(message.from_user.id,'Привет', reply_keyboard=keyboard())
 def keyboard():
   markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
   btn3 = types.KeyboardButton('Помощь🔧')
   btn2 = types.KeyboardButton('Информация📖')
   btn1 = types.KeyboardButton('Орёл и решка💰')
   btn4 = types.KeyboardButton('Кейсы📦')
   markup.add(btn1,btn2,btn3,btn4)
   return markup
</code>
Как сделать что бы когда пользователь вводит 'Кейсы📦' то появлялась другая replykeyboard?

проверяйте через @bot.message_handler текст, отправленный пользователем. если он будет совпадать с текстом из нужной кнопки, то отправляйте сообщение от бота с другим reply_keyboard.
<code>
@bot.message_handler(content_types=["text"])
def message(message):
    if message.text == 'Кейсы📦':
        bot.send_message(message.from_user.id, 'Меню кейсов📦', reply_keyboard=other_keyboard())
</code>


Как создавать файлы при помощи питона (Python 3.8)
Как создавать файлы при помощи питона.

with open('yourfile.txt', 'w') as f:
    f.write('filedata')


Как скрыть виджет PyQt5?
Каким образом скрыть виджет в PyQt5?

QWidget.show()
Показывает виджет и его дочерние виджеты.
Это эквивалентно вызову
showFullScreen(),
showMaximized() или
setVisible(True), в зависимости от поведения платформы по умолчанию для флагов окна.

QWidget.hide()
Скрывает виджет. Эта функция эквивалентна
setVisible(False).
Примечание. Если вы работаете с
QDialog или его подклассами и вызываете функцию
show() после этой функции, диалоговое окно будет отображаться в исходном положении.


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

a = [{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 20}, {5, 9}, {1, 8}].

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

a = [{0, 1, 2, 3, 8, 20}, {4, 5, 6, 7, 9}]

Пробовал следующий способ:

a = [{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 20}, {5, 9}, {1, 8}]
new = []
for _i in range(len(a)):
    tmp = a[_i]
    for _j in range(len(a)):
        if tmp.isdisjoint(a[_j]) == False:
            tmp = tmp.union(a[_j])
    new.append(tmp)
test = []
for _i in new:
    if _i not in test:
        test.append(_i)
print(test)

Но он оказался: во-первых, слишком медленным, а во-вторых он не учитывает ситуацию, когда множество1 имеет пересечение с множеством2, а множество2 имеет пересечение с множеством3 и так далее, так что он выдает результат:

[{0, 1, 2, 3, 8}, {4, 5, 6, 7, 9}, {8, 1, 20}, {0, 1, 2, 3, 20, 8}]

Тестировал на списке из 800 тысяч множеств, ожидаемое время обработки оказалось 24 часа.

Вот вроде получилось. Наверняка через itertools можно как-то проще сделать, но так вроде работает.

def flatten_setlist(old):
  new = []
  # идем по списку set-ов
  for o in old:
    found = False
    # если новый список пока пустой, то добавляем туда set без всяких проверок
    if len(new) == 0:
      new.append(o)
      continue
    # перебираем set-ы из нового списка
    for n in new:
      # если есть пересечение
      if len(n & o) > 0:
        found = True
        # то добавляем set в имеющийся set
        n |= o
        break
    # если не найдено ни одного пересечения с сетами из нового списка, то добавляем set в список новых set-ов
    if(not found):
      new.append(o)
  return new

old = [{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 20}, {5, 9}, {1, 8}]
# процесс "схлопывания" списка сходится не сразу, поэтому нужен ещё один цикл
while True:
  new = flatten_setlist(old)
  # если работа алгоритма не привела к изменениям в списке, то работу цикла прекращаем
  if(len(new) == len(old)):
    break
  old = new

print(new)

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

from tqdm import tqdm_notebook

def flatten_setlist(old):
  print('old list len = ', len(old))
  # процесс "схлопывания" списка сходится не сразу, поэтому нужен ещё один цикл
  with tqdm_notebook(total=len(old)) as pbar:
    while True:
      new = []
      new_all = set()
      # идем по списку set-ов
      for o in tqdm_notebook(old, leave=False):
        #found = False
        # если новый список пока пустой, то добавляем туда set без всяких проверок
        if len(new) == 0:
          new.append(o)
          new_all |= o
          continue
        if len(new_all & o) > 0:
          # перебираем set-ы из нового списка
          for n in new:
            # если есть пересечение
            if len(n & o) > 0:
              #found = True
              # то добавляем set в имеющийся set
              n |= o
              new_all |= o
              break
        else:
          # если не найдено ни одного пересечения с сетами из нового списка, то добавляем set в список новых set-ов
          new.append(o)
          new_all |= o
      # если работа алгоритма не привела к изменениям в списке, то работу цикла прекращаем
      if(len(new) == len(old)):
        print('new list len = ', len(new))
        return new
      pbar.update(len(old)-len(new))
      old = new

old = [{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 20}, {5, 9}, {1, 8}]
print(flatten_setlist(old))


Реализация вложенных классов вне родителя
При создании классов в приложении появилась необходимость разделить класс на несколько файлов из-за его размера.
Вопрос состоит в том, можно ли реализовать классы, вложенные в родитель?
Например в основном файле есть класс:

class Test:
    class TestInner1:
        pass
    class TestInner2:
        pass
    class TestInner3:
        pass

Я могу разделить это на файлы:

# --- Main file ---
from inner1 import TestInner1
from inner2 import TestInner2
from inner3 import TestInner3

class Test:
   class TestInner1(TestInner1):
      pass
   class TestInner2(TestInner2):
      pass
   class TestInner3(TestInner3):
      pass

# --- inner1 ---
class TestInner1:
    # code

# --- inner2 ---
class TestInner2:
    # code

# --- inner3 ---
class TestInner3:
    # code

Но в таком случае в главном классе я реализую классы, дочерние тем, что лежат в другом файле.
Возможно ли сделать это без такого костыля?

Непонятно, зачем вообще делать в таком случае классы внутри другого класса. Это не несёт никакой практической пользы и так делают в основном, если есть маленький компактный класс и он всё равно понадобится только внутри большого класса, так что можно просто объявить его там и не загромождать глобальную область видимости.
Но если очень уж хочется чтобы они были именно внутри, то, кажется должно сработать что-то подобное:
<code>
import inner1
import inner2
import inner3

class Test:
   TestInner1 = inner1.TestInner1
   TestInner2 = inner2.TestInner2
   TestInner3 = inner3.TestInner3
</code>


как посчитать количество событий в файле?
Имеется файл вида:

[2018-05-17 01:55:52.665804] NOK
[2018-05-17 01:56:23.665804] OK
[2018-05-17 01:56:55.665804] OK
[2018-05-17 01:57:16.665804] NOK
[2018-05-17 01:57:58.665804] OK
...

Напишите программу, которая считывает файл
и выводит число событий NOK за каждую минуту

[2018-05-17 01:57] 1234
[2018-05-17 01:58] 4321

как это вообще можно сделать?
хоть в какую сторону двигаться?

with open(file_name, mode='r') as file:
    for line in file:
        if 'NOK' in line:
            print(line)

Делаем парсер:

Вытаскивание даты до минут включительно

Я делал через регулярные выражения, но можно попробовать через datetime
Работает так:
[2018-05-17 01:55:52.665804] ->
2018-05-17 01:55

Сбор и подсчет строк с одинаковой датой из шага 1.
Вывод результата

text.txt:

[2018-05-17 01:55:52.665804] NOK
[2018-05-17 01:55:55.665804] NOK
[2018-05-17 01:55:56.665804] NOK
[2018-05-17 01:56:23.665804] OK
[2018-05-17 01:56:55.665804] OK
[2018-05-17 01:57:16.665804] NOK
[2018-05-17 01:57:58.665804] OK

Пример:

from collections import defaultdict
import re

file_name = 'text.txt'
pattern_datetime = re.compile('\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}).+\]')
date_by_counter = defaultdict(int)

with open(file_name) as file:
    for line in file:
        if 'NOK' not in line:
            continue

        match = pattern_datetime.search(line)
        # Проверка, что регулярка смогла найти дату
        if match:
            date_str = match.group(1)  # Получение даты
            date_by_counter[date_str] += 1

for k, v in date_by_counter.items():
    print(f'[{k}] {v}')

Результат:

[2018-05-17 01:55] 3
[2018-05-17 01:57] 1


Как в python лучше писать код? [закрыт]

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

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

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

Каким регистром писать в python? Змеиным или же верблюжим? Какое написание будет более традиционным?..

Пропишите в консоли python
import this и там всё будет, если хотите прочитать все более подробно, то
PEP8 в помощь(он есть в интернет в свободно доступе)


Преобразование класса внутри массива
Есть класс Sword, и его объект от него:sword
sword = Sword('name')
Но когда добавляешь элемент sword в список и пробуешь его отобразить, выдает тип объекта, а не sword.
Можно ли как-нибудь сделать, чтобы когда выводишь массив, внутри объект sword был именно sword или sword.name, но сохранял все свои свойства(урон, прочность)?

Нужно переопределить в классе методы str и repr. Ниже пример.
<code>
class Sword:
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return "Sword name= "+self.name
    def __repr__(self):
       return self.name

sw1=Sword("Mielnier")
sw2=Sword("Exalibur")
print(sw1)
print(sw2)
mass=[sw1,sw2]
print(mass)
</code>


Нужно считать строку до точки и подсчитать кол-во слов в строке
Не понимаю где проблема в коде. Пытаюсь считать строку до точки в данном коде:

s = 'Тестовая. Строка'
_str = ''
for i in range(len(s)):
    while s[i] != '.':
        _str += s[i]
print(_str)

Но ничего не выводит, прошу расписать чуть подробнее -- почему?
PS задачей запрещено использовать конструкцию
if

s = "Первая тестовая строка. Вторая строка."

res = len(s.partition(".")[0].split())

print(res)
>>> 3

пошагово:

s.partition(".") - разделит строку на три части: подстрока до первого встретившегося разделителя, сам разделитель (
".") и оставшаяся после разделителя часть строки:

In [9]: s.partition(".")
Out[9]: ('Первая тестовая строка', '.', ' Вторая строка.')

выберем подстроку до первого разделителя:

In [10]: s.partition(".")[0]
Out[10]: 'Первая тестовая строка'

.split() - разобъет строку на слова

In [11]: s.partition(".")[0].split()
Out[11]: ['Первая', 'тестовая', 'строка']


Можно ли значения которая выдает функция засуть в массив и посчитать их сумму?
<code>
import math
def fibonachi():
    first=1
    last=2
    c=0
    print(last)
    while c<4000000:
        c=first+last
        first=last
        last=c
        if c%2==0:
            print(c)
</code>
fibonachi()
"""выдает значения
2
8
34
144
610
2584
10946
46368
196418
832040
3524578
можно ли эти значения засунуть в массив и посчитать их сумму?"""

import math

def fibonachi():
    first = 1
    last = 2
    c = 0
    while c < 4000000:
        c = first + last
        first = last
        last = c
        if c % 2 == 0:
            yield c

s = sum(fibonachi())

print(s)


полоска здоровья над игроком в pygame
на данный момент у меня полоска здоровья сбоку, я хочу добиться, чтобы она была сверху объекта, который еще и перемещается. Помогите с кодом для реализации)
<code>
import pygame
import random

WIDTH  = 1600
HEIGHT =  800
FPS    =   60

# Задаем цвета
WHITE  = (255, 255, 255)
BLACK  = (0, 0, 0)
RED    = (255, 0, 0)
GREEN  = (0, 255, 0)
BLUE   = (0, 0, 255)
YELLOW = (255, 255, 0)

# переменные
timer_games = 0
timer_stats = 0
u = 100
boss_life = 100
player_ship_life = 100

#разное
pygame.time.set_timer(pygame.USEREVENT, 1000)     # таймер , смотреть инструкцию

# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shmup!")
clock = pygame.time.Clock()

def draw_boss(surf, x, y, pct):
    if pct < 0:
        pct = 0
    BAR_LENGTH_1 = 150
    BAR_HEIGHT_1 = 20
    fill_1 = (pct / 100) * BAR_LENGTH_1
    outline_rect_1 = pygame.Rect(x, y, BAR_LENGTH_1, BAR_HEIGHT_1)
    fill_rect_1 = pygame.Rect(x, y, fill_1, BAR_HEIGHT_1)
    pygame.draw.rect(surf, GREEN, fill_rect_1)
    pygame.draw.rect(surf, WHITE, outline_rect_1, 2)

class Boss(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((70, 60))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(600,900)
        self.rect.y = random.randrange(HEIGHT - 700)
        self.speedx = random.randrange(-10 , 10)
    def update(self):
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
            self.speedx = random.randrange(-10 ,-1)
        if self.rect.left < 0:
            self.rect.left = 0
            self.speedx = random.randrange(1 , 10)

all_sprites = pygame.sprite.Group()
all_sprites_1 = pygame.sprite.Group()
mobs = pygame.sprite.Group()

boss = Boss()
all_sprites_1.add(boss)
mobs1 = pygame.sprite.Group()

running = True
while running:
    clock.tick(FPS)
    for e in pygame.event.get():         # запускает таймер ,каждую секунду он считает
        if e.type == pygame.USEREVENT:   # только в его границах работает таймер
            timer_games += 1

        if e.type == pygame.QUIT:
            running = False
        elif e.type == pygame.KEYDOWN:
            if e.key == pygame.K_SPACE:
                player.shoot()

    # Обновление
    all_sprites.update()
    all_sprites_1.update()

    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    all_sprites_1.draw(screen)
    draw_boss(screen,(WIDTH / 1.15), (HEIGHT / 40), boss_life)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()
</code>

Все, что нужно сделать - "впихнуть" функцию
draw_boss внутрь класса
Boss. Получится так:

import pygame
import random

WIDTH  = 1600
HEIGHT =  800
FPS    =   60

# Задаем цвета
WHITE  = (255, 255, 255)
BLACK  = (0, 0, 0)
RED    = (255, 0, 0)
GREEN  = (0, 255, 0)
BLUE   = (0, 0, 255)
YELLOW = (255, 255, 0)

# переменные
timer_games = 0
timer_stats = 0
u = 100
boss_life = 100
player_ship_life = 100

#разное
pygame.time.set_timer(pygame.USEREVENT, 1000)     # таймер , смотреть инструкцию

# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shmup!")
clock = pygame.time.Clock()

class Boss(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((70, 60))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(600,900)
        self.rect.y = random.randrange(HEIGHT - 700)
        self.speedx = random.randrange(-10 , 10)

    def update(self):
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
            self.speedx = random.randrange(-10 ,-1)
        if self.rect.left < 0:
            self.rect.left = 0
            self.speedx = random.randrange(1 , 10)

    def draw_boss(self, surf, pct):
        if pct < 0:
            pct = 0
        BAR_LENGTH_1 = 150
        BAR_HEIGHT_1 = 20
        fill_1 = (pct / 100) * BAR_LENGTH_1
        outline_rect_1 = pygame.Rect(self.rect.x-70/2, self.rect.y-25, BAR_LENGTH_1, BAR_HEIGHT_1)
        fill_rect_1 = pygame.Rect(self.rect.x-70/2, self.rect.y-25, fill_1, BAR_HEIGHT_1)
        pygame.draw.rect(surf, GREEN, fill_rect_1)
        pygame.draw.rect(surf, WHITE, outline_rect_1, 2)

all_sprites = pygame.sprite.Group()
all_sprites_1 = pygame.sprite.Group()
mobs = pygame.sprite.Group()

boss = Boss()
all_sprites_1.add(boss)
mobs1 = pygame.sprite.Group()

running = True
while running:
    clock.tick(FPS)
    for e in pygame.event.get():         # запускает таймер ,каждую секунду он считает
        if e.type == pygame.USEREVENT:   # только в его границах работает таймер
            timer_games += 1

        if e.type == pygame.QUIT:
            running = False
        elif e.type == pygame.KEYDOWN:
            if e.key == pygame.K_SPACE:
                player.shoot()

    # Обновление
    all_sprites.update()
    all_sprites_1.update()

    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    all_sprites_1.draw(screen)
    boss.draw_boss(screen, boss_life)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()


как посчитать сумму элементов в списке используя FOR IN [закрыт]

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

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

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

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

задача довольно легкая , но ничего не приходить в голову )
есть список [ 4, 5 , 4, 5 ,4 ,5 ]
как посчитать сумму всех этих элементов не используя 'sum'
работать нужно с for .. in ..:
заранее благодарен вам за помощь

<code>
massive = [4, 5 , 4, 5 ,4 ,5]
sum = 0
for i in massive:
    sum += i
print(sum)
</code>
Это должно сработать


Flask не обновляет CSS
UPDATE
Изучил проблему подробнее. CSS применяется при первом запуске, но далее не изменяется, даже если обновить и сохранить файл. Это, в принципе, логично звучит для папки
static, но что-то мне подсказывает, что не так должно работать
Проблема
Суть проблемы в том, что
CSS не обновляется на сервере
Flask.
h1 все время красный, если подключать
CSS, хотя в самом
CSS файле указано, что он должен быть синим
При том запустив страницу через браузер все линкуется и работает хорошо
В принципе, всё видно на видео
Пробовал переустанавливать
Flask, менять структуру проекта. В папке проекта больше нет других
.css файлов, а в
.scss стоит
h1 { color: green; }, что, в принципе, тоже не красный
Исходный код
app.py

from flask import Flask, render_template

app=Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

layout.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css')}}">
    <!-- <link rel="stylesheet" href="../static/style.css"> -->
    <title>Page</title>
</head>

<body>
    {%block body%}
    {%endblock%}
</body>

</html>

index.html

{%extends "layout.html"%}

{%block body%}
    <h1>Hello!</h1>
{%endblock%}

style.css

h1 {
  color: green;
}

/*# sourceMappingURL=style.css.map */

Нашел ответ на свой вопрос.
Суть проблемы в кешировании браузером
CSS. Из этого следует 3 возможных решения проблемы

Отключить кеширование для сайта (в продакшн так не пустишь, но должно сработать, сам не пробовал) (источник)
Отдельно идентифицировать каждую версию стилей (источник)
Делать "полное обновление" страницы через
Ctrl+Shift+R или
Shift+F5 (источник)

Мне больше по душе пришелся последний вариант, т.к. не придется менять код и в принципе меньше возни


Работа с двумя списками в python (if, in, &)
Есть код:

test0 = [  ]
test1 = ['a1','a2','a3','b1','b2','b3','c1','c2','c3']

while True:
    p = str(input("Input: "))
    test0.append(p)
    if list(set(test0[-1]) & set(test1)):
        print('True')
    else:
        print('False')

Вывод:

Input: a1
False
Input: teat
False
Input: c1
False
Input: wtf?
False
Input:

Код должен показывать True при условии того, что значение p есть в словаре test1, но я где-то допустил ошибку. Ища ответ в интернете, не нашёл.
Можете показать мне где я так накосячил.

<code>
test0 = [  ]
test1 = ['a1','a2','a3','b1','b2','b3','c1','c2','c3']

while True:
    p = str(input("Input: "))
    test0.append(p)
    if p in test1:
        print('True')
    else:
        print('False')
</code>
Это должно работать.


Работа с графическим интерфейсом других приложений
Интересует вопрос, можно ли какими-то встроенными методами питона взаимодействовать с другими приложениями?
Например, кликнуть, ввести клавишу в определенное окно на столе,
или открыть браузер, затем кликнуть ровно посередине экрана.
Не обязательно браузер, нужно универсальное решение.
Желательно на Win7, Win10.

Именно встроенными нет, но есть модуль
pyautogui и куча других.


словарь список и цикл помогите разобраться в упражнении
Переберите список людей, которые должны участвовать в опросе. Если они уже прошли опрос, выведите сообщение с благодарностью, а если нет выведите сообщение с предложением принять участие.
Я что-то не так сделал и у меня программа повторяется (участники которые не приняли участие).
Я не давно начал изучать и некому обратится. спасибо за помощь!
Вот мой код.
<code>
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phill': 'python',
    }

polls = ['jen', 'sarah', 'edward', 'phill', 'nik', 'david', 'valera']

    for name in favorite_languages.keys():

print(f"{name.title()} thanks for tacking the poll!")

    for poll in polls:

         if poll not in favorite_languages.keys():

              print(f"{poll.title()}, please take the poll!")
</code>

favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phill': 'python'}
polls = ['jen', 'sarah', 'edward', 'phill', 'nik', 'david', 'valera']

for name in polls:
    if name in favorite_languages: #проверка, прошёл ли чел из polls опрос
        print(f"{name.title()} thanks for tacking the poll!") #если прошёл - благодарит
    else:
        print(f"{name.title()}, please take the poll!") #если не прошёл - просит пройти


Алгоритм на равное разделение работы на сотрудников
Недавно на сайте по задачкам-головоломкам для программиста наткнулся на задачу, где на входе через пробел цифры и нужно их разбить на 3 части максимально по ровну, на сколько это возможно.
Есть 3 работника, и нужно распределить сколько кому задач отдать. На входе через пробел идут задачи и оценка их сложности. Нужно распределить так, чтобы все работники отработали по ровну. (Выполнять задачи нужно строго в заданном порядке, паралельно работники не работают)
Например, на входе цифры 1 2 3 4 (максимальное кол-во задач 100). Правильным ответом будет отдать первые две задачи 1+2 первому работнику, 3 задачу второму работнику и 4 последнему. Нельзя отдать второму работнику первую задачу, так как задачи должны выполнятся по порядку, а работают они друг за другом, не параллельно. Также как и нельзя вторую задачу отдать второму работнику, так как тогда первый окажется на легке.
Помогите пожалуйста, отмечено что задача не сложная, а я что-то никак догадаться не могу как её решить. Подскажите, может есть какой-то алгоритм классический?
Я пробовал перебором решить, но и перебором что-то запутался и мне кажется получится очень большое кол-во сценарием. 100 задач можно распределить между 3мя людьми 100^3 разными способами, это если я правильно посчитал, а там ограничение по времени выполнения.

Алгоритм предложенный в комментариях с плавным сдвиганием границ между работниками до достижения лучшего распределения. Сделал на perl, постарался подробно описать процесс, для удобства перевода на питон.
<code>
use strict;
use warnings;

my @DATA;
while(<DATA>) { # Получение входных данных и запуск рабочей процедуры на них
        chomp;
        @DATA = split /\s+/;
        next if @DATA < 3; # Не обрабатываем строки с менее чем 3 элементами
        work();
}

# Основная рабочая процедура, на входе готовые данные в массиве @DATA
# Массивы с разделителями и суммами теоретически позволяют увеличить количество работников
# с минимальными правками алгоритма
sub work {
        # Массив позиций разделителей с дополнительныйми элементами по краям
        # для контроля по ним выходов за границы массива (сокращает количество проверок границ)
        # Содержит начало данных, левый разделитель (после первого элемента),
        # правый разделитель (второй с конца), конец данных
        my $border = [ 0, 1, @DATA-1, @DATA-0 ];
        # Текущие суммы разделенных частей массива, в тех же элементах (по номеру) что и позиции границ
        my $sum = [ 0, $DATA[0], 0, $DATA[$border->[2]] ];
        # Вычисляем сумму элементов средней части (массива без крайних элементов)
        $sum->[2]+=$_ for @DATA[1..$border->[2]-1];
        # Рабочий цикл, боюсь делать while(1)
        for(1..1000) {
                my $ch = change($border, $sum, 1) + # Двигаем левый разделитель
                         change($border, $sum, 2);  # Двигаем правый разделитель
                last unless $ch; # Завершаем цикл если ни одна граница не двигалась
        }
        # Печать результата
        print join('+', @DATA[0..$border->[1]-1]), "=$sum->[1] // ";
        print join('+', @DATA[$border->[1]..$border->[2]-1]), "=$sum->[2] // ";
        print join('+', @DATA[$border->[2]..@DATA-1]), "=$sum->[3]\n";
}

sub change {
        # Движение одного разделителя в сторону "улучшения равномерности сумм"
        # Параметры: Описания границ, Текущие суммы, Номер разделителя
        my($border, $sum, $pos) = @_;
        my $n1 = $sum->[$pos];   # Сумма левее разделителя
        my $n2 = $sum->[$pos+1]; # Сумма правее разделителя
        # Получаем направление движения границы +1 вправо, -1 влево
        # Если суммы одинаковы, направление 0 - выходим
        (my $sign = $n2 <=> $n1) || return 0;
        my $i = $border->[$pos]; # Текущая позиция в массиве данных
        # Выходим если движение в нужную сторону не возможно, так как упираемся в другой разделитель
        return 0 if $border->[$pos+$sign] == $i+$sign;
        my $oldDelta = abs($n1 - $n2);  # Текущая разница сумм
        if($sign > 0) { # движение вправо
                $n1 += $DATA[ $i ];
                $n2 -= $DATA[ $i ];
        } else { # движение влево
                $n1 -= $DATA[ $i-1 ];
                $n2 += $DATA[ $i-1 ];
        }
        my $newDelta = abs($n1 - $n2);  # Новая разность сумм
#       print "pos: $pos [$border->[$pos]],   sign: $sign n1: $n1,  n2: $n2 nD: $newDelta, oD: $oldDelta\n";
        return 0 if $newDelta >= $oldDelta; # Выходим ничего не меняя, если результат не улучшился
        # Движение в выбранную сторону улучшает результат, сохраняем новые суммы и позицию
        $sum->[$pos] = $n1;
        $sum->[$pos+1] = $n2;
        $border->[$pos]+=$sign;
        return 1;
}
__DATA__
1 2 3 100
1 2 3 100 101 102 140
4 4 4 4
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 100 1 1 1 1 1 1 1 1 1 1 200 1 1
</code>
Пример на ideone.com


Не читаются строчки в текстовом файле
Пытаюсь прочитать каждую строчку по отдельности в текстовом файле.
Но в результате выдает пустую строчку.
Например:
<code>
ids_db=open(file_name, 'r')
for line in ids_db:
    lines_count+=1
for i in range(lines_count):
    id_from_db=ids_db.readline()
    get_friends_list=vk.friends.get(user_id=id_from_db, order='id', v=5.103)
    print(id_from_db)
</code>

Вы столкнулись с проблемой известной как
"exhausted iterator".
File descriptor (указатель файла)
ids_db - является итерируемым объектом. После первого цикла:

for line in ids_db:
    lines_count+=1

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

ids_db.seek(0)

НО гораздо эффективнее проходить / итерировать по файлу всего один раз:

with open(file_name, 'r') as ids_db:
    for line_no, id_from_db in enumerate(ids_db, 1):
        get_friends_list=vk.friends.get(user_id=id_from_db, order='id', v=5.103)
        print(f"parsed line [{line_no}] -> id: [{id_from_db}]")


Вопрос по Tkinter
В строке 17(код ниже) я пытаюсь взять координату x и y курсора мышки использую event.x event.y, но выдаётся ошибка, если я нажимаю на окно:'hi' object has no attribute 'x':
<code>
from tkinter import *
import time
tk=Tk()
tk.wm_attributes('-topmost',1)
tk.resizable(0,0)
canvas=Canvas(tk,width=700,height=525,bd=0,highlightthickness=0)
canvas.pack()
tk.title('GAME')
tk.update()
class hi():
        def __init__(self,canvas):
                self.canvas=canvas
                self.id=self.canvas.create_polygon(15,0, 0,15, 10,30, 10,40, 0,50, 10,45, 0,70, 15,50, 30,70, 20,45, 30,50, 20,40, 20,30, 30,15, fill='green')
                self.canvas.bind_all('<Button-1>',self.hit)

        def hit(event,self):
                if event.x>pos[0] and event.x<pos[2] and event.y>pos[1] and event.x<pos[3]:#ТУТ
                        self.canvas.itemconfig(self.id,fill='red')
                        tk.update()
                        time.sleep(0.1)
                        self.canvas.itemconfig(self.id,fill='green')
                        tk.update()

obj=hi(canvas)
</code>

Поменяйте
def hit(event,self): на
def hit(self, event):. Специальное слово "self" всегда должно идти первым аргументом.


Оптимизация кода решенной задачи по Python
Я начинающий программист. Прохожу курс. Решил задачу в рамках курса, но хочу сделать свое решение более красивым и оптимальным. Как можно улучшить и упростить мой код?
Задача:

На вход подается число n и потом n строк такого формата:
  'Зенит;3;Спартак;1' Нужно написать программу, которая подсчитывает
  результаты всех матчей и выводит результат в таком формате:
Команда:Всего_игр Побед Ничьих Поражений Всего_очков

Мое решение:
<code>
n = int(input())
x = [input().split(';') for i in range(n)]
res = {}
g = 1
wp = 3
for i in x:
    if int(i[1]) > int(i[3]):
        if i[0] in res:
            z = res.get(i[0])
            z[0] += g
            z[1] += g
            z[4] += wp
        else:
            res[i[0]] = [1, 1, 0, 0, 3]
        if i[2] in res:
            z = res.get(i[2])
            z[0] += g
            z[3] += g
        else:
            res[i[2]] = [1, 0, 0, 1, 0]
    if int(i[1]) < int(i[3]):
        if i[2] in res:
            z = res.get(i[2])
            z[0] += g
            z[1] += g
            z[4] += wp
        else:
            res[i[2]] = [1, 1, 0, 0, 3]
        if i[0] in res:
            z = res.get(i[0])
            z[0] += g
            z[3] += g
        else:
            res[i[0]] = [1, 0, 0, 1, 0]
    if int(i[1]) == int(i[3]):
        if i[0] in res:
            z = res.get(i[0])
            z[0] += g
            z[2] += g
            z[4] += g
        else:
            res[i[0]] = [1, 0, 1, 0, 1]
        if i[2] in res:
            z = res.get(i[2])
            z[0] += g
            z[2] += g
            z[4] += g
        else:
            res[i[2]] = [1, 0, 1, 0, 1]
for i in res:
    print(i, ' '.join(map(str, res.get(i))), sep=':')
</code>
Спасибо за внимание!

Разумно ввести функции и структуры данных. Посмотрите вот такой вариант.
<code>
game_result={
    'WIN':3,
    'LOSE':0,
    'DRAW':1
}

def get_result(a):
    if a[1]>a[3]:
        return 'WIN','LOSE'
    if a[1]==a[3]:
        return 'DRAW','DRAW'
    if a[1]<a[3]:
        return 'LOSE','WIN'

n = int(input())
lst = [input().split(';') for i in range(n)]
res = {}
data={'games':1, 'WIN':0,'DRAW':0,'LOSE':0,'score':0}
for x in lst:
    r1,r2=get_result(x)
    if x[0] not in res.keys():
        res[x[0]]=data.copy()
    else:
        res[x[0]]['games']+=1
    if x[2] not in res.keys():
        res[x[2]]=data.copy()
    else:
        res[x[2]]['games']+=1
    res[x[0]][r1]+=1
    res[x[0]]['score']+=game_result[r1]
    res[x[2]][r2]+=1
    res[x[2]]['score']+=game_result[r2]

for x in res:
    print(x,res[x])
</code>


Как получить координаты мыши в обработчике события [закрыт]

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

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

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

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

Как при событии(bind) в функции-исполнителе взять координаты курсора мышки на момент события(x и y)?

В обработчик события передается объект event, в нем находится информация о событии, которое произошло, в том числе координаты мыши:

import tkinter as tk

root = tk.Tk()

def test(event):
    print(event)
    print(event.x, event.y)

root.bind('<Button-1>', test)

root.mainloop()

Пример вывода:

<ButtonPress event state=Mod2 num=1 x=167 y=79>
167 79
<ButtonPress event state=Mod2 num=1 x=152 y=142>
152 142
<ButtonPress event state=Mod2 num=1 x=110 y=163>
110 163
<ButtonPress event state=Mod2 num=1 x=94 y=100>
94 100
<ButtonPress event state=Mod2 num=1 x=158 y=102>
158 102
<ButtonPress event state=Mod2 num=1 x=140 y=169>
140 169


Закрытая программа остаётся в процессах
После сборки скрипта в exe с помощью pyinstaller я закрываю получившуюся программу, но она остаётся в процессах и её можно закрыть уже через диспетчер задач.

pyinstaller -F -w -i=D:/icon.ico D:/keywords_and_sites.py

Судя по комментариям вам может помочь эта строка:

threading.Thread(target=progress, daemon=True).start()