day19 课程内容:

第19天的课程就是复习一些正则表达式,以及说一下计算器的思路,我就把我做的计算器代码当这一天的内容吧。

计算器作业:不eval函数,计算能计算:'1-2*((60-30-8*(9-10/3+7/297/9000+10*568/14))-(-4*3)/(16-3*2))' 的计算器

用了三天两夜才算写出来,接触正则刚开始的时候,更喜欢使用re.findall() 但是真的在实战中,我切身的感觉到,re.search()才是最常用的,因为比较好跟循环配合使用。

还有就是代码的逻辑,一开始,我写计算器的时候,恨不得一个函数解决战斗,结果盘根错节的直接蒙了。同样优先级的,同样功能的函数,要单写成一个函数,然后以备调用

这样可以很大程度的提升逻辑的清晰度,以免除了错,没办法找bug,只能删掉所有代码从头开始写(我是深受其苦啊),好在最后,终于写出来了,三天两夜啊,只写了个计算器

看来程序员,真的是一个容易猝死的职业啊。

#s=1-2*((60-30-8*(9-10/3+7/297/9000+10*568/14))-(-4*3)/(16-3*2))
#判断有没有字母,支持浮点型
import re,time def start(): #检查字符串里是否有非法字符
flag=True
while flag:
s=input('请输入要计算的内容s:')
if re.search('[a-zA-Z]',s):
print('输入内容含有非法内容')
elif s=='':
print('输入算式为空,请重新输入')
else:
print('正在计算……')
flag=False
#print(s)
return s
def md_sy(s): #去除不合规字符
s=s.replace(' ','')
s=s.replace('+-','-')
s=s.replace('--','+')
s = s.replace('-+', '-')
s = s.replace('++', '+')
return s
def cc(s='(60-30-8*411.3809549998)'):
flag = True
while flag:
ret = re.search('\d+\.?\d*[*/]\d+\.?\d*', s)
if ret:
x = ret.group()
if '*' in x:
li = re.split('[*]', x)
y = float(li[0]) * float(li[1])
y = '{:.10f}'.format(y)
s = s.replace(x, y)
else:
li = re.split('/', x)
y = float(li[0]) / float(li[1])
y = '{:.10f}'.format(y)
s = s.replace(x, y)
else:
flag = False
return s
def jj(s='(-12.0000000000)'):
if re.search('\(-?\d+\.?\d*\)', s):
s = s[1:-1]
else:
flag = True
if s[1] == '-':
head_li = re.findall('\((-\d*\.?\d*)', s)
# print(head_li)
ret = re.search('\(-\d*\.?\d*', s)
s = '(' + s[len(ret.group()) + 1:]
# print(s)
while flag:
ret = re.search('\d+\.?\d*[+-]\d+\.?\d*', s)
if ret:
x = ret.group()
# print(x)
if '+' in x:
li = re.split('[+]', x)
y = float(li[0]) + float(li[1])
y = '{:.10f}'.format(y)
s = s.replace(x, y)
else:
li = re.split('-', x)
y = float(li[0]) - float(li[1])
y = '{:.10f}'.format(y)
s = s.replace(x, y)
else:
s = s[1:-1]
head_li.append(s)
s = float(head_li[0]) + float(head_li[1])
s = str(s)
flag = False
else:
while flag:
ret = re.search('\d+\.?\d*[+-]\d+\.?\d*', s)
if ret:
x = ret.group()
# print(x) if '+' in x:
li = re.split('[+]', x)
y = float(li[0]) + float(li[1])
y = '{:.10f}'.format(y)
s = s.replace(x, y)
else:
li = re.split('-', x)
y = float(li[0]) - float(li[1])
y = '{:.10f}'.format(y)
s = s.replace(x, y)
else:
s = s[1:-1]
flag = False
return s
def hj(s='1-2*-3259.8476399984/2.000*5*6*9*666'):
flag=True
while flag:
ret = re.search('\d+\.?\d*[*/]-\d+\.?\d*', s)
if ret:
if '*' in ret.group():
li = re.split('[*]', ret.group())
s1 = float(li[0]) * float(li[1])
s1 = '{:.10f}'.format(s1)
s = s.replace(ret.group(), s1)
else:
li = re.split('/', ret.group())
s1 = float(li[0]) /float(li[1])
s1 = '{:.10f}'.format(s1)
s = s.replace(ret.group(), s1)
else:
break
return s
def ccjj(s='1-6519.6952799968/2.000*5*6*9*666'):
flag1=True
while flag1:
ret=re.search('\d+\.?\d*[*/]\d+\.?\d*',s)
if ret:
if '*' in ret.group():
li=re.split('[*]',ret.group())
s1=float(li[0])*float(li[1])
s1='{:.10f}'.format(s1)
s=s.replace(ret.group(),s1)
else:
li = re.split('/', ret.group())
s1 = float(li[0]) / float(li[1])
s1 = '{:.10f}'.format(s1)
s = s.replace(ret.group(), s1)
else:
flag1=False
flag2=True
while flag2:
ret = re.search('\d+\.?\d*[+-]\d+\.?\d*', s)
if ret:
if '+' in ret.group():
li = re.split('[+]', ret.group())
s1 = float(li[0]) + float(li[1])
s1 = '{:.10f}'.format(s1)
s = s.replace(ret.group(), s1)
else:
li = re.split('-', ret.group())
s1 = float(li[0]) - float(li[1])
s1 = '{:.10f}'.format(s1)
s = s.replace(ret.group(), s1)
else:
flag2 = False
return s
def jsq(s='1-2*((60-30-8*(9-10/3+7/297/9000+10*568/14))-(-4*3)/(16-3*2))'):
flag=True
while flag:
ret=re.search('\([^()]+\)',s)
if ret:
x=ret.group()
#print(x)
y=jj(cc(x))
#print(y)
s=s.replace(x,y)
s=md_sy(s)
#print('s:',s)
#time.sleep(3)
else:
s=md_sy(s)
s=hj(s)
s=md_sy(s)
s=ccjj(s)
flag=False
return s s=start()
print(jsq(s))

  

												

