Maison >développement back-end >Tutoriel Python >Écrivez une méthode de calcul en utilisant des expressions régulières Python

Écrivez une méthode de calcul en utilisant des expressions régulières Python

高洛峰
高洛峰original
2017-03-22 10:14:582277parcourir

Écrivez une méthode de calcul en utilisant des expressions régulières Python

#!/usr/bin/evn python
import re
def deal_negative_issue(calc_list):
new_calc_list =[] #Définissez une nouvelle liste vide, puis placez les données dans la nouvelle liste une fois le filtrage terminé
for index,item in enumerate(calc_list):
if item.strip().endswith("*") ou item.strip().endswith("/") : #Sélectionnez la chaîne se terminant par un signe de multiplication ou un signe de division
new_calc_list.append("%s-%s"%(calc_list[index],calc_list[index 1])) #Le traitement des chaînes d'épissage est similaire à 2*5/-3
# elif ( " *" ou "/") dans l'élément : #Trouvez les options avec multiplication et division dans la liste. J'ai essayé cette façon d'écrire et il semble que cela ne corresponde qu'à *, mais 40/5 seul ne correspond pas à
elif. ("/" ) dans l'élément ou ("*") dans l'élément :
                                                                                                     > return new_calc_list

def deal_unusual_issue(formula):
formula = formula.replace(" "," ")
formula = formula.replace(" -", " -") formula = formula.replace("- ", "-") formula = formula.replace("- -", " ")
formula = formula.replace("- -" , " ")
return formula

# def addition_and_subtraction(formula):
# sub_calc_list = re.split ("[ -]",formula)
# sub_operator_list = re.findall( "[ -]",formula)
# print(type(sub_calc_list), sub_operator_list)
# totle_res = Aucun
# for index,i in enumerate(sub_calc_list):
# if totle_res : # SUB_RES est vrai, indiquant que ce n'est pas la première fois que
boucle

#if sub_operator_list [Index-] = = "":#pour déterminer si l'index dans la SUB_OPERATOR_LIST est déterminé si =
float
(i)
#                                                                                                                                            sub_res = float(i) # print(totle_res)

def calculator(formula): print("operating",formula) calc_list = re.split("[ -]",formula ) #Séparez chaque opération de multiplication et de division par - symbole
calc_list = deal_negative_issue(calc_list) print(calc_list) pour l'élément dans calc_list :
sub_calc_list = re.split("[*/]" , Item) Sub_oprator_list = Re.findall (" [*/]", item)#Divisez le nombre de multiplication pour séparer le nombre
Print (sub_calc_list, sub_oprator_list)
sub_res = none
for index,i in enumerate(sub_calc_list):
if sub_res : #sub_res est vrai, indiquant que ce n'est pas le premier cycle
if sub_operator_list[index-1]=="*":       #Déterminer s'il s'agit d'une addition ou d'une soustraction via l'index dans sub_operator_list,                                                                                                                                    sub_res /= float(i ) Sinon :
sub_res = Float (i)

Imprimer ("[%s] ="%item, sub_res)
Formule = Formule.replace (ITEM, STR (SUB_RS)) )
formule = deal_unusual_issue(formula)
print(formule )

#Calculation-Method
totle_calc_list = re.split("[ -]", formula)
totle_operator_list =re .findall("[ -]", formula) # Séparez la multiplication et signes de division dans une liste
print(totle_calc_list, totle_operator_list)
totle_res = None
pour index, élément dans enumerate(totle_calc_list) :
si totle_res : #sub_res est vrai, indiquant que ce n'est pas le premier cycle
if totle_operator_list[index-1]==" " : #Déterminer s'il s'agit d'une addition ou d'une soustraction via l'index dans sub_operator_list,
totle_re s = float(item)
                                                                                                                                                                                            #formule de retour
print("[result]= ", totle_res)
return totle_res

def calc(formula):
parenthèses_flag = True
calc_res = None

while
parentheses_flag:
m = re.search("([^()]*)",formula) #Trouvez les crochets inférieurs, trouvez
un par un print(m)
if m:
# print(type(m .group ()))
Subformula = m.group (). Strip ("(" () ")#Décollez les parenthèses trouvées de
Subres = Calculating (sous-formule) Formule = formule.replace (m .group(),str(subres))                                                                                                                                                                                                                        🎜 >
if nom == '
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)" )

#Remarque : la fonction -40/5 n'est pas implémentée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn