Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Created on Tue May 21 01:23:09 2019
- @author: Катя
- """
- import sys
- from PyQt5 import QtCore, QtGui, QtWidgets
- from PyQt5.QtCore import QRegExp
- from PyQt5.QtGui import QRegExpValidator
- from PyQt5.QtWidgets import QMessageBox,QComboBox
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(470, 594)
- MainWindow.setMinimumSize(QtCore.QSize(470, 594))
- MainWindow.setMaximumSize(QtCore.QSize(470, 594))
- MainWindow.setStyleSheet("background-color: rgb(188, 188, 188);")
- self.centralwidget = QtWidgets.QWidget(MainWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
- self.lineEdit.setGeometry(QtCore.QRect(30, 90, 40, 20))
- self.lineEdit.setStyleSheet("background-color: rgb(255, 255, 255);")
- self.lineEdit.setObjectName("lineEdit")
- self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
- self.lineEdit_2.setGeometry(QtCore.QRect(120, 90, 40, 20))
- self.lineEdit_2.setStyleSheet("background-color: rgb(255, 255, 255);")
- self.lineEdit_2.setObjectName("lineEdit_2")
- #self.label = QtWidgets.QLabel(self.centralwidget)
- #self.label.setGeometry(QtCore.QRect(80, 90, 16, 16))
- #self.label.setObjectName("label")
- self.cb = QComboBox(self.centralwidget)
- self.cb.addItems(["+", "-", "*","/"])
- self.cb.setGeometry(75, 85, 40, 26)
- #self.cb.currentIndexChanged.connect(self.selectionchange)
- #
- # self.combo.show()
- self.label_2 = QtWidgets.QLabel(self.centralwidget)
- self.label_2.setGeometry(QtCore.QRect(40, 20, 311, 16))
- self.label_2.setObjectName("label_2")
- self.label_3 = QtWidgets.QLabel(self.centralwidget)
- self.label_3.setGeometry(QtCore.QRect(40, 40, 371, 16))
- self.label_3.setObjectName("label_3")
- self.label_4 = QtWidgets.QLabel(self.centralwidget)
- self.label_4.setGeometry(QtCore.QRect(30, 75, 40, 13))
- self.label_4.setObjectName("label_4")
- self.label_5 = QtWidgets.QLabel(self.centralwidget)
- self.label_5.setGeometry(QtCore.QRect(120, 75, 40, 13))
- self.label_5.setObjectName("label_5")
- self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
- self.radioButton.setGeometry(QtCore.QRect(30, 120, 361, 18))
- self.radioButton.setObjectName("radioButton")
- self.radioButton.setChecked(True);
- self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget)
- self.radioButton_2.setGeometry(QtCore.QRect(30, 140, 341, 18))
- self.radioButton_2.setObjectName("radioButton_2")
- self.pushButton = QtWidgets.QPushButton(self.centralwidget)
- self.pushButton.setGeometry(QtCore.QRect(20, 180, 431, 23))
- self.pushButton.setStyleSheet("background-color: rgb(255, 255, 255);")
- self.pushButton.setObjectName("pushButton")
- self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
- self.textEdit.setGeometry(QtCore.QRect(20, 220, 431, 341))
- self.textEdit.setStyleSheet("background-color: rgb(232, 232, 232);")
- self.textEdit.setObjectName("textEdit")
- MainWindow.setCentralWidget(self.centralwidget)
- 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", "калькулятор"))
- #self.label.setText(_translate("MainWindow", "/"))
- self.label_2.setText(_translate("MainWindow", "Данная программа производит деление в столбик"))
- self.label_3.setText(_translate("MainWindow", "для получения результата введите два числа в десятичной системе"))
- self.label_4.setText(_translate("MainWindow", "число 1"))
- self.label_5.setText(_translate("MainWindow", "число 2"))
- self.radioButton.setText(_translate("MainWindow", "хочу увидеть результат в десятичной системе счисления"))
- self.radioButton_2.setText(_translate("MainWindow", "хочу увидеть результат в четверичной системе счисления"))
- self.pushButton.setText(_translate("MainWindow", "увидеть расчеты!"))
- class MyWin(QtWidgets.QMainWindow):
- def __init__(self, parent=None):
- QtWidgets.QWidget.__init__(self, parent)
- self.ui = Ui_MainWindow()
- self.ui.setupUi(self)
- self.setWindowIcon(QtGui.QIcon('icon.png'))
- num1 = str(self.ui.label_4)
- print(self.ui.lineEdit)
- num2 = str(self.ui.label_5)
- self.ui.pushButton.clicked.connect(self.itog)
- regex = QRegExp("[0-9_]+")
- validator = QRegExpValidator(regex)
- self.ui.lineEdit.setValidator(validator)
- self.ui.lineEdit_2.setValidator(validator)
- #self.onlyInt = QtGui.QIntValidator()
- #self.ui.lineEdit.setValidator(self.onlyInt)
- #self.ui.lineEdit_2.setValidator(self.onlyInt)
- def itog(self):
- num1=0;
- num2=0;
- if (self.ui.lineEdit_2.text()=="")|(self.ui.lineEdit.text()==""):
- QMessageBox.about(self, "Title", "Ошибка")
- else:
- if (self.ui.cb.currentText()=="+"):
- num1 = int(self.ui.lineEdit.text())
- num2 = int(self.ui.lineEdit_2.text())
- res="";
- self.ui.textEdit.clear()
- if self.ui.radioButton.isChecked()==True:
- res = plus_10(num1, num2)
- else:
- res = plus_4(num1,num2)
- self.ui.textEdit.setText(res)
- if (self.ui.cb.currentText()=="-"):
- num1 = int(self.ui.lineEdit.text())
- num2 = int(self.ui.lineEdit_2.text())
- res="";
- self.ui.textEdit.clear()
- if self.ui.radioButton.isChecked()==True:
- res = minus_10(num1, num2)
- else:
- res = minus_4(num1,num2)
- self.ui.textEdit.setText(res)
- if (self.ui.cb.currentText()=="/"):
- num1 = int(self.ui.lineEdit.text())
- num2 = int(self.ui.lineEdit_2.text())
- res=""
- if self.ui.radioButton.isChecked()==True:
- res = del_10(num1, num2)
- else:
- if (num2>1):
- QMessageBox.about(self, "Title", "Второе значение больше первого")
- else:
- res = del_4(num1,num2)
- print(res)
- self.ui.textEdit.clear()
- self.ui.textEdit.setText(res)
- if self.ui.cb.currentText()=="*":
- asdasda =2;
- def gen(line):
- newline = ''
- for i in range(len(line)):
- newline = newline + '\u0332' + line[i]
- return newline
- def minus_4(num1, num2):
- news = """"""
- num14 = newtransfer(num1)
- num24 = newtransfer(num2)
- delta = len(str(newtransfer(num1))) - len(str(newtransfer(num2)))
- abdelta = abs(delta)
- if delta > 0:
- news += str(num14)
- news += '\n'
- news += ' ' * delta
- news += gen(str(num24))
- news += '\n'
- news += str(newtransfer(num1 - num2))
- else:
- news += ' ' * abdelta
- news += str(num14)
- news += '\n'
- news += gen(str(num24))
- news += '\n'
- news += str(newtransfer(abs(num1 - num2)))
- return news
- def minus_10(num1, num2):
- news = """"""
- num14 = newtransfer(num1)
- num24 = newtransfer(num2)
- delta = len(str(num1)) - len(str(num2))
- abdelta = abs(delta)
- if delta > 0:
- news += str(num1)
- news += '\n'
- news += ' ' * delta
- news += gen(str(num2))
- news += '\n'
- news += str(num1 - num2)
- else:
- news += ' ' * abdelta
- news += str(num1)
- news += '\n'
- news += gen(str(num2))
- news += '\n'
- news += '-' + str(abs(num1 - num2))
- return news
- def plus_4(num1, num2):
- num14 = newtransfer(num1)
- num24 = newtransfer(num2)
- news = """"""
- if num1 >= num2:
- news += str(num14)
- news += '\n'
- news += ' ' * (len(str(num14)) - len(str(num24)))
- news += gen(str((num24)))
- news += '\n'
- news += str(newtransfer(num1 + num2))
- else:
- news += str(num24)
- news += '\n'
- news += ' ' * (len(str(num14)) - len(str(num24)))
- news += str(gen(num14))
- news += '\n'
- news += str(newtransfer(num1 + num2))
- return news
- def plus_10(num1, num2):
- num14 = newtransfer(num1)
- num24 = newtransfer(num2)
- news = """"""
- if num1 >= num2:
- news += str(num1)
- news += '\n'
- news += ' ' * (len(str(num1)) - len(str(num2)))
- news += gen(str((num2)))
- news += '\n'
- news += str(num1 + num2)
- else:
- news += str(num2)
- news += '\n'
- news += ' ' * (len(str(num1)) - len(str(num2)))
- news += gen(str(num1))
- news += '\n'
- news += str(num1 + num2)
- return news
- def gen(line):
- newline = ''
- for i in range(len(line)):
- newline = newline + '\u0332' + line[i]
- return newline
- def newtransfer(n):
- if n == 0:
- return 0
- else:
- newint = ''
- while n > 0:
- newint = str(n%4) + newint
- n = n//4
- return int(newint)
- """
- возвращает форматную строчку вывода делением в столбие
- десятичная СС
- """
- def del_10(num1, num2):
- news = """"""
- #тут num1 доджен быть уже целым числом
- le1 = len(str(num1))
- le2 = len(str(num2))
- an = round((num1/num2), 3)
- len_an = len(str(int(round((num1/num2), 3))))
- news += str(num1)
- news += '|'
- news += gen(str(num2))
- if len_an > len(str(num2)):
- news += gen(' ' * (len_an - len(str(num2))))
- news += '\n'
- if num2 > num1:
- news += gen(str(num1))
- news += '|'
- news += str(round((num1/num2), 5))
- news += '\n'
- news += '0'
- else:
- deli = int(str(num1)[:le2])
- if deli < num2:
- deli = int(str(num1)[:le2+1])
- news += gen(str((deli // num2) * num2))
- news += gen(' ' * (le1 - len(str((deli // num2) * num2))))
- news += '|'
- news += str(int(an))
- news += '\n'
- dl = (deli // num2) * num2
- stop = 0
- col_prob = 0
- base = len(str(dl))
- while stop < len(str(int(num1/num2))) - 1:
- result = deli - dl
- if result == 0:
- col_prob += 1
- if len(str(result)) < len(str(dl)):
- col_prob += len(str(dl)) - len(str(result))
- news += ' ' * col_prob
- if len(str(num1)) - (base + stop) > 0:
- deli = int(str(result) + str(num1)[base + stop])
- if deli < num2 and len(str(num1)) - (base + stop + 1):
- deli = int(str(deli) + str(str(num1)[base + 1 + stop]))
- if deli < num2 and len(str(num1)) - (base + stop + 2):
- deli = int(str(deli) + str(str(num1)[base + 2 + stop]))
- dl = (deli // num2) * num2
- news += str(deli)
- news += '\n'
- news += ' ' * col_prob
- news += gen(str(dl))
- news += '\n'
- stop += 1
- news += ' ' * (col_prob + 1)
- news += str(deli - dl)
- news += ' ост.'
- return news
- def del_4(num1, num2):
- news = """"""
- num1 = int(num1)
- num2 = int(num2)
- #!!! нельзя ввести num2 больше чем num1 в системе счисления 4!!!
- le2 = len(str(num2))
- an = round((num1/num2), 3)
- len_an = len(str(newtransfer(num1//num2)))
- news += str(newtransfer(num1))
- news += '|'
- news += gen(str(newtransfer(num2)))
- if len_an > len(str(newtransfer(num2))):
- news += gen(' ' * (len_an - len(str(newtransfer(num2)))))
- news += '\n'
- if num2 > num1: #эта часть не подходит сюда!!!
- print('wrong!!!')
- elif num1 >= num2:
- deli = int(str(num1)[:le2])
- if deli < num2:
- deli = int(str(num1)[:le2+1])
- news += gen(str(newtransfer((deli // num2) * num2)))
- news += gen(' ' * ((len(str(newtransfer(num1)))) - len(str(newtransfer((deli // num2) * num2)))))
- news += '|'
- news += str(newtransfer(int(an)))
- news += '\n'
- dl = (deli // num2) * num2
- stop = 0
- col_prob = 0
- base = len(str(dl))
- while stop < len(str(int(num1/num2))) - 1:
- result = deli - dl
- if result == 0:
- col_prob += 1
- if len(str(result)) < len(str(dl)):
- col_prob += len(str(dl)) - len(str(result))
- news += ' ' * col_prob
- if len(str(num1)) - (base + stop) > 0:
- deli = int(str(result) + str(num1)[base + stop])
- if deli < num2 and len(str(num1)) - (base + stop + 1):
- deli = int(str(deli) + str(str(num1)[base + 1 + stop]))
- if deli < num2 and len(str(num1)) - (base + stop + 2):
- deli = int(str(deli) + str(str(num1)[base + 2 + stop]))
- dl = (deli // num2) * num2
- news += str(newtransfer(deli))
- news += '\n'
- news += ' ' * col_prob
- news += gen(str(newtransfer(dl)))
- news += '\n'
- stop += 1
- news += ' ' * (col_prob + 1)
- news += str(newtransfer(int(deli - dl)))
- news += ' ост.'
- return news
- if __name__=="__main__":
- app = QtWidgets.QApplication(sys.argv)
- app.setWindowIcon(QtGui.QIcon('icon.ico'))
- myapp = MyWin()
- myapp.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement