• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python3.5 + PyQt5 +Eric6实现的一个计算器方法(附代码)

python 搞代码 4年前 (2022-01-09) 41次浏览 已收录 0个评论

这篇文章主要介绍了python3.5 + PyQt5 +Eric6实现的一个计算器方法(附代码),在windows7 32位系统可以完美运行 计算器,有兴趣的可以了解一下。

目前可以实现简单的计算。计算前请重置,设计的时候默认数字是0,学了半天就做出来个这么个结果,bug不少。 python3.5 + PyQt5 +Eric6 在windows7 32位系统可以完美运行 计算器,简单学了半天就画个图实现的存在bug,部分按钮还未实现,后续优化。

代码结构如图:

jisuan.py

import re#匹配整数或小数的乘除法,包括了开头存在减号的情况mul_p=re.compile("(-?\d+)(\.\d+)?(\*|/)(-?\d+)(\.\d+)?")#匹配整数或小数的加减法,包括了开头存在减号的情况plus_minus = re.compile("(-?\d+)(\.\d+)?(-|\+)(-?\d+)(\.\d+)?")#匹配括号bracket=re.compile("\([^()]*\)")#匹配乘法的时候出现乘以负数的情况,包括了开头存在减号的情况mul_minus_minus = re.compile("(-?\d+)(\.\d+)?(\*-)(\d+)(\.\d+)?")#匹配除法的时候出现乘以负数的情况,包括了开头存在减号的情况p_minus_minus = re.compile("(-?\d+)(\.\d+)?(/-)(\d+)(\.\d+)?")#定义一个两位数的加减乘除法的运算,匹配左边的右边的数字和左边的数字,然后进行计算def touble_cale(str_expire):  if str_expire.count("+") == 1:    right_num = float(str_expire[(str_expire.find("+")+1):])    left_num = float(str_expire[:str_expire.find("+")])    return str(right_num+left_num)  elif str_expire[1:].count("-") == 1:    right_num = float(str_expire[:str_expire.find("-",1)])    left_num = float(str_expire[(str_expire.find("-", 1) + 1):])    return str(right_num - left_num)  elif str_expire.count("*") == 1:    right_num = float(str_expire[:str_expire.find("*")])    left_num = float(str_expire[(str_expire.find("*")+1):])    return str(right_num * left_num)  elif str_expire.count("/") == 1:    right_num = float(str_expire[:str_expire.find("/")])    left_num = float(str_expire[(str_expire.find("/") + 1):])    return str(right_num / left_num)#定义一个方法用于判断是否存在乘以负数和除以负数的情况def judge_mul_minus(str_expire):  #判断公式中乘以负数的部分  if len(re.findall("(\*-)", str_expire)) != 0:    #调用上面的正则取得*-的公式    temp_mul_minus = mul_minus_minus.search(str_expire).group()    #将匹配的部分的*-换成*并将-放到前面    temp_mul_minus_2 = temp_mul_minus.replace(temp_mul_minus,"-" + temp_mul_minus.replace("*-","*"))    #经更改的的部分与原来的部分进行替换    str_expire=str_expire.replace(temp_mul_minus,temp_mul_minus_2)    return judge_mul_minus(str_expire)    #return str_expire  # 判断公式中除以负数的部分  elif len(re.findall(r"(/-)", str_expire)) != 0:    # 调用上面的正则取得/-的公式    temp_dev_minus = p_minus_minus.search(str_expire).group()    # 将匹配的部分的/-换成/并将-放到前面    temp_dev_minus_2 = temp_dev_minus.replace(temp_dev_minus,"-" + temp_dev_minus.replace("/-","/"))    # 经更改的的部分与原来的部分进行替换    str_expire = str_expire.replace(temp_dev_minus,temp_dev_minus_2)    return judge_mul_minus(str_expire)  #调用change_sign将公式中的++换成= +-换成-  return change_sign(str_expire)#定义一个方法取将--更改为+ +-改为-def change_sign(str_expire):  if len(re.findall(r"(\+-)", str_expire)) != 0:    str_expire = str_expire.replace("+-", "-")    return change_sign(str_expire)  elif len(re.findall(r"(--)", str_expire)) != 0:    str_expire = str_expire.replace("--", "+")    return change_sign(str_expire)  return str_expire#定义一个方法用于计算只有加减乘除的公式,优先处理乘法def cale_mix(str_expire):  #如果公式中出现符号数字的情况即+5 -6 *8 /8的这种情况直接放回数字否则则先计算乘除在处理加减  while len(re.findall("[-+*/]",str_expire[1:])) != 0:    if len(re.findall("(\*|/)",str_expire)) != 0:      str_expire = str_expire.replace(mul_p.search(str_expire).group(),touble_cale(mul_p.search(str_expire).group()))    elif len(re.findall("(\+|-)",str_expire)) !=0:      str_expire = str_expire.replace(plus_minus.search(str_expire).group(),touble_cale(plus_minus.search(str_expire).group()))  return str_expire#定义一个方法用于去括号,并调用上述的方法进行计算def remove_bracket(str_expire):  #判断公式中是否有括号  if len(bracket.findall(str_expire)) == 0:    return cale_mix(judge_mul_minus(str_expire))  elif len(bracket.findall(str_expire))!=0:    while len(bracket.findall(str_expire)) !=0:      #print(bracket.search(str_expire).group())      #只有存在括号优先处理括号中的内容并对内容进行替换,直到没有括号位置      str_expire = str_expire.replace(bracket.search(str_expire).group(),cale_mix(judge_mul_minus(bracket.search(str_expire).group()[1:-1])))    str_expire = cale_mix(judge_mul_minus(str_expire))    return str_expireif name == "main":  while True:    user_input_expire = input("请输入你的公式:(不要带空格,q表示退出):")    print("%s=%s" %(us<b style="color:transparent">本文来源gao@!dai!ma.com搞$$代^@码网*</b>er_input_expire,remove_bracket(user_input_expire)))    continue

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python3.5 + PyQt5 +Eric6实现的一个计算器方法(附代码)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址