Загрузка данных


import sys
from math import gcd
from functools import reduce

from PyQt6.QtWidgets import QApplication, QMainWindow

from percent import Ui_MainWindow


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # По умолчанию выбрано 3 числа
        self.ui.radio3.setChecked(True)

        # Подключение кнопок
        self.ui.calcButton.clicked.connect(self.percent_of_number)
        self.ui.percentXYButton.clicked.connect(self.x_from_y)
        self.ui.addButton.clicked.connect(self.add_percent)
        self.ui.subButton.clicked.connect(self.sub_percent)
        self.ui.calculateGcdLcmButton.clicked.connect(self.gcd_lcm)

    # 1. Нахождение процента от числа
    def percent_of_number(self):
        try:
            percent = float(self.ui.percentEdit.text())
            number = float(self.ui.numberEdit.text())

            result = number * percent / 100

            self.ui.resultLabel.setText(
                f"Результат: {result}"
            )

        except ValueError:
            self.ui.resultLabel.setText(
                "Ошибка ввода"
            )

    # 2. Сколько процентов составляет X от Y
    def x_from_y(self):
        try:
            x = float(self.ui.xEdit.text())
            y = float(self.ui.yEdit.text())

            result = x / y * 100

            self.ui.resultXYButton.setText(
                f"Результат: {result:.2f}%"
            )

        except ValueError:
            self.ui.resultXYButton.setText(
                "Ошибка ввода"
            )

    # 3. Прибавление процента
    def add_percent(self):
        try:
            number = float(self.ui.addNumberEdit.text())
            percent = float(self.ui.addPercentEdit.text())

            result = number + number * percent / 100

            self.ui.addResultLabel.setText(
                f"Результат: {result}"
            )

        except ValueError:
            self.ui.addResultLabel.setText(
                "Ошибка ввода"
            )

    # 4. Вычитание процента
    def sub_percent(self):
        try:
            number = float(self.ui.subNumberEdit.text())
            percent = float(self.ui.subPercentEdit.text())

            result = number - number * percent / 100

            self.ui.subResultLabel.setText(
                f"Результат: {result}"
            )

        except ValueError:
            self.ui.subResultLabel.setText(
                "Ошибка ввода"
            )

    # 5. НОД и НОК
    def gcd_lcm(self):
        try:
            numbers = [
                int(self.ui.num1Edit.text()),
                int(self.ui.num2Edit.text())
            ]

            if self.ui.radio3.isChecked():
                numbers.append(
                    int(self.ui.num3Edit.text())
                )

            elif self.ui.radio4.isChecked():
                numbers.append(
                    int(self.ui.num3Edit.text())
                )
                numbers.append(
                    int(self.ui.num4Edit.text())
                )

            nod = reduce(gcd, numbers)

            nok = numbers[0]
            for num in numbers[1:]:
                nok = nok * num // gcd(nok, num)

            self.ui.resultGcdLcmLabel.setText(
                f"НОД = {nod}\nНОК = {nok}"
            )

        except ValueError:
            self.ui.resultGcdLcmLabel.setText(
                "Ошибка ввода"
            )


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())