Разработка программного продукта для решения прикладных задач. Тема курсовой работы Разработка программного продукта для решения прикладных задач
Скачать 1.19 Mb.
|
Задание №2 from PyQt5.QtWidgets import * import gui import sys """ Данная программа служит для работы С данными о клиентах и их банковских счетах. Автор: Брянцев Вячеслав Павлович Дата написания: 19.05.2021 """ class Exercise(QMainWindow, gui.Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.setFixedSize(640, 320) # Подключаем кнопки к функциям self.clear_btn.clicked.connect(self.clear) self.calculate_btn.clicked.connect(self.calculate) def clear(self): self.line_edit.setText('') self.text_edit.setPlainText('') def calculate(self): # Счётчик общего количества комманд. total_commands = 0 # Переменная, которая получает команды из основного поля ввода. cmd = self.line_edit.text().split(' ') # Переменная, содержащая все возможные для исполнения команды cmd_list = ['DEPOSIT', 'WITHDRAW', 'BALANCE', 'TRANSFER', 'INCOME'] # Проходим по полю ввода в поисках команд для исполнения. for i in range(len(cmd)): # Если элемент [i] содержится в списке команд: if cmd[i] in cmd_list: if total_commands < 20: # Если элемент [i] равен DEPOSIT if cmd[i] == cmd_list[0]: # Увеличиваем значение счётчика команд на 1 total_commands += 1 # Задаём значения переменных. Имя = первое слово после команды, сумма - второе. name_1 = cmd[i+1] sum_1 = int(cmd[i+2]) # Открываем файл для редактирования. with open('Clients.txt', 'r+') as f: # Переменная, содержащая в себе весь текст из документа, разделённый по пробелам. text_clients = f.read().split() # Проверяем наличие имени в text_clients if name_1 in text_clients: # С помощью данной переменной будем обновлять текст в документе. text_to_update = '' for h in range(len(text_clients)): if text_clients[h] == name_1: balance = int(text_clients[h+1]) + sum_1 text_clients[h+1] = str(balance) # Добавляем данные в text_to_update. После каждого второго элемента # добавляем строку for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' f.seek(0) f.write(text_to_update) else: text_to_update = name_1 + " " + str(sum_1) f.seek(0, 2) f.write(text_to_update) # Если элемент [i] равен WITHDRAW elif cmd[i] == cmd_list[1]: # Увеличиваем значение счётчика команд на 1 total_commands += 1 # Задаём значения переменных. Имя = первое слово после команды, сумма - второе. name_1 = cmd[i + 1] sum_1 = int(cmd[i + 2]) # Открываем файл для редактирования. with open('Clients.txt', 'r+') as f: # Переменная, содержащая в себе весь текст из документа, разделённый по пробелам. # text = f.read() text_clients = f.read().split() # Проверяем наличие имени в text_clients if name_1 in text_clients: # С помощью данной переменной будем обновлять текст в документе. text_to_update = '' for h in range(len(text_clients)): if text_clients[h] == name_1: balance = int(text_clients[h + 1]) - sum_1 print(balance) text_clients[h + 1] = str(balance) # Добавляем данные в text_to_update. После каждого второго элемента # добавляем строку for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' f.seek(0) f.write(text_to_update) else: text_to_update = name_1 + " " + str(sum_1) f.seek(0, 2) f.write(text_to_update) # Если элемент [i] равен BALANCE: elif cmd[i] == cmd_list[2]: total_commands += 1 # Открываем файл для чтения. with open('Clients.txt') as f: try: # Если следующий элемент = команда, то выводим баланс всех клиентов. if cmd[i+1] in cmd_list: text = f.read() self.text_edit.setPlainText(text) # Иначе - ищем имя клиента в файле и выводим его на экран вместе с балансом else: text = f.read() text = text.split() if cmd[i+1] in text: name_1 = cmd[i+1] for h in range(len(text)): if text[h] == name_1: text_to_show = text[h] + ' ' + text[h+1] self.text_edit.setPlainText(text_to_show) # Если не находит имя клиента в списке, то выводит NO CLIENT. else: self.text_edit.setPlainText('NO CLIENT') # Если список кончился, вылезает ошибка IndexError. # Это значит, что команда является последней в списке. # Поэтому выводим список всех клиентов except IndexError: text = f.read() self.text_edit.setPlainText(text) # Если элемент [i] равен TRANSFER elif cmd[i] == cmd_list[3]: total_commands += 1 name_1 = cmd[i+1] name_2 = cmd[i+2] sum_1 = int(cmd[i+3]) with open('Clients.txt', 'r+') as f: # Переменная, содержащая в себе весь текст из документа, разделённый по пробелам. text_clients = f.read().split() # Проверяем наличие имени 1 клиента в text_clients if name_1 in text_clients and name_2 in text_clients: text_to_update = '' for h in range(len(text_clients)): if text_clients[h] == name_1: balance_1 = int(text_clients[h+1]) - sum_1 text_clients[h+1] = str(balance_1) elif text_clients[h] == name_2: balance_2 = int(text_clients[h+1]) + sum_1 text_clients[h+1] = str(balance_2) # Добавляем данные в text_to_update. После каждого второго элемента добавляем строку for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' f.seek(0) f.write(text_to_update) elif name_1 not in text_clients and name_2 in text_clients: text_to_update = '' balance_1 = str(-sum_1) for h in range(len(text_clients)): if text_clients[h] == name_2: balance_2 = int(text_clients[h+1]) + sum_1 text_clients[h+1] = str(balance_2) for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' text_to_update += name_1 + " " + balance_1 f.seek(0) f.write(text_to_update) elif name_2 not in text_clients and name_1 in text_clients: text_to_update = '' balance_2 = str(sum_1) for h in range(len(text_clients)): if text_clients[h] == name_1: balance_1 = int(text_clients[h+1]) - sum_1 text_clients[h+1] = str(balance_1) for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' text_to_update += name_2 + " " + balance_2 f.seek(0) f.write(text_to_update) elif name_1 not in text_clients and name_2 not in text_clients: text_to_update = '' balance_1 = str(-sum_1) balance_2 = str(sum_1) for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' text_to_update += name_1 + " " + balance_1 + '\n' text_to_update += name_2 + " " + balance_2 f.seek(0) f.write(text_to_update) # Если элемент [i] равен INCOME elif cmd[i] == cmd_list[4]: total_commands += 1 sum_1 = int(cmd[i+1]) sum_1 = sum_1 / 100 + 1 with open('Clients.txt', 'r+') as f: # Переменная, содержащая в себе весь текст из документа, разделённый по пробелам. text_clients = f.read().split() text_to_update = '' # Каждый второй элемент - сумма на счёте клиента, поэтому перебираем их. for s in range(1, len(text_clients), 2): if int(text_clients[s]) > 0: text_clients[s] = str(int(int(text_clients[s]) * sum_1)) for d in range(len(text_clients)): text_to_update = text_to_update + text_clients[d] + " " if d % 2 != 0: text_to_update = text_to_update + '\n' f.seek(0) f.write(text_to_update) else: pass if __name__ == '__main__': app = QApplication(sys.argv) form = Exercise() form.show() app.exec() Задание №3 from PyQt5.QtWidgets import * import gui import math import sys """ Данная программа - калькулятор с расширенным инженерным функционалом Возможностью построчного вывода команд Пятью слотами памяти Автор: Брянцев Вячеслав Павлович Дата написания: 05.05.2021 """ # Задаём начальные значения для переменных num = 0.0 newNum = 0.0 sumIt = 0.0 sumAll = 0.0 operator = "" temp_str = '' memory_1 = '0' memory_2 = '0' memory_3 = '0' memory_4 = '0' memory_5 = '0' digital_display_on = True opVar = False class Calculator(QMainWindow, gui.Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.setFixedSize(319, 331) self.setWindowTitle('Калькулятор - обычный режим') all_memory_clear_buttons = [self.memory_clear_1, self.memory_clear_2, self.memory_clear_3, self.memory_clear_4, self.memory_clear_5] all_memory_save_buttons = [self.memory_save_1, self.memory_save_2, self.memory_save_3, self.memory_save_4, self.memory_save_5] all_memory_read_buttons = [self.memory_read_1, self.memory_read_2, self.memory_read_3, self.memory_read_4, self.memory_read_5] all_memory_plus_buttons = [self.memory_plus_1, self.memory_plus_2, self.memory_plus_3, self.memory_plus_4, self.memory_plus_5] all_memory_minus_buttons = [self.memory_minus_1, self.memory_minus_2, self.memory_minus_3, self.memory_minus_4, self.memory_minus_5] for i in all_memory_clear_buttons: i.clicked.connect(self.all_memory_clear) for i in all_memory_save_buttons: i.clicked.connect(self.all_memory_save) for i in all_memory_read_buttons: i.clicked.connect(self.all_memory_read) for i in all_memory_plus_buttons: i.clicked.connect(self.all_memory_plus) for i in all_memory_minus_buttons: i.clicked.connect(self.all_memory_minus) # Списки с кнопками. Нужны, чтобы подключить их к функциям. nums = [self.zero, self.one, self.two, self.three, self.four, self.five, self.six, self.seven, self.eight, self.nine] operators = [self.ce, self.c, self.plus, self.minus, self.multiply, self.divide, self.equals, self.times] others = [self.squared, self.fraction, self.percent, self.point, self.root, self.switch, self.factorial, self.asina, self.acosa, self.atga, self.log_xy, self.expansion, self.ce, self.c, self.digital_display] others_funcs = [self.squared_f, self.fraction_f, self.percent_f, self.point_f, self.root_f, self.switch_f, self.factorial_f, self.asina_f, self.acosa_f, self.atga_f, self.log_xy_f, self.expansion_f, self.ce_f, self.c_f, self.digital_display_f] # Циклы, которые подключают кнопки к функциям. for i in nums: i.clicked.connect(self.num_f) for i in operators[2:]: i.clicked.connect(self.operator) for i in range(len(others)): others[i].clicked.connect(others_funcs[i]) def num_f(self): global num global newNum global opVar global digital_display_on global temp_str sender = self.sender() newNum = int(sender.text()) setnum = str(newNum) if opVar is False: self.main_calculator_window.setPlainText(self.main_calculator_window.toPlainText() + setnum) else: if digital_display_on: self.main_calculator_window.append(setnum) else: self.main_calculator_window.setPlainText(setnum) opVar = False def equal(self): global sumIt global sumAll global num global newNum global operator global opVar global digital_display_on sumIt = 0 if digital_display_on: try: dd_num = self.main_calculator_window.toPlainText().split('\n') dd_num = dd_num[-3:] num = dd_num[0] operator = dd_num[1] newNum = dd_num[-1] except IndexError: pass else: newNum = self.main_calculator_window.toPlainText() try: if operator == "+": sumAll = float(num) + float(newNum) elif operator == "-": sumAll = float(num) - float(newNum) elif operator == "*": sumAll = float(num) * float(newNum) elif operator == "/": if float(newNum) == 0.0: sumAll = 'Ошибка! Попытка деления на 0!' else: sumAll = float(num) / float(newNum) elif operator == "x^y": sumAll = float(num) ** float(newNum) if digital_display_on: self.main_calculator_window.append('=' + '\n' + str(sumAll)) else: self.main_calculator_window.setPlainText(str(sumAll)) except ValueError: pass def operator(self): global sumIt global num global opVar global operator global digital_display_on sumIt += 1 if sumIt > 1: self.equal() if digital_display_on: if self.main_calculator_window.toPlainText() == '': pass else: num = self.main_calculator_window.toPlainText() sender = self.sender() operator = sender.text() if digital_display_on: if operator != '=': self.main_calculator_window.append(operator) opVar = True def all_memory_clear(self): global memory_1, memory_2, memory_3, memory_4, memory_5 if self.sender() == self.findChild(QPushButton, "memory_clear_1"): memory_1 = '0' elif self.sender() == self.findChild(QPushButton, "memory_clear_2"): memory_2 = '0' elif self.sender() == self.findChild(QPushButton, "memory_clear_3"): memory_3 = '0' elif self.sender() == self.findChild(QPushButton, "memory_clear_4"): memory_4 = '0' elif self.sender() == self.findChild(QPushButton, "memory_clear_5"): memory_5 = '0' def all_memory_save(self): global memory_1, memory_2, memory_3, memory_4, memory_5 if self.sender() == self.findChild(QPushButton, "memory_save_1"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_1 = dd_num[-1] else: memory_1 = self.main_calculator_window.toPlainText() elif self.sender() == self.findChild(QPushButton, "memory_save_2"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_2 = dd_num[-1] else: memory_2 = self.main_calculator_window.toPlainText() elif self.sender() == self.findChild(QPushButton, "memory_save_3"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_3 = dd_num[-1] else: memory_3 = self.main_calculator_window.toPlainText() elif self.sender() == self.findChild(QPushButton, "memory_save_4"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_4 = dd_num[-1] else: memory_4 = self.main_calculator_window.toPlainText() elif self.sender() == self.findChild(QPushButton, "memory_save_5"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_5 = dd_num[-1] else: memory_5 = self.main_calculator_window.toPlainText() def all_memory_read(self): global digital_display_on global memory_1, memory_2, memory_3, memory_4, memory_5 if self.sender() == self.findChild(QPushButton, "memory_read_1"): if digital_display_on: self.main_calculator_window.append(memory_1) else: self.main_calculator_window.setPlainText(memory_1) elif self.sender() == self.findChild(QPushButton, "memory_read_2"): if digital_display_on: self.main_calculator_window.append(memory_2) else: self.main_calculator_window.setPlainText(memory_2) elif self.sender() == self.findChild(QPushButton, "memory_read_3"): if digital_display_on: self.main_calculator_window.append(memory_3) else: self.main_calculator_window.setPlainText(memory_3) elif self.sender() == self.findChild(QPushButton, "memory_read_4"): if digital_display_on: self.main_calculator_window.append(memory_4) else: self.main_calculator_window.setPlainText(memory_4) elif self.sender() == self.findChild(QPushButton, "memory_read_5"): if digital_display_on: self.main_calculator_window.append(memory_5) else: self.main_calculator_window.setPlainText(memory_5) def all_memory_plus(self): global memory_1, memory_2, memory_3, memory_4, memory_5 global digital_display_on if self.main_calculator_window.toPlainText() != '': if self.sender() == self.findChild(QPushButton, "memory_plus_1"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_1 = str(float(memory_1) + float(dd_num[-1])) else: memory_1 = str(float(memory_1) + float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_plus_2"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_2 = str(float(memory_2) + float(dd_num[-1])) else: memory_2 = str(float(memory_2) + float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_plus_3"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_3 = str(float(memory_3) + float(dd_num[-1])) else: memory_3 = str(float(memory_3) + float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_plus_4"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_4 = str(float(memory_4) + float(dd_num[-1])) else: memory_4 = str(float(memory_4) + float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_plus_5"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_5 = str(float(memory_5) + float(dd_num[-1])) else: memory_5 = str(float(memory_5) + float(self.main_calculator_window.toPlainText())) else: pass def all_memory_minus(self): global memory_1, memory_2, memory_3, memory_4, memory_5 if self.main_calculator_window.toPlainText() != '': if self.sender() == self.findChild(QPushButton, "memory_minus_1"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_1 = str(float(memory_1) - float(dd_num[-1])) else: memory_1 = str(float(memory_1) - float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_minus_2"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_2 = str(float(memory_2) - float(dd_num[-1])) else: memory_2 = str(float(memory_2) - float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_minus_3"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_3 = str(float(memory_3) - float(dd_num[-1])) else: memory_3 = str(float(memory_3) - float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_minus_4"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_4 = str(float(memory_4) - float(dd_num[-1])) else: memory_4 = str(float(memory_4) - float(self.main_calculator_window.toPlainText())) elif self.sender() == self.findChild(QPushButton, "memory_minus_5"): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') memory_5 = str(float(memory_5) - float(dd_num[-1])) else: memory_5 = str(float(memory_5) - float(self.main_calculator_window.toPlainText())) else: pass # Функция для включения расширенного режима работы калькулятора # Расширяет окно, делая доступными для нажатия дополнительные кнопки def expansion_f(self): w = self.size().width() h = self.main_calculator_window.size().height() if h == 20: h_window = 233 else: h_window = 331 if w == 620: self.setFixedSize(319, h_window) self.setWindowTitle('Калькулятор - обычный режим') elif w == 319: self.setFixedSize(620, 331) self.setWindowTitle('Калькулятор - расширенный режим') # Функция расширенного режима цифрового дисплея def digital_display_f(self): global digital_display_on w_window = self.size().width() h = self.main_calculator_window.size().height() w = self.main_calculator_window.size().width() if h == 125: digital_display_on = False self.main_calculator_window.setFixedSize(w, 20) self.main_calculator_window.move(10, 10) self.widget_calculator.move(10, 35) if w_window == 319: h_window = 233 else: h_window = 331 self.setFixedSize(w_window, h_window) if h == 20: digital_display_on = True self.main_calculator_window.setFixedSize(w, 125) self.main_calculator_window.move(10, 10) self.widget_calculator.move(10, 140) self.setFixedSize(w_window, 331) # Функция смены знака числа def switch_f(self): global num global newNum global digital_display_on global operator if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') dd_num[-1] = -float(dd_num[-1]) self.c_f() for i in range(len(dd_num)): self.main_calculator_window.append(str(dd_num[i])) else: num = float(self.main_calculator_window.toPlainText()) num = -num self.main_calculator_window.setPlainText(str(num)) # Функция очистки одного символа из текстового поля калькулятора def ce_f(self): ce_text = self.main_calculator_window.toPlainText() self.main_calculator_window.setPlainText(ce_text[0:-1]) # Функция полной очистки текстового поля калькулятора def c_f(self): global num global newNum global sumAll global operator global digital_display_on self.main_calculator_window.clear() num = 0.0 newNum = 0.0 sumAll = 0.0 operator = "" # Функция возведения в квадрат def squared_f(self): global num global digital_display_on if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') dd_num[-1] = int(dd_num[-1]) ** 2 self.main_calculator_window.append('x²' + '\n' + '=' + '\n' + str(dd_num[-1])) else: num = float(self.main_calculator_window.toPlainText()) num = num ** 2 self.main_calculator_window.setPlainText(str(num)) # Функция извлечения корня из числа def root_f(self): global num global digital_display_on global operator if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') old_num = dd_num[-1] dd_num[-1] = float(dd_num[-1]) ** 0.5 self.main_calculator_window.append(('√' + old_num + '\n' + '=' + '\n' + str(dd_num[-1]))) else: num = float(self.main_calculator_window.toPlainText()) if num < 0.0: self.main_calculator_window.setPlainText('Извлечение корня из отрицательного числа!') else: num = num ** 0.5 self.main_calculator_window.setPlainText(str(num)) # Функция по "переворачиванию" числа. (3 -> 1/3; 1/3 -> 3) def fraction_f(self): global num global digital_display_on if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') dd_num[-1] = 1 / float(dd_num[-1]) self.c_f() for i in range(len(dd_num)): self.main_calculator_window.append(str(dd_num[i])) else: num = float(self.main_calculator_window.toPlainText()) num = 1 / num self.main_calculator_window.setPlainText(str(num)) # Перевод полученного числа сначала в тип float, затем в int # Решает проблему, когда пользователь вводит нецелочисленное число, округляя его и делая целочисленным def factorial_f(self): global num global digital_display_on if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') old_num = dd_num[-1] dd_num[-1] = math.factorial(int(float(dd_num[-1]))) self.main_calculator_window.append(old_num + '!' + '\n' + '=' + '\n' + str(dd_num[-1])) else: num = int(float(self.main_calculator_window.toPlainText())) num = math.factorial(num) self.main_calculator_window.setPlainText(str(num)) # Функция по вычислению арксинуса. def asina_f(self): global num global digital_display_on # Защита на тот случай, если в строке будет присутствовать что-то помимо цифр. try: if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') if float(dd_num[-1]) < 0 or float(dd_num[-1]) > 1: self.main_calculator_window.append('Число не может быть ниже нуля и больше единицы!') else: old_num = dd_num[-1] dd_num[-1] = math.asin(float(dd_num[-1])) self.main_calculator_window.append('asin(' + old_num + ')' + '\n' + '=' + '\n' + str(dd_num[-1])) else: num = float(self.main_calculator_window.toPlainText()) if num > 1 or num < 0: self.main_calculator_window.setPlainText('Число не может быть ниже нуля и больше единицы!') else: num = math.asin(num) self.main_calculator_window.setPlainText(str(num)) except ValueError: pass # Функция по вычислению арккосинуса. def acosa_f(self): global num global digital_display_on try: if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') if float(dd_num[-1]) < 0 or float(dd_num[-1]) > 1: self.main_calculator_window.append('Число не может быть ниже нуля и больше единицы!') else: old_num = dd_num[-1] dd_num[-1] = math.acos(float(dd_num[-1])) self.main_calculator_window.append('acos(' + old_num + ')' + '\n' + '=' + '\n' + str(dd_num[-1])) else: num = float(self.main_calculator_window.toPlainText()) if num > 1 or num < 0: self.main_calculator_window.setPlainText('Число не может быть ниже нуля и больше единицы!') else: num = math.acos(num) self.main_calculator_window.setPlainText(str(num)) except ValueError: pass # Функция по вычислению арктангенса. def atga_f(self): global num global digital_display_on try: if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') if int(dd_num[-1]) < 0: self.main_calculator_window.append('Введёное число ниже нуля!') else: old_num = dd_num[-1] dd_num[-1] = math.atan(int(dd_num[-1])) self.main_calculator_window.append('atga(' + old_num + ')' + '\n' + '=' + '\n' + str(dd_num[-1])) else: num = int(self.main_calculator_window.toPlainText()) if int(num) < 0: self.main_calculator_window.setPlainText('Введёное число ниже нуля!') else: num = math.atan(num) self.main_calculator_window.setPlainText(str(num)) except ValueError: pass # Функция для вычисления логарифма (между двумя числами требуется ввести любой символ-оператор) def log_xy_f(self): global newNum global num global sumAll global digital_display_on dd_num = self.main_calculator_window.toPlainText().split('\n') if digital_display_on: if len(dd_num) >= 3: newNum = float(dd_num[-1]) num = float(dd_num[-3]) else: newNum = float(dd_num[-1]) # Вычислить логарифм по Х Y, иначе - вычислить натуральный логарифм. Требует оператор между двумя числами. if num != 0.0: if float(newNum) < 0 or float(num) < 0: self.main_calculator_window.append('Введёное число(числа) меньше нуля.') pass else: if digital_display_on: dd_log = math.log(float(dd_num[-3]), float(dd_num[-1])) x = str(dd_num[-3]) y = str(dd_num[-1]) dd_num[-2] = f"log {x} {y}" self.c_f() # Очищаем экран. for i in range(len(dd_num)): self.main_calculator_window.append(str(dd_num[i])) self.main_calculator_window.append('=' + '\n' + str(dd_log)) else: newNum = float(self.main_calculator_window.toPlainText()) num = float(num) newNum = math.log(num, newNum) self.main_calculator_window.setPlainText(str(newNum)) else: if float(newNum) < 0: self.main_calculator_window.append('Введёное число меньше нуля.') pass else: if digital_display_on: dd_log = math.log(float(dd_num[-1])) self.c_f() for i in range(len(dd_num)): self.main_calculator_window.append('ln' + '(' + str(dd_num[i]) + ')') self.main_calculator_window.append('=' + '\n' + str(dd_log)) else: newNum = float(self.main_calculator_window.toPlainText()) newNum = math.log(newNum) self.main_calculator_window.setPlainText(str(newNum)) # Функция по вычислению процентов от числа и действия с ними. Требует оператора междву двумя числами. def percent_f(self): global newNum global num global sumAll global operator global digital_display_on # Если пользователь не ввёл второе число, то функция не выполняется. try: if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') self.c_f() dd_num[-1] = float(dd_num[-3]) * float(dd_num[-1]) / 100.0 for i in range(len(dd_num)): self.main_calculator_window.append(str(dd_num[i])) else: newNum = float(self.main_calculator_window.toPlainText()) num = float(num) newNum = (newNum * num) / 100.0 self.main_calculator_window.setPlainText(str(newNum)) except IndexError: pass # Функция, которая ставит точку в числе. def point_f(self): if digital_display_on: dd_num = self.main_calculator_window.toPlainText().split('\n') if "." not in dd_num[-1]: dd_num[-1] = dd_num[-1] + '.' self.c_f() for i in range(len(dd_num)): self.main_calculator_window.append(str(dd_num[i])) else: if "." not in self.main_calculator_window.toPlainText(): self.main_calculator_window.setPlainText(self.main_calculator_window.toPlainText() + ".") if __name__ == '__main__': app = QApplication(sys.argv) form = Calculator() form.show() app.exec() |