开发一个简单的python计算器
详解:
1.str.split(分隔符):将str按分隔符进行切片,最后形成的是列表类型
eg:
str = "Line1-abcdef \nLine2-abc \nLine4-abcd"; print str.split( ); print str.split(' ', 1 ); >>['Line1-abcdef', 'Line2-abc', 'Line4-abcd'] >>['Line1-abcdef', '\nLine2-abc \nLine4-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 * ( (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()
本博客只记录个人的学习过程,如对文中有不懂的地方,可以在评论区留言!