Advertisement
Guest User

Untitled

a guest
May 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.57 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue May 21 01:23:09 2019
  4.  
  5. @author: Катя
  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.  
  159.  
  160.  
  161.  
  162.  
  163. if (self.ui.cb.currentText()=="/"):
  164. num1 = int(self.ui.lineEdit.text())
  165. num2 = int(self.ui.lineEdit_2.text())
  166. res=""
  167.  
  168. if self.ui.radioButton.isChecked()==True:
  169. res = del_10(num1, num2)
  170. else:
  171. if (num2>1):
  172. QMessageBox.about(self, "Title", "Второе значение больше первого")
  173. else:
  174. res = del_4(num1,num2)
  175. print(res)
  176. self.ui.textEdit.clear()
  177. self.ui.textEdit.setText(res)
  178.  
  179. if self.ui.cb.currentText()=="*":
  180. asdasda =2;
  181.  
  182.  
  183.  
  184. def gen(line):
  185. newline = ''
  186. for i in range(len(line)):
  187. newline = newline + '\u0332' + line[i]
  188. return newline
  189.  
  190. def minus_4(num1, num2):
  191. news = """"""
  192. num14 = newtransfer(num1)
  193. num24 = newtransfer(num2)
  194. delta = len(str(newtransfer(num1))) - len(str(newtransfer(num2)))
  195. abdelta = abs(delta)
  196. if delta > 0:
  197. news += str(num14)
  198. news += '\n'
  199. news += ' ' * delta
  200. news += gen(str(num24))
  201. news += '\n'
  202. news += str(newtransfer(num1 - num2))
  203. else:
  204. news += ' ' * abdelta
  205. news += str(num14)
  206. news += '\n'
  207. news += gen(str(num24))
  208. news += '\n'
  209. news += str(newtransfer(abs(num1 - num2)))
  210. return news
  211.  
  212.  
  213. def minus_10(num1, num2):
  214. news = """"""
  215. num14 = newtransfer(num1)
  216. num24 = newtransfer(num2)
  217. delta = len(str(num1)) - len(str(num2))
  218. abdelta = abs(delta)
  219. if delta > 0:
  220. news += str(num1)
  221. news += '\n'
  222. news += ' ' * delta
  223. news += gen(str(num2))
  224. news += '\n'
  225. news += str(num1 - num2)
  226. else:
  227. news += ' ' * abdelta
  228. news += str(num1)
  229. news += '\n'
  230. news += gen(str(num2))
  231. news += '\n'
  232. news += '-' + str(abs(num1 - num2))
  233. return news
  234.  
  235.  
  236. def plus_4(num1, num2):
  237. num14 = newtransfer(num1)
  238. num24 = newtransfer(num2)
  239. news = """"""
  240. if num1 >= num2:
  241. news += str(num14)
  242. news += '\n'
  243. news += ' ' * (len(str(num14)) - len(str(num24)))
  244. news += gen(str((num24)))
  245. news += '\n'
  246. news += str(newtransfer(num1 + num2))
  247. else:
  248. news += str(num24)
  249. news += '\n'
  250. news += ' ' * (len(str(num14)) - len(str(num24)))
  251. news += str(gen(num14))
  252. news += '\n'
  253. news += str(newtransfer(num1 + num2))
  254. return news
  255.  
  256. def plus_10(num1, num2):
  257. num14 = newtransfer(num1)
  258. num24 = newtransfer(num2)
  259. news = """"""
  260. if num1 >= num2:
  261. news += str(num1)
  262. news += '\n'
  263. news += ' ' * (len(str(num1)) - len(str(num2)))
  264. news += gen(str((num2)))
  265. news += '\n'
  266. news += str(num1 + num2)
  267. else:
  268. news += str(num2)
  269. news += '\n'
  270. news += ' ' * (len(str(num1)) - len(str(num2)))
  271. news += gen(str(num1))
  272. news += '\n'
  273. news += str(num1 + num2)
  274. return news
  275.  
  276. def gen(line):
  277. newline = ''
  278. for i in range(len(line)):
  279. newline = newline + '\u0332' + line[i]
  280. return newline
  281.  
  282. def newtransfer(n):
  283. if n == 0:
  284. return 0
  285. else:
  286. newint = ''
  287. while n > 0:
  288. newint = str(n%4) + newint
  289. n = n//4
  290. return int(newint)
  291.  
  292. """
  293. возвращает форматную строчку вывода делением в столбие
  294. десятичная СС
  295. """
  296. def del_10(num1, num2):
  297. news = """"""
  298. #тут num1 доджен быть уже целым числом
  299. le1 = len(str(num1))
  300. le2 = len(str(num2))
  301. an = round((num1/num2), 3)
  302. len_an = len(str(int(round((num1/num2), 3))))
  303. news += str(num1)
  304. news += '|'
  305. news += gen(str(num2))
  306. if len_an > len(str(num2)):
  307. news += gen(' ' * (len_an - len(str(num2))))
  308. news += '\n'
  309. if num2 > num1:
  310. news += gen(str(num1))
  311. news += '|'
  312. news += str(round((num1/num2), 5))
  313. news += '\n'
  314. news += '0'
  315. else:
  316. deli = int(str(num1)[:le2])
  317. if deli < num2:
  318. deli = int(str(num1)[:le2+1])
  319. news += gen(str((deli // num2) * num2))
  320. news += gen(' ' * (le1 - len(str((deli // num2) * num2))))
  321. news += '|'
  322. news += str(int(an))
  323. news += '\n'
  324. dl = (deli // num2) * num2
  325. stop = 0
  326. col_prob = 0
  327. base = len(str(dl))
  328. while stop < len(str(int(num1/num2))) - 1:
  329. result = deli - dl
  330. if result == 0:
  331. col_prob += 1
  332. if len(str(result)) < len(str(dl)):
  333. col_prob += len(str(dl)) - len(str(result))
  334. news += ' ' * col_prob
  335. if len(str(num1)) - (base + stop) > 0:
  336. deli = int(str(result) + str(num1)[base + stop])
  337. if deli < num2 and len(str(num1)) - (base + stop + 1):
  338. deli = int(str(deli) + str(str(num1)[base + 1 + stop]))
  339. if deli < num2 and len(str(num1)) - (base + stop + 2):
  340. deli = int(str(deli) + str(str(num1)[base + 2 + stop]))
  341. dl = (deli // num2) * num2
  342. news += str(deli)
  343. news += '\n'
  344. news += ' ' * col_prob
  345. news += gen(str(dl))
  346. news += '\n'
  347. stop += 1
  348. news += ' ' * (col_prob + 1)
  349. news += str(deli - dl)
  350. news += ' ост.'
  351. return news
  352.  
  353. def del_4(num1, num2):
  354. news = """"""
  355. num1 = int(num1)
  356. num2 = int(num2)
  357. #!!! нельзя ввести num2 больше чем num1 в системе счисления 4!!!
  358. le2 = len(str(num2))
  359. an = round((num1/num2), 3)
  360. len_an = len(str(newtransfer(num1//num2)))
  361. news += str(newtransfer(num1))
  362. news += '|'
  363. news += gen(str(newtransfer(num2)))
  364. if len_an > len(str(newtransfer(num2))):
  365. news += gen(' ' * (len_an - len(str(newtransfer(num2)))))
  366. news += '\n'
  367. if num2 > num1: #эта часть не подходит сюда!!!
  368. print('wrong!!!')
  369. elif num1 >= num2:
  370. deli = int(str(num1)[:le2])
  371. if deli < num2:
  372. deli = int(str(num1)[:le2+1])
  373. news += gen(str(newtransfer((deli // num2) * num2)))
  374. news += gen(' ' * ((len(str(newtransfer(num1)))) - len(str(newtransfer((deli // num2) * num2)))))
  375. news += '|'
  376. news += str(newtransfer(int(an)))
  377. news += '\n'
  378. dl = (deli // num2) * num2
  379. stop = 0
  380. col_prob = 0
  381. base = len(str(dl))
  382. while stop < len(str(int(num1/num2))) - 1:
  383. result = deli - dl
  384. if result == 0:
  385. col_prob += 1
  386. if len(str(result)) < len(str(dl)):
  387. col_prob += len(str(dl)) - len(str(result))
  388. news += ' ' * col_prob
  389. if len(str(num1)) - (base + stop) > 0:
  390. deli = int(str(result) + str(num1)[base + stop])
  391. if deli < num2 and len(str(num1)) - (base + stop + 1):
  392. deli = int(str(deli) + str(str(num1)[base + 1 + stop]))
  393. if deli < num2 and len(str(num1)) - (base + stop + 2):
  394. deli = int(str(deli) + str(str(num1)[base + 2 + stop]))
  395. dl = (deli // num2) * num2
  396. news += str(newtransfer(deli))
  397. news += '\n'
  398. news += ' ' * col_prob
  399. news += gen(str(newtransfer(dl)))
  400. news += '\n'
  401. stop += 1
  402. news += ' ' * (col_prob + 1)
  403. news += str(newtransfer(int(deli - dl)))
  404. news += ' ост.'
  405. return news
  406.  
  407.  
  408.  
  409. if __name__=="__main__":
  410. app = QtWidgets.QApplication(sys.argv)
  411. app.setWindowIcon(QtGui.QIcon('icon.ico'))
  412. myapp = MyWin()
  413. myapp.show()
  414. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement