#!/usr/bin/evn python
import re
def deal_negative_issue(calc_list):
new_calc_list =[] #Definieren Sie eine neue leere Liste und fügen Sie die Daten dann in die neue Liste ein, nachdem die Filterung abgeschlossen ist
for index,item in enumerate(calc_list):
if item.strip().endswith("*") oder item.strip().endswith("/"): #Wählen Sie die -Zeichenfolge aus, die mit einem Multiplikationszeichen oder Divisionszeichen endet
new_calc_list.append("%s-%s"%(calc_list[index],calc_list[index+1])) #Splicing-String-Verarbeitung ähnelt 2*5/-3
# elif ( „*“ oder „/“) in Element: #Suchen Sie die Optionen mit Multiplikation und Division in der Liste. Ich habe diese Schreibweise ausprobiert und es scheint, dass sie nur mit * übereinstimmt, aber 40/5 allein stimmt nicht mit
überein elif ("/ ") im Element oder ("*") im Element:
🎜> return new_calc_list
def deal_unusual_issue(formula):
Formula = Formula.replace ("++", "+")
Formel = Formel.replace(" +-", "-") Formel = Formel.replace("-+", "-") Formel = Formula.replace("--", "+")
Formula = Formula .replace("- -", "+")
Formel zurückgeben
# def Addition_and_Subtraction(Formel):
# sub_calc_list = re.split("[+-]",formula)
# sub_operator_list = re.findall("[+-]",formula)
# print(type(sub_calc_list), sub_operator_list )
# totle_res = None
# für index,i in enumerate(sub_calc_list ):
# wenn totle_res: #sub_res wahr ist, was anzeigt, dass dies nicht die erste
Schleife
# if sub_operator_list[index-1]=="+": #Nach Index in sub_operator_list Bestimmen Sie, ob es sich um Addition oder Subtraktion handelt totle_res -= float(i)
# else:
# sub_res = float(i )
# print(totle_res)
def rechnen(formel):
print("operation",formula)
calc_list = re.split("[+-]" ,Formel) #Trennen Sie jede Multiplikations- und Divisionsoperation durch ein +-Zeichen calc_list = deal_negative_issue(calc_list) print(calc_list)
für Element in calc_list: sub_calc_list = re.split("[* /]",item) sub_operator_list = re.findall("[*/]",item) #Trennen Sie die Multiplikations- und Divisionszeichen in einer Liste
print (sub_calc_list,sub_operator_list)
sub_res = None
für index,i in enumerate(sub_calc_list):
wenn sub_res: #sub_res wahr ist, was anzeigt, dass dies nicht das erste Mal in der Schleife ist
if sub_operator_list[index-1]=="*": #Bestimmen Sie, ob es sich um eine Addition oder Subtraktion durch den Index in sub_operator_list handelt, sub_res /= float(i ) Sonst:
sub_res = Float (i)
Print ("[%s] ="%item, sub_res)
Formula = Formula.replace (ITEM, STR (SUB_RS)) )
Formula = deal_unusual_issue(formula)
print(formula )
#Berechnung+-Methode
totle_calc_list = re.split("[+-]", Formel)
totle_operator_ list = re.findall("[+-]", Formel) # Trennen die Multiplikations- und Divisionszeichen in einer Liste
print(totle_calc_list, totle_operator_list)
totle_res = None
für Index, Element in Enumerate( totle_calc_list):
if totle_res: #sub_res ist wahr, was darauf hinweist, dass dies der Fall ist ist nicht der erste Zyklus
if totle_operator_list[index-1]=="+": #Bestimmen Sie, ob es sich um eine Addition oder Subtraktion durch den Index in sub_operator_list handelt
Totle_res+= Float (item)
Sonst:
TOTLE_RES- = Float (Element)
Sonst:
TOTLE_RES = Float (Element)
#Return-Formel
Drucken Sie „[result]=", totle_res)
return totle_res
def calc(formula):
parentheses_flag = True
calc_res = None
while
parentheses_flag:
m = re.search("([^()]* )",formula) #Finden Sie die unteren Klammern, eine nach der anderen
print(m) if m: # Print (Type (m.group ()))
subformula = m.group (). Strip ("()")#Gefundene Klammern entfernen
Subres = Calculated (subformula)
FORMULA = Formula.replace(m.group(),str(subres))
else: parentheses_flag = Falsch
if name == '
main
':
res = calc("1 - 2 * ( (60-30 +(9-2*5/-3 + 7 /3*99/4*2998 +10 * 568/14 ) * (40/5)) - (4*3)/ (16-3*2) )")
#res = calc(" 2 * (40/5)")
#Hinweis: -40/5-Funktion ist nicht implementiert
Das obige ist der detaillierte Inhalt vonSchreiben Sie eine Taschenrechnermethode mit regulären Python-Ausdrücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!