组合、计算器

面向对象的组合

  • 组合:一个类的对象是另一个对象的属性
# 学生类 姓名,性别,年龄,学号,班级,手机号
# 班级信息
# 班级名字 开班级时间  当前讲师

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. 把计算得到的结果在原计算公式中进行替换,后循环继续进行计算表,知道没有乘除之后退出
  • 后计算加减
    1. 把计算完惩处之后剩余的公式进行正则匹配,得到['1', '+2', '+3', '+4.6']
      1. 使用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)
上一篇:namesilo | 设置自定义域名为hexo博客


下一篇:cdn原理和配置猜想