主要内容 #
1. 运算符按钮操作模块 #
主要功能:当点击每个运算符(加,减,乘,除)时,将对应结果存储到相应的列表和变量中,
用于最后一个等于号运算符的运算。
程序如下:
(以下程序添加到Calculator类中)
def deal_operator_btn(self, sender_text): # 操作符号 +, -, *, / self.empty_flag = False # 文本框为空的标志位为False _str = self.line_edit.text() # 获取当前文本框的内容 if _str == '0' or _str == 'Error': # Error一般除数为0时 会出现 # 当出现这个情况,就默认把上一个计算的结果带过来,跳过除数为0的情况 self.num_stack.append(self.res) # 将上次的结果加入到数字队列中 self.char_stack.append(sender_text) # 运算符列表将当前的运算符加入到字符队列中 self.express += (str(self.res) + sender_text) # 表达式串联 else: self.num_top = float(_str) if _str.count('.') != 0 \ else int(_str) # 将文本框的内容转为整型或者浮点型 self.char_top = sender_text # 设置运算符 self.num_stack.append(self.num_top) # 将当前数字加入到数字队列 num_stack_len, char_stack_len = len(self.num_stack), len(self.char_stack) if (num_stack_len != 0) and (num_stack_len == char_stack_len): # 在这里处理类似 输入 1+- 这种情况就是 1-后一个字符替换前面的 self.char_stack = self.char_stack[:] self.num_stack = self.num_stack[:-1] else: # 1+2*..... 类似输入 if len(self.char_stack) == 0: self.char_stack.append(self.char_top) # else: operator_cmp_key = self.char_stack[-1] + sender_text # 获取当前和之前的运算符的优先级 if self.priority_map[operator_cmp_key] == '>': # 判断优先级 print(self.num_stack, self.char_stack) self.calculate(sender_text) # 核心计算模块 self.char_stack.append(sender_text) self.after_operator = True
2. 等于号操作模块 #
最终的等于号操作模块,用于计算和输出最终的结果。
程序如下:
(以下程序添加到Calculator类中)
def deal_equal_btn(self): ''' 最终的等于号处理模块 ''' _str = self.line_edit.text() # 获取当前的文本框内容 self.empty_flag = True try: tmp_num = float(_str) if _str.count('.') != 0 \ else int(_str) # 获取最后输入的数字 self.num_stack.append(tmp_num) # 将数字输入到数字列表中 if len(self.num_stack) == 1: # 获取上一次的结果 # 需要上一次的结果, num_top能改变 self.char_stack.append(self.char_top) self.num_stack.append(self.num_top) else: self.num_top = tmp_num except Exception as e: self.num_stack.append(self.num_top) print('Error: {}'.format(e.args)) self.calculate() # 核心计算模块 self.num_stack.clear() # 清除列表 self.char_stack.clear() # 清除列表
到此,已经完成整个计算器的所有功能。
3. 小结 #
- 本章完成了计算器的运算符按钮操作模块
- 本章完成了计算器的等于号操作模块
习题 #
实现计算器的程序,并将代码通过pyinstaller打包成exe程序
- 无