组合、计算器
面向对象的组合
- 组合:一个类的对象是另一个对象的属性
# 学生类 姓名,性别,年龄,学号,班级,手机号
# 班级类 班级名字 开班级时间 当前讲师
class Student:
def __init__(self,name,sex,age,number,clas,phone):
self.name=name
self.sex=sex
self.age=age
self.number=number
self.clas=clas
self.phone=phone
class Clas:
def __init__(self,cname,beging,teacher):
self.cname=cname
self.beging=beging
self.teacher=teacher
py22=Clas('python','2019-4-26','xiaoliu')
py23=Clas('python','2019-5-26','xiaowu')
敏敏=Student('敏敏','male',18,27,py23,'13835787011')
小童=Student('小童','male',18,17,py22,'13835787022')
# 查看敏敏所在班级的开班日期 (把班级信息当作参数传入学生类)
print(敏敏.clas.beging)
# 查看小童所在班级的开班日期
print(小童.clas.beging)
class Clas:
def __init__(self,cname,beging,teacher):
self.cname=cname
self.beging=beging
self.teacher=teacher
class Course:
def __init__(self,name,period,price):
self.name=name
self.period=period
self.price=price
python=Course('python22',10,'20000')
Linux=Course('Linux57',6,'15000')
py22=Clas('python22','2019-4-26','xiaoliu')
Lin57=Clas('Linux57','2019-5-26','xiaowu')
Lin58=Clas('Linux57','2019-5-26','xiaowu')
# 修改linux的价格为30000
Linux.price=30000
# 要求查看 Linux57期班级所学课程的价格
Lin57.cname=Linux
print(Lin57.cname.price)
Lin58.cname=Linux
print(Lin58.cname.price)
# 要求查看 python22期班级所学课程的周期
py22.cname=python
print(py22.cname.period)
计算器
思路:
- 先算乘除
- 进行正则匹配,计算两个数的乘法或除法
- 切割*/两边的数字,然后进行计算
- 把计算得到的结果在原计算公式中进行替换,后循环继续进行计算表,知道没有乘除之后退出
- 后计算加减
- 把计算完乘除之后剩余的公式进行正则匹配,得到['1', '+2', '+3', '+4.6']
- 使用reduce进行累加
import re
def mul_dic(exp):
#"3*4" "5/6"
if "*" in exp:
a,b=exp.split('*')
return float(a)*float(b)
if "/" in exp:
a,b=exp.split('/')
return float(a) / float(b)
from functools import reduce
suan=input('请输入算法:')
def remove_muldiv(exp):
while True:
ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?', exp) #只匹配乘法或除法
if ret:
son_exp=ret.group()
# print(son_exp)
res=mul_dic(son_exp)
exp=exp.replace(son_exp,str(res)) #将得到的结果和之前的数字进行替换
else:
break
return exp
exp=remove_muldiv(suan)
print(exp)
# 格式整理
def emp_fmt(exp):
while re.search('[+-]{2,}',exp):
exp=exp.replace('--','+')
exp=exp.replace('+-','-')
exp=exp.replace('-+','-')
exp=exp.replace('++','+')
return exp
exp=emp_fmt(exp)
print(exp)
# 方式二
def remove_addsub(exp):
ret = re.findall('[+-]?\d+(?:\.\d+)?', exp)
print(ret)
res=reduce(lambda a,b:float(a)+float(b),ret)
return res
s=remove_addsub(exp)
print(s)
# 方式一
# def remove_addsub(exp):
# ret = re.findall('[+-]?\d+(?:\.\d+)?', exp)
# count=0
# for i in ret:
# count+=float(i)
# return count
# s=remove_addsub('1+2+3+4.6')
# print(s)