Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.81 KB | None | 0 0
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
  3. from PyQt5.QtWidgets import QLineEdit, QTableWidget, QTableWidgetItem
  4. from math import sin, cos, tan
  5.  
  6. class MainWidget(QWidget):
  7.     def __init__(self):
  8.         super().__init__()
  9.         self.initUI()
  10.  
  11.     def initUI(self):
  12.         self.setGeometry(100, 100, 300, 400)
  13.  
  14.         self.eq_label = QLabel(self)
  15.         self.eq_label.setText('Введите уравнение:')
  16.         self.eq_label.move(80, 30)
  17.  
  18.         self.eq_gap = QLineEdit(self)
  19.         self.eq_gap.move(80, 60)
  20.  
  21.         self.equation = [] #коэф уравнения от пустого до старшего
  22.  
  23.         self.solve_btn = QPushButton('Решить', self)
  24.         self.solve_btn.resize(self.solve_btn.sizeHint())
  25.         self.solve_btn.move(75, 100)
  26.         self.solve_btn.clicked.connect(self.build_eq)
  27.  
  28.     def add_eq(self, ind, val): #добавляем в equation коэф val степени ind
  29.         if len(self.equation) <= ind:
  30.             ln = len(self.equation)
  31.             for i in range(ind - ln + 1):
  32.                 self.equation.append(0)
  33.         self.equation[ind] += val
  34.  
  35.     def build_eq(self): #разбиваем уравнение на левую/правую части и вызываем get_eq
  36.         s = ''.join(self.eq_gap.text().split())
  37.         if not len(s):
  38.             return
  39.         h = s.split('=')
  40.         left, right = h[0], h[1]
  41.         self.get_eq(left, 1)
  42.         self.get_eq(right, -1)
  43.         self.solve()
  44.  
  45.     def get_eq(self, s, global_sign): #из строки с многочленом строим equation
  46.         l = 0
  47.         while l < len(s):
  48.             sign = global_sign
  49.             if s[l] in '+-':
  50.                 if s[l] == '-':
  51.                     sign *= -1
  52.                 l += 1
  53.             val = 0
  54.             while l < len(s) and s[l].isdigit():
  55.                 val += int(s[l])
  56.                 val *= 10
  57.                 l += 1
  58.             if val > 10:
  59.                 val //= 10
  60.             val *= sign
  61.             if (l == len(s)) or (not s[l].isalpha()):
  62.                 self.add_eq(0, val)
  63.                 continue
  64.             l += 1
  65.             if l == len(s) or s[l] != '^':
  66.                 self.add_eq(1, val)
  67.             l += 1
  68.             st = 0
  69.             while l < len(s) and s[l].isdigit():
  70.                 st += int(s[l])
  71.                 st *= 10
  72.                 l += 1
  73.             st /= 10
  74.             self.add_eq(st, val)
  75.  
  76.     def f(self, x): #f(x)
  77.         ret = 0
  78.         for i in range(len(self.equation)):
  79.             ret += self.equation[i] + x ** i
  80.         return ret
  81.  
  82.     def solve(self):
  83.         pass
  84.  
  85.  
  86.  
  87. if __name__ == '__main__':
  88.     app = QApplication(sys.argv)
  89.     wid = MainWidget()
  90.     wid.show()
  91.     sys.exit(app.exec())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement