• 开发一个简单的python计算器


    详解:

    1.str.split(分隔符):将str按分隔符进行切片,最后形成的是列表类型

    eg:

    str = "Line1-abcdef 
    Line2-abc 
    Line4-abcd";
    print str.split( );
    print str.split(' ', 1 );
    
    >>['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
    >>['Line1-abcdef', '
    Line2-abc 
    Line4-abcd']
    

    2.str.join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串。

    语法: 'sep'.join(seq)

    参数说明
    sep:分隔符。可以为空
    seq:要连接的元素序列、字符串、元组、字典
    上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

    返回值:返回一个以分隔符sep连接各个元素后生成的字符串

    3.sub():按指定的字符进行替换。

    Sub(replacement,string[,count =0 ]) 

    1)返回的字符串是在字符串中用RE最左边不重复的匹配来替换。如果模式没有被发现,字符将没有被改变的返回。

    2)可选参数count是模式匹配后替换的最大次数;count必须是非负整数。缺省值是0表示替换所有的匹配。

    4.grop():获取分段截获的字符串.

    需求:

    1. 实现加减乘除及拓号优先级解析
    2. 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式。
    #coding:utf-8
    import re
    
    def main():
    
        a = ''.join(raw_input('请输入需要计算的算式').split())
    
        while True:
            if '(' in a:
                ct = re.search(r'(([^()]+))', a)
                if ct is not None:
                    b = ct.groups()[0]
                    
                    c = count(b)
                    a = re.sub(r'(([^()]+))', str(c), a, 1)
            else:
                c = count(a)
                print(c)
                break
    
    def add_min(a):
        '''
        计算加减法
        :param:
        :return:
        '''
    
        if '--' in a:
            a = a.replace('--', '+')
    
        c = re.findall(r'-?d+.?d*', a)
        ls = []
        for i in c:
            ls.append(float(i))
        rest = sum(ls)
        return rest
    
    
    def mul(a):
        '''
        计算剩数
        :param ct:
        :return:
        '''
    
    
        b = re.search(r'd+.?d*(*-?d+.?d*)+', a)
        if b is not None:
            b = b.group()
            rest = 1
            c = re.findall(r'-?d+.?d*', b)
            ls =[]
            for item in c:
                ls.append(float(item))
            for i1 in range(len(ls)):
                rest = rest * ls[i1]
            a = re.sub(r'd+.?d*(*-?d+.?d*)+', str(rest), a, 1)
            return a
    
    
    
    def div(a):
        '''
        计算出发
        :param a:
        :return:
        '''
    
        b = re.search(r'd+.?d*(/-?d+.?d*)+', a)
        if b is not None:
            b = b.group()
            c = re.findall(r'd+.?d*', b)
            #print c
            ls =[]
            for i in c:
                ls.append(float(i))
            rest = ls[0]
            for i1 in range(1,len(ls)):
                rest = rest / ls[i1]
            a = re.sub(r'd+.?d*(/-?d+.?d*)+', str(rest), a, 1)
            return a
    
    
    def count(b):
        '''
        计算结果
        :return:
        '''
        while True:
            if '*' in b:
                c = b.split('*')
                if '/' in c[0]:
                    b = div(b)
                else:
                    b = mul(b)
            elif '/' in b:
                b = div(b)
    
            elif '+' or '-' in b:
                b = add_min(b)
                return b
            else:
                return b
    
    
    
    
    main()
    
  • 相关阅读:
    powerdesigner与数据库之间的连接
    D9-Android自定义控件之动画篇1-ObjectAnimator
    01-React搭建react环境及SCSS的配置
    开源计划之--Android绘图库--LogicCanvas
    5-VVI-材料设计之ToolBar
    4-VVI-材料设计之沉浸标题栏和TextInputLayout
    D8-Android自定义控件之DotNum及item复用问题
    O3-开源框架使用之Butterknife 8.8.1及源码浅析
    TIII-Android技术篇之反射
    TVI-Android技术篇之注解Annotation
  • 原文地址:https://www.cnblogs.com/iexperience/p/9142173.html
Copyright © 2020-2023  润新知