class Integrals(object): """ contains available integration methods """ def __init__(self): """ creates variables used for reading, parsing and calculating :return: none """ self.reader = InputReader() # reading engine self.validator = InputValidator() # parsing engine self.integrator = TrIntegrator() # integration engine def singleIntegral(self): """ calculates single integral provided from console input :return: list, history of completed calculations """ log = [] # create empty log list while True: parameters = self.reader.consoleInput() # get data if len(parameters) > 0: # if there is anything to do polynomial = eval("lambda x : " + parameters[0]) # create function of provided equation result = self.integrator.integrate(polynomial, float(parameters[1]), float(parameters[2]), float(parameters[3]) ) # run integration print("Result: " + str(result)) log.append(str(datetime.now()) + ", Result: " + str(result) + ", W(x)=" + parameters[0] + ', from:' + parameters[1] + ' to:' + parameters[2] + ', step=' + parameters[3]) # add result to log if len(parameters) > 0 and self.reader.yesNoInput("Would you like to begin new integration?"): # ask user to try again continue else: return log def manyIntegrals(self): """ calculates seres of integrals provided in file :return: list, history of completed calculations """ log = [] while True: fileContent = self.reader.fileInput() # ask user for input for line in fileContent: # for each line in file get the parameters parameters = line[5:] parameters = parameters.split(' ') parameters[0] = parameters[0].split(',')[0] parameters[1] = parameters[1].split(':')[1] parameters[2] = parameters[2].split(':')[1] parameters[2] = parameters[2].split(',')[0] parameters[3] = parameters[3].split('=')[1] if self.validator.validateParameters(parameters): # parse the parameters polynomial = eval("lambda x : " + parameters[0]) # create function from equation result = self.integrator.integrate(polynomial, float(parameters[1]), float(parameters[2]), float(parameters[3]) ) # do th integration print("Result: " + str(result)) log.append(str(datetime.now()) + ", Result: " + str(result) + ", W(x)=" + parameters[0] + ', from:' + parameters[1] + ' to:' + parameters[2] + ', step=' + parameters[3]) # save to log else: print("Error in line: " + "'" + line + "'") if len(fileContent) > 0 and self.reader.yesNoInput("Would you like to begin new integration?"): # ask user to try again continue else: return log
menu = Menu() reader = InputReader() sub = Integrals() myHelp = Help() while True: selection = menu.select() # if selection == 'q': # Quiting the main menu break elif selection == '1': # choosing single integral option result = sub.singleIntegral() log.add(result) elif selection == '2': # choosing many integrals results = sub.manyIntegrals() log.add(results) elif selection == '3': # choosing history log.show() raw_input("Press any key to close...") elif selection == '4': # choosing help myHelp.show() raw_input("Press any key to close...") if not(log.isEmpty()): # displays this session's history only if there is something to show log.show() if reader.yesNoInput("Save history to file?"): log.saveToFile() print("Goodbye!")