团队-科学计算器-项目进度

进度:

import re

def md(l,x):
    = l.index(x)
    if == '*' and l[a + 1] != '-':
        = float(l[a - 1]) * float(l[a + 1])
    elif == '/' and l[a + 1] != '-':
        = float(l[a - 1]) / float(l[a + 1])
    elif == '*' and l[a + 1== '-':
        = -(float(l[a - 1]) * float(l[a + 2]))
    elif == '/' and l[a + 1== '-':
        = -(float(l[a - 1]) / float(l[a + 2]))
    del l[a - 1], l[a - 1], l[a - 1]
    l.insert(a - 1str(k))
    return l
def fun(s):
    = re.findall('([\d\.]+|/|-|\+|\*)',s)
    sum=0
    while 1:
        if '*' in and '/' not in l:
            md(l, '*')
        elif '*' not in and '/' in l:
            md(l, '/')
        elif '*' in and '/' in l:
            = l.index('*')
            = l.index('/')
            if a < b:
                md(l, '*')
            else:
                md(l, '/')
        else:
            if l[0]=='-':
                l[0]=l[0]+l[1]
                del l[1]
            sum += float(l[0])
            for in range(1len(l), 2):
                if l[i] == '+' and l[i + 1] != '-':
                    sum += float(l[i + 1])
                elif l[i] == '+' and l[i + 1== '-':
                    sum -= float(l[i + 2])
                elif l[i] == '-' and l[i + 1== '-':
                    sum += float(l[i + 2])
                elif l[i] == '-' and l[i + 1] != '-':
                    sum -= float(l[i + 1])
            break
    return sum
def calculate(expression):
    ex=[]
    ans=0
    if '(' not in expression:
        ans=fun(expression)
        return ans
    for in range(len(expression)):
        if expression[i]=='(':
            ex.append(i) #ex=[6,7]
        elif expression[i]==')'#14
            temp=0
            sub=expression[ex[len(ex)-1]+1:i]
            temp=fun(sub)
            expression=expression[0:ex[len(ex)-1]]+str(temp)+expression[i+1:len(expression)+1]
            ex.pop()
            return calculate(expression)
s='1 - 2 * ( (60-30 +(-40/5+3) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
print(1 - 2 * ( (60-30 +(-40/5+3* (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ))    #1735397.4095238098
s3='3*(4+50)-((100+40)*5/2-3*2*2/4+9)*(((3+4)-4)-4)'                                #518.0
print(3*(4+50)-((100+40)*5/2-3*2*2/4+9)*(((3+4)-4)-4))
print(calculate(s))                                                   #1735397.4095238098
print(calculate(s3)) 

在实现一个简单的计算器中:我们要注意的问题有很多。

一、加减乘除在什么时候开始计算

二、不带括号的计算

    计算乘除,在计算加减,计算一个最小计算单元后,再将结果放回列表中不断循环,直到算出整个不带括号的表达式

代码写到这里主要的功能实现了,但是上面的代码还有一个小问题,那就是如果我们的表达式如果是这样的 7*((1-4)-4) 我们按照程序流程执行的话执行一次fun的话,表达式变成这样 7*(-3-4),在执行一次的话就变成 7*-7,这样的话,我们在执行上面的fun函数就会出现问题,

1:定义最小的乘除运算单元,l是列表,x代表*或/:

2:首先获取乘除运算符的位置

3:如果是*则执行乘法运算

4:获取乘法运算的结果,比如k=3*2

5:删除掉列表里刚做运算的三个元素,比如,3 * 2

6:将刚计算的结果插入到列表中然后执行下一次计算

三、带有括号的计算

  计算最里面一个括号里的表达式,调用fun函数计算出其值,将其结果代替其括号,然后不停的递归调用直到获取最后的结果

1:存储'('出现的位置

2:#保存结果

3:#如果括号都处理完成了,直接调用fun函数返回结果

转载于:https://www.cnblogs.com/Brian-hui/p/7663353.html

《团队-科学计算器-项目进度》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. SpringBoot实现过滤器、拦截器与切片
  2. 智能音箱自己把自己黑了:随机购物拨号,自主开灯关门,平均成功率达88%
  3. POJ1742 Coins(DP)
  4. spring boot 配置动态刷新
  5. 屏蔽tomcat服务器报错信息,tomcat 屏蔽网络爬虫
  6. Vue基本操作及运行截图总结
  7. docker容器部署的应用启动日志在哪里看_在SAP云平台上部署和运行Docker应用
  8. java软件开发毕业论文_基于java软件毕业论文.doc
  9. 你想在网易云音乐中播放 QQ 音乐中下载的歌曲吗?用上它后助你秒实现!
  10. visual foxpro v6.0官方版
  11. java十大排序算法
  12. 开源项目(VC++,MFC)
  13. iguana::json/xml 序列化框架
  14. Python 小型项目大全 36~40
  15. WSL与idea集成攻略
  16. 第一道题目:一个美国人在菜市场上做生意。第一次,8美元买了一只鸡,9美元卖掉了;第二次,10美元买了同样的一只鸡,11美元又卖掉了。
  17. 极速办公如何在Excel中进行条件计数
  18. YOLO v5 引入解耦头部
  19. Oracle 备份失败报错ORA-04063: view SYS.KU_RADM_FPTM_VIEW has errors
  20. 哔哩哔哩php开发工作怎么样,[上海] [哔哩哔哩]-努力寻求[PHP /C++/Andro/iOS/前端开发工程师]-会是你吗?...

热门文章

  1. 简单介绍一下vue2.0
  2. React Native常用第三方汇总
  3. 一步一步教你安装Nginx+PHP+Mysql
  4. C#网络编程之 UDP编程
  5. 数据结构笔记(三十三)--二叉排序树的插入与生成
  6. 使用ORB_SLAM2的方式进行特征检测和提取
  7. unix linux 安装mono,关于mono在linux连接unixodbc的问题
  8. OpenCV图像处理(17)—— 各种二值化对比
  9. cmd做个定时弹窗_windows如何设置定时关机?
  10. python百度语音实时识别成文字_python 上传百度语音识别+文字返回结果