老男孩Python全栈开发(92天全)视频教程 自学笔记19的更多相关文章

  1. 老男孩Python全栈开发(92天全)视频教程 自学笔记02

    day2课程目录: 操作系统的历史 二进制运算 字符编码与计算机容量 编程语言介绍 开发语言分类 演讲能力锻炼 day2课程内容梳理: 操作系统发展史: Unix系统 极其稳定 现在很多银行还在用 L ...

  2. 老男孩Python全栈开发(92天全)视频教程 自学笔记03

    day3课程目录: pyhton的历史 32bit和64bit系统的区别 Python版本的选择 第一个pyhton程序 文件后缀名及系统环境变量的介绍 pyhton程序的执行和其他编程语言的简单对比 ...

  3. 老男孩Python全栈开发(92天全)视频教程 自学笔记01

    day1课程目录: 开课介绍(1) 开课介绍(2) 开课介绍(3) 电脑简史(1) 电脑简史(2) 计算机结构 day1课程内容梳理: 导师介绍: Alex Li(金角大王):买了一辆特斯拉,喜欢姑娘 ...

  4. 老男孩Python全栈开发(92天全)视频教程 自学笔记09

    day9课程内容: 乌班图(ubuntu)64位系统 和 VMware 虚拟机安装(官网收费又麻烦,在网上找资源 安装vmware: vm运行(秘钥找度娘)--文件--新建虚拟机--自定义 下一步-- ...

  5. 老男孩Python全栈开发(92天全)视频教程 自学笔记20

    day20课程内容: 模块: #模块一共三种:1.Python标准库 2.第三方模块 3.应用程序自定义的模块#import sysimport jisuanapp#print(jisuanapp.a ...

  6. 老男孩Python全栈开发(92天全)视频教程 自学笔记07

    day7课程内容: Python的编码解码 二进制 --->ASCII:只能存英文和拉丁字符,一个字符占一个字节,8位 ------->gb2312:只能6700多个中文,1980年 -- ...

  7. 老男孩Python全栈开发(92天全)视频教程 自学笔记06

    day6课程内容: tuple(元祖) 创建元祖: tup0=() #没有元素的一个元祖 tup1=(20,)#只有一个元素的元祖 元祖可读,不可修改 Dictionary(字典)#Python里唯一 ...

  8. 老男孩Python全栈开发(92天全)视频教程 自学笔记05

    day5课程内容: 集成开发环境(IDE) VIM #经典的Linux下的文本编辑器 Eclipse #Java IDE Visual Studio #微软开发的IDE notepad++ subli ...

  9. 老男孩Python全栈开发(92天全)视频教程 自学笔记04

    day4课程目录: 逻辑运算符 while循环 day4课程内容梳理: 逻辑运算符 算数运算符:+,-,*,/,%,** 比较运算符:< ,>, ==,<=,>=,!=, 逻辑 ...

  10. 老男孩Python全栈开发(92天全)视频教程 自学笔记21

    day21课程内容:  json: #序列化 把对象(变量)从内存中 编程可存储和可传输的过程 称为序列化import jsondic={'name':'abc','age':18}with open ...

随机推荐

  1. JavaScript ECMAScript版本介绍

    1. 介绍 1.1 什么是ECMAScript ECMAScript,简称ES,是由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers ...

  2. django url路由参数错误

    出现错误: TypeError get() got an unexpected keyword argument 'teacher_id 出错原因: view类中,get方法获得了一个多余的额参数,这 ...

  3. 00_HTML入门第二天

    PS切图 快捷键操作无效,原因是没有切换到英文输入状态 常用快捷键新建 CTRL+N       打开 CTRL+O关闭 CTRL+W保存 CTRL+S 另存为 CTRL+SHIFT+S       ...

  4. C# 多线程复习笔记

    编码的日子其实也有一段时间了,但是,作为一个客户端程序,因为自己是做游戏开发的,一直没有对线程这个概念比较模糊吧. 记录下线程的整理学习路线.原文:http://www.cnblogs.com/min ...

  5. 【转】awk 数组用法【精华贴】

    文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk的数组,一种关联数组(Associative ...

  6. SQL查询系列1---

    1.查询关系为夫妻,年龄相加大于60的信息 表1 信息表 info id 编号   sex 性别 0-女,1-男 age 年龄   表2 关系表 rel id1 编号1 外键 id2 编号2 外键 r ...

  7. JAVA设计模式---迭代器模式

    1.定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 2.实例:1)需求: 菜单(煎饼屋菜单.餐厅菜单和咖啡菜单)采用不同的集合存取(ArrayList,String[] ...

  8. 网易云免费OSS服务用做Markdown图床或博客图片外链

    我使用据说是Windows下最好用的Markdown编辑器“MarkdownPad2”(个人感觉还是Visual Code+Markdown插件666)写Markdown,在贴图方面遇到一个问题,于是 ...

  9. ElasticSearch 6 Windows 安装

    前言 目前使用ElasticSearch 6.2最新版本,这里记录其在windows 2012R2系统上的安装步骤. 安装 1. 安装java,最新版本的ElasticSearch 需要java8 版 ...

  10. ABP官方文档翻译 2.6 定时

    定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...