跳至正文
View Categories

1 min read

主要内容 #

  • 运算符按钮操作模块
  • 等于号操作模块
  • 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程序