Advertisement
Guest User

Untitled

a guest
May 21st, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 15.85 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue May 21 01:23:09 2019
  4.  
  5. @author: Andrey
  6. """
  7.  
  8. import sys
  9. from PyQt5 import QtCore, QtGui, QtWidgets
  10. from PyQt5.QtCore import QRegExp
  11. from PyQt5.QtGui import QRegExpValidator
  12. from PyQt5.QtWidgets import QMessageBox,QComboBox
  13.  
  14.  
  15. class Ui_MainWindow(object):
  16.     def setupUi(self, MainWindow):
  17.         MainWindow.setObjectName("MainWindow")
  18.         MainWindow.resize(470, 594)
  19.         MainWindow.setMinimumSize(QtCore.QSize(470, 594))
  20.         MainWindow.setMaximumSize(QtCore.QSize(470, 594))
  21.         MainWindow.setStyleSheet("background-color: rgb(188, 188, 188);")
  22.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  23.         self.centralwidget.setObjectName("centralwidget")
  24.         self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
  25.         self.lineEdit.setGeometry(QtCore.QRect(30, 90, 40, 20))
  26.         self.lineEdit.setStyleSheet("background-color: rgb(255, 255, 255);")
  27.         self.lineEdit.setObjectName("lineEdit")
  28.         self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
  29.         self.lineEdit_2.setGeometry(QtCore.QRect(120, 90, 40, 20))
  30.         self.lineEdit_2.setStyleSheet("background-color: rgb(255, 255, 255);")
  31.         self.lineEdit_2.setObjectName("lineEdit_2")
  32.  
  33.  
  34.         #self.label = QtWidgets.QLabel(self.centralwidget)
  35.         #self.label.setGeometry(QtCore.QRect(80, 90, 16, 16))
  36.         #self.label.setObjectName("label")
  37.  
  38.         self.cb = QComboBox(self.centralwidget)
  39.         self.cb.addItems(["+", "-", "*","/"])
  40.         self.cb.setGeometry(75, 85, 40, 26)
  41.         #self.cb.currentIndexChanged.connect(self.selectionchange)
  42.  
  43.  
  44. #
  45. #        self.combo.show()
  46.  
  47.         self.label_2 = QtWidgets.QLabel(self.centralwidget)
  48.         self.label_2.setGeometry(QtCore.QRect(40, 20, 311, 16))
  49.         self.label_2.setObjectName("label_2")
  50.  
  51.         self.label_3 = QtWidgets.QLabel(self.centralwidget)
  52.         self.label_3.setGeometry(QtCore.QRect(40, 40, 371, 16))
  53.         self.label_3.setObjectName("label_3")
  54.  
  55.         self.label_4 = QtWidgets.QLabel(self.centralwidget)
  56.         self.label_4.setGeometry(QtCore.QRect(30, 75, 40, 13))
  57.         self.label_4.setObjectName("label_4")
  58.  
  59.         self.label_5 = QtWidgets.QLabel(self.centralwidget)
  60.         self.label_5.setGeometry(QtCore.QRect(120, 75, 40, 13))
  61.         self.label_5.setObjectName("label_5")
  62.  
  63.         self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
  64.         self.radioButton.setGeometry(QtCore.QRect(30, 120, 361, 18))
  65.         self.radioButton.setObjectName("radioButton")
  66.         self.radioButton.setChecked(True);
  67.  
  68.         self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget)
  69.         self.radioButton_2.setGeometry(QtCore.QRect(30, 140, 341, 18))
  70.         self.radioButton_2.setObjectName("radioButton_2")
  71.  
  72.         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  73.         self.pushButton.setGeometry(QtCore.QRect(20, 180, 431, 23))
  74.         self.pushButton.setStyleSheet("background-color: rgb(255, 255, 255);")
  75.         self.pushButton.setObjectName("pushButton")
  76.  
  77.         self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
  78.         self.textEdit.setGeometry(QtCore.QRect(20, 220, 431, 341))
  79.         self.textEdit.setStyleSheet("background-color: rgb(232, 232, 232);")
  80.         self.textEdit.setObjectName("textEdit")
  81.         MainWindow.setCentralWidget(self.centralwidget)
  82.         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  83.         self.statusbar.setObjectName("statusbar")
  84.         MainWindow.setStatusBar(self.statusbar)
  85.  
  86.         self.retranslateUi(MainWindow)
  87.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  88.  
  89.     def retranslateUi(self, MainWindow):
  90.         _translate = QtCore.QCoreApplication.translate
  91.         MainWindow.setWindowTitle(_translate("MainWindow", "калькулятор"))
  92.         #self.label.setText(_translate("MainWindow", "/"))
  93.         self.label_2.setText(_translate("MainWindow", "Данная программа производит деление в столбик"))
  94.         self.label_3.setText(_translate("MainWindow", "для получения результата введите два числа в десятичной системе"))
  95.         self.label_4.setText(_translate("MainWindow", "число 1"))
  96.         self.label_5.setText(_translate("MainWindow", "число 2"))
  97.         self.radioButton.setText(_translate("MainWindow", "хочу увидеть результат в десятичной системе счисления"))
  98.         self.radioButton_2.setText(_translate("MainWindow", "хочу увидеть результат в четверичной системе счисления"))
  99.         self.pushButton.setText(_translate("MainWindow", "увидеть расчеты!"))
  100.  
  101. class MyWin(QtWidgets.QMainWindow):
  102.     def __init__(self, parent=None):
  103.         QtWidgets.QWidget.__init__(self, parent)
  104.  
  105.         self.ui = Ui_MainWindow()
  106.         self.ui.setupUi(self)
  107.  
  108.         self.setWindowIcon(QtGui.QIcon('icon.png'))
  109.  
  110.         num1 = str(self.ui.label_4)
  111.         print(self.ui.lineEdit)
  112.         num2 = str(self.ui.label_5)
  113.         self.ui.pushButton.clicked.connect(self.itog)
  114.  
  115.         regex = QRegExp("[0-9_]+")
  116.         validator = QRegExpValidator(regex)
  117.         self.ui.lineEdit.setValidator(validator)
  118.         self.ui.lineEdit_2.setValidator(validator)
  119.  
  120.  
  121.         #self.onlyInt = QtGui.QIntValidator()
  122.         #self.ui.lineEdit.setValidator(self.onlyInt)
  123.         #self.ui.lineEdit_2.setValidator(self.onlyInt)
  124.  
  125.  
  126.     def itog(self):
  127.         num1=0;
  128.         num2=0;
  129.         if (self.ui.lineEdit_2.text()=="")|(self.ui.lineEdit.text()==""):
  130.             QMessageBox.about(self, "Title", "Ошибка")
  131.         else:
  132.  
  133.             if (self.ui.cb.currentText()=="+"):
  134.                 num1 = int(self.ui.lineEdit.text())
  135.                 num2 = int(self.ui.lineEdit_2.text())
  136.                
  137.                 res="";
  138.                 self.ui.textEdit.clear()
  139.                 if self.ui.radioButton.isChecked()==True:
  140.                     res = plus_10(num1, num2)
  141.                 else:
  142.                     res = plus_4(num1,num2)
  143.                 self.ui.textEdit.setText(res)
  144.  
  145.             if (self.ui.cb.currentText()=="-"):
  146.                 num1 = int(self.ui.lineEdit.text())
  147.                 num2 = int(self.ui.lineEdit_2.text())
  148.                
  149.                 res="";
  150.                 self.ui.textEdit.clear()
  151.                 if self.ui.radioButton.isChecked()==True:
  152.                     res = minus_10(num1, num2)
  153.                 else:
  154.                     res = minus_4(num1,num2)
  155.                 self.ui.textEdit.setText(res)
  156.  
  157.  
  158.             if (self.ui.cb.currentText()=="*"):
  159.                 num1 = int(self.ui.lineEdit.text())
  160.                 num2 = int(self.ui.lineEdit_2.text())
  161.                
  162.                 res="";
  163.                 self.ui.textEdit.clear()
  164.                 if self.ui.radioButton.isChecked()==True:
  165.                     res = umn_10(num1, num2)
  166.                 else:
  167.                     res = umn_4(num1,num2)
  168.                 self.ui.textEdit.setText(res)
  169.  
  170.  
  171.                
  172.                
  173.             if (self.ui.cb.currentText()=="/"):
  174.                 num1 = int(self.ui.lineEdit.text())
  175.                 num2 = int(self.ui.lineEdit_2.text())
  176.                 res=""
  177.  
  178.                 if self.ui.radioButton.isChecked()==True:
  179.                     res = del_10(num1, num2)
  180.                 else:
  181.                     if (num2>1):
  182.                         QMessageBox.about(self, "Title", "Второе значение больше первого")
  183.                     else:
  184.                         res = del_4(num1,num2)
  185.                 print(res)
  186.                 self.ui.textEdit.clear()
  187.                 self.ui.textEdit.setText(res)
  188.  
  189.  
  190.  
  191.                
  192. def gen(line):
  193.     newline = ''
  194.     for i in range(len(line)):
  195.         newline = newline + '\u0332' + line[i]
  196.     return newline
  197.  
  198. def umn_10(num1, num2):
  199.     news = """"""
  200.     с = 0
  201.     col_dop = 0
  202.     if num2 > num1:
  203.         num2 = с
  204.         num2 = num1
  205.         num1 = с
  206.     col_dop = len(str(num1*num2)) - len(str(num1))
  207.     news += ' ' * col_dop
  208.     news += str(num1)
  209.     news += '\n'
  210.     news += ' ' * (len(str(num1)) - len(str(num2)) + col_dop)
  211.     news += gen(str(num2))
  212.     news += '\n'
  213.     news += str(num1*num2)
  214.     return news
  215.  
  216. def umn_4(num1, num2):
  217.     news = """"""
  218.     с = 0
  219.     col_dop = 0
  220.     if num2 > num1:
  221.         num2 = с
  222.         num2 = num1
  223.         num1 = с
  224.     num14 = newtransfer(num1)
  225.     num24 = newtransfer(num2)
  226.     col_dop = len(str(num1*num2)) - len(str(num1))
  227.     news += ' ' * col_dop
  228.     news += str(num14)
  229.     news += '\n'
  230.     news += ' ' * (len(str(num14)) - len(str(num24)) + col_dop)
  231.     news += gen(str(num24))
  232.     news += '\n'
  233.     news += str(newtransfer(num1*num2))
  234.     return news
  235.  
  236. def minus_4(num1, num2):
  237.     news = """"""
  238.     num14 = newtransfer(num1)
  239.     num24 = newtransfer(num2)
  240.     delta = len(str(newtransfer(num1))) - len(str(newtransfer(num2)))
  241.     abdelta = abs(delta)
  242.     if delta > 0:
  243.         news += str(num14)
  244.         news += '\n'
  245.         news += ' ' * delta
  246.         news += gen(str(num24))
  247.         news += '\n'
  248.         news += str(newtransfer(num1 - num2))
  249.     else:
  250.         news += ' ' * abdelta
  251.         news += str(num14)
  252.         news += '\n'
  253.         news += gen(str(num24))
  254.         news += '\n'
  255.         news += str(newtransfer(abs(num1 - num2)))
  256.     return news
  257.  
  258.  
  259. def minus_10(num1, num2):
  260.     news = """"""
  261.     num14 = newtransfer(num1)
  262.     num24 = newtransfer(num2)
  263.     delta = len(str(num1)) - len(str(num2))
  264.     abdelta = abs(delta)
  265.     if delta > 0:
  266.         news += str(num1)
  267.         news += '\n'
  268.         news += ' ' * delta
  269.         news += gen(str(num2))
  270.         news += '\n'
  271.         news += str(num1 - num2)
  272.     else:
  273.         news += ' ' * abdelta
  274.         news += str(num1)
  275.         news += '\n'
  276.         news += gen(str(num2))
  277.         news += '\n'
  278.         news += '-' + str(abs(num1 - num2))
  279.     return news
  280.    
  281.  
  282. def plus_4(num1, num2):
  283.     num14 = newtransfer(num1)
  284.     num24 = newtransfer(num2)
  285.     news = """"""
  286.     if num1 >= num2:
  287.         news += str(num14)
  288.         news += '\n'
  289.         news += ' ' * (len(str(num14)) - len(str(num24)))
  290.         news += gen(str((num24)))
  291.         news += '\n'
  292.         news += str(newtransfer(num1 + num2))
  293.     else:
  294.         news += str(num24)
  295.         news += '\n'
  296.         news += ' ' * (len(str(num14)) - len(str(num24)))
  297.         news += str(gen(num14))
  298.         news += '\n'
  299.         news += str(newtransfer(num1 + num2))
  300.     return news
  301.  
  302. def plus_10(num1, num2):
  303.     num14 = newtransfer(num1)
  304.     num24 = newtransfer(num2)
  305.     news = """"""
  306.     if num1 >= num2:
  307.         news += str(num1)
  308.         news += '\n'
  309.         news += ' ' * (len(str(num1)) - len(str(num2)))
  310.         news += gen(str((num2)))
  311.         news += '\n'
  312.         news += str(num1 + num2)
  313.     else:
  314.         news += str(num2)
  315.         news += '\n'
  316.         news += ' ' * (len(str(num1)) - len(str(num2)))
  317.         news += gen(str(num1))
  318.         news += '\n'
  319.         news += str(num1 + num2)
  320.     return news
  321.  
  322. def gen(line):
  323.     newline = ''
  324.     for i in range(len(line)):
  325.         newline = newline + '\u0332' + line[i]
  326.     return newline
  327.  
  328. def newtransfer(n):
  329.     if n == 0:
  330.         return 0
  331.     else:
  332.         newint = ''
  333.         while n > 0:
  334.             newint = str(n%4) + newint
  335.             n = n//4
  336.         return int(newint)
  337.  
  338. """
  339. возвращает форматную строчку вывода делением в столбие
  340. десятичная СС
  341. """
  342. def del_10(num1, num2):
  343.     news = """"""
  344.     #тут num1 доджен быть уже целым числом
  345.     le1 = len(str(num1))
  346.     le2 = len(str(num2))
  347.     an = round((num1/num2), 3)
  348.     len_an = len(str(int(round((num1/num2), 3))))
  349.     news += str(num1)
  350.     news += '|'
  351.     news += gen(str(num2))
  352.     if len_an > len(str(num2)):
  353.         news += gen(' ' * (len_an - len(str(num2))))
  354.     news += '\n'
  355.     if num2 > num1:
  356.         news += gen(str(num1))
  357.         news += '|'
  358.         news += str(round((num1/num2), 5))
  359.         news += '\n'
  360.         news += '0'
  361.     else:
  362.         deli = int(str(num1)[:le2])
  363.         if deli < num2:
  364.             deli = int(str(num1)[:le2+1])
  365.         news += gen(str((deli // num2) * num2))
  366.         news += gen(' ' * (le1 - len(str((deli // num2) * num2))))
  367.         news += '|'
  368.         news += str(int(an))
  369.         news += '\n'
  370.         dl = (deli // num2) * num2
  371.         stop = 0
  372.         col_prob = 0
  373.         base = len(str(dl))
  374.         while stop < len(str(int(num1/num2))) - 1:
  375.             result = deli - dl
  376.             if result == 0:
  377.                 col_prob += 1
  378.             if len(str(result)) < len(str(dl)):
  379.                 col_prob += len(str(dl)) - len(str(result))
  380.             news += ' ' * col_prob
  381.             if len(str(num1)) - (base + stop) > 0:
  382.                 deli = int(str(result) + str(num1)[base + stop])
  383.                 if deli < num2 and len(str(num1)) - (base + stop + 1):
  384.                     deli = int(str(deli) + str(str(num1)[base + 1 + stop]))
  385.                     if deli < num2 and len(str(num1)) - (base + stop + 2):
  386.                         deli = int(str(deli) + str(str(num1)[base + 2 + stop]))
  387.             dl = (deli // num2) * num2
  388.             news += str(deli)
  389.             news += '\n'
  390.             news += ' ' * col_prob
  391.             news += gen(str(dl))
  392.             news += '\n'
  393.             stop += 1
  394.         news += ' ' * (col_prob + 1)
  395.         news += str(deli - dl)
  396.         news += ' ост.'
  397.     return news
  398.  
  399. def del_4(num1, num2):
  400.     news = """"""
  401.     num1 = int(num1)
  402.     num2 = int(num2)
  403.     #!!! нельзя ввести num2 больше чем num1 в системе счисления 4!!!
  404.     le2 = len(str(num2))
  405.     an = round((num1/num2), 3)
  406.     len_an = len(str(newtransfer(num1//num2)))
  407.     news += str(newtransfer(num1))
  408.     news += '|'
  409.     news += gen(str(newtransfer(num2)))
  410.     if len_an > len(str(newtransfer(num2))):
  411.         news += gen(' ' * (len_an - len(str(newtransfer(num2)))))
  412.     news += '\n'
  413.     if num2 > num1: #эта часть не подходит сюда!!!
  414.        print('wrong!!!')
  415.     elif num1 >= num2:
  416.         deli = int(str(num1)[:le2])
  417.         if deli < num2:
  418.             deli = int(str(num1)[:le2+1])
  419.         news += gen(str(newtransfer((deli // num2) * num2)))
  420.         news += gen(' ' * ((len(str(newtransfer(num1)))) - len(str(newtransfer((deli // num2) * num2)))))
  421.         news += '|'
  422.         news += str(newtransfer(int(an)))
  423.         news += '\n'
  424.         dl = (deli // num2) * num2
  425.         stop = 0
  426.         col_prob = 0
  427.         base = len(str(dl))
  428.         while stop < len(str(int(num1/num2))) - 1:
  429.             result = deli - dl
  430.             if result == 0:
  431.                 col_prob += 1
  432.             if len(str(result)) < len(str(dl)):
  433.                 col_prob += len(str(dl)) - len(str(result))
  434.             news += ' ' * col_prob
  435.             if len(str(num1)) - (base + stop) > 0:
  436.                 deli = int(str(result) + str(num1)[base + stop])
  437.                 if deli < num2 and len(str(num1)) - (base + stop + 1):
  438.                     deli = int(str(deli) + str(str(num1)[base + 1 + stop]))
  439.                     if deli < num2 and len(str(num1)) - (base + stop + 2):
  440.                         deli = int(str(deli) + str(str(num1)[base + 2 + stop]))
  441.             dl = (deli // num2) * num2
  442.             news += str(newtransfer(deli))
  443.             news += '\n'
  444.             news += ' ' * col_prob
  445.             news += gen(str(newtransfer(dl)))
  446.             news += '\n'
  447.             stop += 1
  448.         news += ' ' * (col_prob + 1)
  449.         news += str(newtransfer(int(deli - dl)))
  450.         news += ' ост.'
  451.     return news
  452.  
  453.  
  454.  
  455. if __name__=="__main__":
  456.     app = QtWidgets.QApplication(sys.argv)
  457.     app.setWindowIcon(QtGui.QIcon('icon.ico'))
  458.     myapp = MyWin()
  459.     myapp.show()
  460.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement