作业需求:

模拟计算器开发:

实现加减乘除及拓号优先级解析

用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

思路解析:

1. 先实现基本+-*/

2. 使用re正则模块优先解析最内测的拓号进行运算

程序核心代码:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author: Colin Yao

"""模拟计算器开发作业"""

import re

def operator_update(formula):

formula = formula.replace(" ", "")

formula = formula.replace("+-", "-")

formula = formula.replace("--", "+")

return formula

def calc_muldiv(formula_list):

for index, element in enumerate(formula_list):

if "*" in element or "/" in element:

operators = re.findall("[*/]", element)

calc_list = re.split("[*/]", element)

num = None

for i, e in enumerate(calc_list):

if num:

if operators[i - 1] == "*":

num *= float(e)

elif operators[i - 1] == "/":

num /= float(e)

else:

num = float(e)

formula_list[index] = num

return formula_list

def calc_plumin(operators, num_list):

num = None

for i, e in enumerate(num_list):

if num:

if operators[i - 1] == "+":

num += float(e)

elif operators[i - 1] == "-":

num -= float(e)

else:

num = float(e)

return num

def merge(plus_minus_operator, multiply_divide_list):

for index, element in enumerate(multiply_divide_list):

if element.endswith("*") or element.endswith("/"):

multiply_divide_list[index] = element + plus_minus_operator[index] + multiply_divide_list[index + 1]

del multiply_divide_list[index + 1]

del plus_minus_operator[index]

return merge(plus_minus_operator, multiply_divide_list)

return plus_minus_operator, multiply_divide_list

def bracket_calc(formula):

formula = re.sub("[()]", "", formula) # 去除两边的()

formula = operator_update(formula)

plus_minus_operator = re.findall("[+-]", formula)

multiply_divide_list = re.split("[+-]", formula)

if multiply_divide_list[0] == "":

multiply_divide_list[1] = "-" + multiply_divide_list[1]

del plus_minus_operator[0]

del multiply_divide_list[0]

res = merge(plus_minus_operator, multiply_divide_list)

plus_minus_operator = res[0]

multiply_divide_list = res[1]

plus_minus_list = calc_muldiv(multiply_divide_list)

res = calc_plumin(plus_minus_operator, plus_minus_list)

return res

def calculate(formula):

while True:

formula_depth = re.search("\([^()]+\)", formula)

if formula_depth:

formula_depth = formula_depth.group()

res = bracket_calc(formula_depth)

formula = formula.replace(formula_depth, str(res))

print(formula)

else:

res = bracket_calc(formula)

print(res)

exit()

if __name__ == '__main__':

msg = '''

进行解析()的运算

例如:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )

'''

print(msg)

formula = input("请输入要进行的运算>>>:")

# formula = "1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"

calculate(formula)

程序测试样图:

Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

Python作业模拟登陆(第一周)

模拟登陆:1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 思路: 1. 用户名密码文件为passwd,锁定用户文件为lock 2. 用户输入账号密码采用i ...

python作业简单FTP(第七周)

作业需求: 1. 用户登陆 2. 上传/下载文件 3. 不同用户家目录不同 4. 查看当前目录下文件 5. 充分使用面向对象知识 思路分析: 1.用户登陆保存文件对比用户名密码. 2.上传用json序 ...

python作业高级FTP(第八周)

作业需求: 1. 用户加密认证 2. 多用户同时登陆 3. 每个用户有自己的家目录且只能访问自己的家目录 4. 对用户进行磁盘配额.不同用户配额可不同 5. 用户可以登陆server后,可切换目录 6 ...

python作业学员管理系统(第十二周)

作业需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学 ...

Python作业选课系统(第六周)

作业需求: 角色:学校.学员.课程.讲师.完成下面的要求 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 ...

python作业day4计算器

思路: 用循环提取最里面的括号,再进行运算 运算时利用正则表达式寻找相应的运算符 先进行乘除,再进行加减 (参考武sir和金角大王的代码) 流程图: 代码: #!/usr/bin/env python ...

Python作业工资管理系统(第三周)

作业内容: 实现效果: 从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件. 效果演示: 1. 查询员工工资 2. 修改员工工资 3. 增加新员工 ...

python作业:三级菜单(第一周)

一.作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二.三级菜单 ...

随机推荐

ssh保持链接

修改/etc/ssh/sshd_config配置文件 ClientAliveInterval 300(默认为0), 参数的是意思是每5分钟,服务器向客户端发一个消息,用于保持连接,使用service ...

[zz] Pixar’s OpenSubdiv V2: A detailed look

http://www.fxguide.com/featured/pixars-opensubdiv-v2-a-detailed-look/ Pixar’s OpenSubdiv V2: A detai ...

探索 Linux 内存模型--转

引用:http://www.ibm.com/developerworks/cn/linux/l-memmod/index.html 理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计 ...

HTTP - 基本认证

有数百万的人在用 Web 进行私人事务处理,访问私有的数据.通过 Web 可以很方便地访问这些信息,但是仅仅是方便访问还是不够的.我们要保证只有特定的人能看到我们的敏感信息并且能够执行我们的特权事务. ...

有关sybase的一些零星经验

clear transaction log >dump transaction master with truncate_only >dump transaction master wit ...

mac 神奇时光机

http://bbs.zol.com.cn/nbbbs/d544_8216.html

Go 解析JSON

JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读.尽管JSON是JavaScript的一个子集,但JSON是独立于 ...

Android_Studio常用插件

