组合计算器

Posted 小仙女~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合计算器相关的知识,希望对你有一定的参考价值。

面向对象的组合

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

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)

以上是关于组合计算器的主要内容,如果未能解决你的问题,请参考以下文章

如何组合绑定片段而不将它们包装在 XML 文字中

48个值得掌握的JavaScript代码片段(上)

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)

片段组合在 Relay 中是如何工作的?

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

为 memcached 和 Rails 组合片段和对象缓存的最佳方式