主要内容 #
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程序
- 无