Android studio常用插件,可极大简化开发,增强开发效率. 不懂安装studio插件,看参考博文:android stuido插件安装:http://blog.csdn.net/liang5 ...

基础--Redis在Windows环境下的安装

1. 安装Redis 1.1 下载安装包 https://github.com/ServiceStack/redis-windows#3-run-the-redis-serverexe-using-t ...

ubuntu14.04 python2.7 安装配置OpenCV3.0

环境:ubuntu14.04  python2.7 内容:安装并配置OpenCV3.0 今天按照OpenCV官网上的步骤装了OpenCV但是,装好之后python提示“No module named ...

python计算器实验报告_python作业模拟计算器开发(第五周)相关推荐

  1. python综合实验报告_Python程序设计实验报告五:综合运用三种基本结构进行程序设计(综合性实验)...

    安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名姚彩琴学号3190505129 成绩 日期 2020.4.22 指导老师修宇 [实验名称]综合运用三种基本结构进行程序设计(综合性实 ...

  2. python综合实验报告_Python程序设计 实验报告

    安徽工程大学 Python程序设计 实验报告 班级:物流192       姓名:刘马汉卿学号:319005211 成绩:            日期:2020年4月29日        指导老师:修 ...

  3. python数据分析实验报告_Python数据分析综合小练习:销售数据分析

    有这样一个小小的练习题: 卖电子商品的老板,每天记录了自己卖出的U盘,电脑支架,插座,电池,音箱,鼠标,usb数据线,手机充电线等数量,客户的需求是一方面,也可以通过客户购买关联性比较强的商品进行引导 ...

  4. python简单计算器综合实验报告_python之简单计算器

    importre#问题:让用户选择1,2不现实,如何让用户自动加减乘除#思考:现在已经能够处理,单个的加减或乘除#可否在混合中先分组出(乘除) eg: ['8+9+','9*4/3','-','4*2 ...

  5. python设计计算器实验报告_Python实验-计算器

    一 从字符串中提取 Token 的步骤是顺序读取字符,判断字符类型,然后把 Token 的类型和值存入 Token 列表. 输入字符串处理 提取offset位置处的一个字符 如果没有后续字符则返回No ...

  6. python爬虫实验报告_python爬虫实验

    原博文 2013-06-28 13:30 − 那天在新浪微博上看到北北出的题目,由于最近也在做类似的爬虫研究,所以就有了这个实验. 后来在QQ上和北北说了下,要求是啥都抓,就抓乌云的... 然后就开始 ...

  7. python数据分析实验报告_Python 数据分析入门实战

    本训练营中,我们将学习怎么样使用 Python 进行数据分析.课程将从数据分析基础开始,一步步深入讲解.从 Python 的基础用法到数据分析的各种算法,并结合各种实例,讲解数据分析过程中的方方面面. ...

  8. python面向对象实验报告_Python 面向对象 | 菜鸟教程

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  9. python投资分析实验报告_Python的实验报告怎么写?

    以面向对象程序设计实验为例: 一.实验目的了解面向对象程序设计思想 了解对象.类.封装.继承.方法.构造函数和析构函数基本概念 掌握定义类.成员变量.成员函数.静态变量和静态方法 掌握通过类定义实现继 ...

  10. python冒泡排序实验报告_python中的冒泡排序

    首先,再将python的冒泡排序之前,先来复习一个python中的自带排序函数:sort(但是这个函数是没有返回值的,并且只能针对列表,大家使用的时候需要注意一下): 例子如下: li=[11,22, ...

最新文章

  1. java-web hibernate中的懒加载问题
  2. TeeChart中 Line的Clear方法
  3. OSGi Testsuite:引入类名过滤器
  4. antd option宽度自适应_WordPress文章中添加自适应宽度的表格——墨涩网
  5. Chrome 开发工具指南——通过工作空间保存更改
  6. Kubernetes 学习总结(23)—— 2022 年 Kubernetes 的 5 个趋势
  7. MD5工具类 加盐加密 及编码
  8. [论文阅读] Self-supervised Correction Learning for Semi-supervised Biomedical Image Segmentation
  9. 做了 5 年运维,靠着这份监控知识体系,我从 3K 变成了40K | 原力计划
  10. 孪生素数问题--nyoj26
  11. 单片机c语言延时1ms函数,单片机c语言延时函数用int与char有延时差吗?
  12. react-native系列(11)组件篇:Image图片加载和ImageEditor图片剪切
  13. 多个数的最小公倍数求法
  14. 期权定价模型之Merton模型的校准与定价【python量化】
  15. 高清HDMI高清编码器(HDMI网络传输器)使用及前景
  16. AD7606-4输出数据异常
  17. ariang修改默认服务器,Aria2一键安装脚本,宝塔面板搭建AriaNg前端面板
  18. 将图片名写入txt文件 根据txt文件中的图片名提取特定图像 将图片插入word
  19. sha1安全码校验工具(apk)
  20. Web3在中国,房间里的大象

热门文章

  1. 网络基础知识详解(图解版)
  2. 肇庆学院计算机选修旷课,化学化工学院考查课管理办法(试行)
  3. 组装机怎么重装系统?组装机U盘装系统方法
  4. Ant 下载安装配置使用教程
  5. Sql语句区分中英文
  6. android获取ssid,Android系绳 – 获取当前的SSID
  7. 计算机网络:第四章网络层课后习题及答案(精细版)
  8. fHash(哈希校验工具)v2.1.9 绿色版
  9. 计算机网络学习笔记11(P2P)
  10. Sql取得两表关联数据