Как здесь сделать проверку, что нельзя делить на 0 (ноль)
Как здесь сделать проверку, что нельзя делить на 0 (ноль)
def add_fuctions(self):
self.Button0.clicked.connect(lambda: self.write_number(self.Button0.text()))
self.Button1.clicked.connect(lambda: self.write_number(self.Button1.text()))
self.Button2.clicked.connect(lambda: self.write_number(self.Button2.text()))
self.Button3.clicked.connect(lambda: self.write_number(self.Button3.text()))
self.Button4.clicked.connect(lambda: self.write_number(self.Button4.text()))
self.Button5.clicked.connect(lambda: self.write_number(self.Button5.text()))
self.Button6.clicked.connect(lambda: self.write_number(self.Button6.text()))
self.Button7.clicked.connect(lambda: self.write_number(self.Button7.text()))
self.Button8.clicked.connect(lambda: self.write_number(self.Button8.text()))
self.Button9.clicked.connect(lambda: self.write_number(self.Button9.text()))
self.Button_min.clicked.connect(lambda: self.write_number(self.Button_min.text()))
self.Button_pius.clicked.connect(lambda: self.write_number(self.Button_pius.text()))
self.Button_umn.clicked.connect(lambda: self.write_number(self.Button_umn.text()))
self.Button_dil.clicked.connect(lambda: self.write_number(self.Button_dil.text()))
self.Button_rav.clicked.connect(self.results)
self.Button_del.clicked.connect(self.delete)
def delete(self):
self.label_result.setText("0")
def write_number(self, number):
if self.label_result.text() == "0" or self.is_equal:
self.label_result.setText(number)
self.is_equal = False
self.Button_rav.setEnabled(True)
else:
self.label_result.setText(self.label_result.text() + number)
self.is_equal = False
self.Button_rav.setEnabled(True)
def results(self):
res = eval(self.label_result.text())
self.label_result.setText("Результат: " + str(res))
self.is_equal = True
self.Button_rav.setEnabled(False)
Ответы (3 шт):
Автор решения: Илья Стешенко
→ Ссылка
почитай про исключения.
def results(self):
try:
res = eval(self.label_result.text())
except ZeroDivisionError: #ZeroDivisionError - ошибка деления на ноль
res = 0
self.label_result.setText("Результат: " + str(res))
self.is_equal = True
self.Button_rav.setEnabled(False)
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(361, 588)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.outputLabel = QtWidgets.QLabel(self.centralwidget)
self.outputLabel.setGeometry(QtCore.QRect(10, 10, 341, 91))
font = QtGui.QFont()
font.setPointSize(36)
self.outputLabel.setFont(font)
self.outputLabel.setFrameShape(QtWidgets.QFrame.Box)
self.outputLabel.setFrameShadow(QtWidgets.QFrame.Raised)
self.outputLabel.setLineWidth(2)
self.outputLabel.setAlignment(QtCore.Qt.AlignRight |
QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.outputLabel.setObjectName("outputLabel")
self.percentButton = QtWidgets.QPushButton(self.centralwidget)
self.percentButton.setGeometry(QtCore.QRect(10, 110, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.percentButton.setFont(font)
self.percentButton.setObjectName("percentButton")
self.cButton = QtWidgets.QPushButton(self.centralwidget)
self.cButton.setGeometry(QtCore.QRect(100, 110, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.cButton.setFont(font)
self.cButton.setObjectName("cButton")
self.arrowButton = QtWidgets.QPushButton(self.centralwidget)
self.arrowButton.setGeometry(QtCore.QRect(190, 110, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.arrowButton.setFont(font)
self.arrowButton.setObjectName("arrowButton")
self.divideButton = QtWidgets.QPushButton(self.centralwidget)
self.divideButton.setGeometry(QtCore.QRect(275, 110, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.divideButton.setFont(font)
self.divideButton.setObjectName("divideButton")
self.multiplyButton = QtWidgets.QPushButton(self.centralwidget)
self.multiplyButton.setGeometry(QtCore.QRect(275, 200, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.multiplyButton.setFont(font)
self.multiplyButton.setObjectName("multiplyButton")
self.nineButton = QtWidgets.QPushButton(self.centralwidget)
self.nineButton.setGeometry(QtCore.QRect(190, 200, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.nineButton.setFont(font)
self.nineButton.setObjectName("nineButton")
self.sevenButton = QtWidgets.QPushButton(self.centralwidget)
self.sevenButton.setGeometry(QtCore.QRect(10, 200, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.sevenButton.setFont(font)
self.sevenButton.setObjectName("sevenButton")
self.eightButton = QtWidgets.QPushButton(self.centralwidget)
self.eightButton.setGeometry(QtCore.QRect(100, 200, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.eightButton.setFont(font)
self.eightButton.setObjectName("eightButton")
self.minusButton = QtWidgets.QPushButton(self.centralwidget)
self.minusButton.setGeometry(QtCore.QRect(275, 290, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.minusButton.setFont(font)
self.minusButton.setObjectName("minusButton")
self.sixButton = QtWidgets.QPushButton(self.centralwidget)
self.sixButton.setGeometry(QtCore.QRect(190, 290, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.sixButton.setFont(font)
self.sixButton.setObjectName("sixButton")
self.fourButton = QtWidgets.QPushButton(self.centralwidget)
self.fourButton.setGeometry(QtCore.QRect(10, 290, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.fourButton.setFont(font)
self.fourButton.setObjectName("fourButton")
self.fiveButton = QtWidgets.QPushButton(self.centralwidget)
self.fiveButton.setGeometry(QtCore.QRect(100, 290, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.fiveButton.setFont(font)
self.fiveButton.setObjectName("fiveButton")
self.addButton = QtWidgets.QPushButton(self.centralwidget)
self.addButton.setGeometry(QtCore.QRect(275, 380, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.addButton.setFont(font)
self.addButton.setObjectName("addButton")
self.threeButton = QtWidgets.QPushButton(self.centralwidget)
self.threeButton.setGeometry(QtCore.QRect(190, 380, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.threeButton.setFont(font)
self.threeButton.setObjectName("threeButton")
self.oneButton = QtWidgets.QPushButton(self.centralwidget)
self.oneButton.setGeometry(QtCore.QRect(10, 380, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.oneButton.setFont(font)
self.oneButton.setObjectName("oneButton")
self.twoButton = QtWidgets.QPushButton(self.centralwidget)
self.twoButton.setGeometry(QtCore.QRect(100, 380, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.twoButton.setFont(font)
self.twoButton.setObjectName("twoButton")
self.equalButton = QtWidgets.QPushButton(self.centralwidget)
self.equalButton.setGeometry(QtCore.QRect(275, 470, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.equalButton.setFont(font)
self.equalButton.setObjectName("equalButton")
self.decimalButton = QtWidgets.QPushButton(self.centralwidget)
self.decimalButton.setGeometry(QtCore.QRect(190, 470, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.decimalButton.setFont(font)
self.decimalButton.setObjectName("decimalButton")
self.plusminusButton = QtWidgets.QPushButton(self.centralwidget)
self.plusminusButton.setGeometry(QtCore.QRect(10, 470, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.plusminusButton.setFont(font)
self.plusminusButton.setObjectName("plusminusButton")
self.zeroButton = QtWidgets.QPushButton(self.centralwidget)
self.zeroButton.setGeometry(QtCore.QRect(100, 470, 75, 75))
font = QtGui.QFont()
font.setPointSize(26)
self.zeroButton.setFont(font)
self.zeroButton.setObjectName("zeroButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 361, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Calculator"))
self.outputLabel.setText(_translate("MainWindow", "0"))
self.percentButton.setText(_translate("MainWindow", "%"))
self.cButton.setText(_translate("MainWindow", "C"))
self.arrowButton.setText(_translate("MainWindow", "<<"))
self.divideButton.setText(_translate("MainWindow", "/"))
self.multiplyButton.setText(_translate("MainWindow", "x"))
self.nineButton.setText(_translate("MainWindow", "9"))
self.sevenButton.setText(_translate("MainWindow", "7"))
self.eightButton.setText(_translate("MainWindow", "8"))
self.minusButton.setText(_translate("MainWindow", "-"))
self.sixButton.setText(_translate("MainWindow", "6"))
self.fourButton.setText(_translate("MainWindow", "4"))
self.fiveButton.setText(_translate("MainWindow", "5"))
self.addButton.setText(_translate("MainWindow", "+"))
self.threeButton.setText(_translate("MainWindow", "3"))
self.oneButton.setText(_translate("MainWindow", "1"))
self.twoButton.setText(_translate("MainWindow", "2"))
self.equalButton.setText(_translate("MainWindow", "="))
self.decimalButton.setText(_translate("MainWindow", "."))
self.plusminusButton.setText(_translate("MainWindow", "+/-"))
self.zeroButton.setText(_translate("MainWindow", "0"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.percentButton.clicked.connect(lambda: self.press_it("%"))
self.cButton.clicked.connect(lambda: self.press_it("C"))
self.arrowButton.clicked.connect(lambda: self.remove_it())
self.divideButton.clicked.connect(lambda: self.press_it("/"))
self.multiplyButton.clicked.connect(lambda: self.press_it("*"))
self.minusButton.clicked.connect(lambda: self.press_it("-"))
self.addButton.clicked.connect(lambda: self.press_it("+"))
self.nineButton.clicked.connect(lambda: self.press_it("9"))
self.eightButton.clicked.connect(lambda: self.press_it("8"))
self.sevenButton.clicked.connect(lambda: self.press_it("7"))
self.sixButton.clicked.connect(lambda: self.press_it("6"))
self.fiveButton.clicked.connect(lambda: self.press_it("5"))
self.fourButton.clicked.connect(lambda: self.press_it("4"))
self.threeButton.clicked.connect(lambda: self.press_it("3"))
self.twoButton.clicked.connect(lambda: self.press_it("2"))
self.oneButton.clicked.connect(lambda: self.press_it("1"))
self.zeroButton.clicked.connect(lambda: self.press_it("0"))
self.equalButton.clicked.connect(lambda: self.math_it())
self.decimalButton.clicked.connect(lambda: self.dot_it())
self.plusminusButton.clicked.connect(lambda: self.plus_minus_it())
# Удалить символ
def remove_it(self):
# Возьмите то, что уже есть на экране
screen = self.outputLabel.text()
# Удалить последний элемент в строке
screen = screen[:-1]
# Вывод обратно на экран
self.outputLabel.setText(screen)
# Математика
def math_it(self):
screen = self.outputLabel.text()
try:
# Делать математику
answer = eval(screen)
# Вывод ответа на экран
self.outputLabel.setText(str(answer))
except:
# Выводить ошибку на экран
self.outputLabel.setText("ERROR")
# Изменение с положительного / отрицательного
def plus_minus_it(self):
screen = self.outputLabel.text()
if "-" in screen:
self.outputLabel.setText(screen.replace("-", ""))
else:
self.outputLabel.setText(f'-{screen}')
# Добавить десятичную дробь
def dot_it(self):
screen = self.outputLabel.text()
if screen[-1] == ".":
pass
else:
self.outputLabel.setText(f'{screen}.')
def press_it(self, pressed):
if pressed == "C":
self.outputLabel.setText("0")
else:
# Проверяем, начинается ли с 0 и удаляем 0
if self.outputLabel.text() == "0":
self.outputLabel.setText("")
# Связываем нажатую кнопку с тем, что уже было
self.outputLabel.setText(f'{self.outputLabel.text()}{pressed}')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Автор решения: vadim vaduxa
→ Ссылка
в данном случае вариант хуже чем try/except, но иногда удобнее использовать contextlib.suppress
from contextlib import suppress
res = 'нельзя делить на 0 (ноль)'
with suppress(ZeroDivisionError):
res = 1 / 0
print(res)
