首页 > 代码库 > python实现字符串计算器

python实现字符串计算器

  看兄弟连的Alex视频提到一题作业:计算字符串 "1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"()不可以用eval)

我试了下,实现思路可能稍微有点复杂,不过代码不是很复杂,仅做参考。

import re

def get_parentheses(s):
	s = s.replace(‘ ‘,‘‘)  #空格去掉
	#print(s)
	#print("====================")
	while True:
		L = re.findall("\([+\-\*/\d\.]+\)", s)    #找到所有最内层的括号
		if L:
			for i in L:
				tmp = i.strip(‘()‘)
				result = get_multiplicative_division(tmp)
				s = s.replace(i,result)
				s = s.replace(‘+-‘,‘-‘)
				s = s.replace(‘--‘,‘+‘)	
			#	print(s)
			#	print("====================")
		else:
			s = get_multiplicative_division(s)
			break
	return s

"""
    get_multiplicative_division函数用来计算无括号的表达式,实现思路应该能理解
"""	
def get_multiplicative_division(s):
	num_list = re.findall(‘[\-]?[\d\.]+‘,s)
	sign_list = re.findall(‘[+\*/]‘,s)
	for i, s  in enumerate(num_list):
		if ‘-‘ in s and i >0 and len(sign_list)<len(num_list)-1:
			sign_list.insert(i - 1,‘+‘)
		
	for i, s in enumerate(sign_list):
		if s ==‘*‘ :
			num_list[i+1] = float(num_list[i]) * float(num_list[i+1])
			num_list[i] = 0
		elif s == ‘/‘:
			num_list[i+1] = float(num_list[i]) / float(num_list[i+1])
			num_list[i] = 0
		else:
			continue
	result = 0
	for i in num_list:
		result += float(i)
	return str(result)

		

if __name__ == ‘__main‘:
	s = "1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"
	print(get_parentheses(s))

  

  其实,个人觉得实现方法很多,只是实现思路不同而已。

python实现字符串计算器