首页 > 代码库 > 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实现字符串计算器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。