#!/usr/bin/evn python
import re
def deal_negative_issue(calc_list):
new_calc_list=[] #新しい空のリストを定義し、その後、新しいリストにデータを入れますフィルタリングが完了 リスト内
forのindex,item in enumerate(calc_list):
if item.strip().endswith("*") または item.strip().endswith("/" ): #Select 乗算または除算の記号で終わる文字列を出力 new_calc_list.append("%s-%s"%(calc_list[index],calc_list[index+1])) #文字列の結合処理は同様ですto 2*5/ -3
# elif ("*" or "/") in item: #乗算と除算を持つリスト内のオプションを見つける この書き方を試してみたところ、* のみに一致するようです。 40/5 だけでは、項目の
elif ("/") または項目の ("*") に一致しません:
return new_calc_list
def deal_unusual_issue (formula):
Formula = Formula.replace("++" ,"+")
式 = Formula.replace("+-", "-")
式 = Formula.replace("-+", "- ") 式 = Formula.replace("--", " +") 式 = 式.replace("- -", "+")
式を返す
# def 加算と減算(式):
# sub_calc_list = re.split("[+-]",式)
# sub_operator_list = re.findall("[+-]",formula)
# print(type(sub_calc_list), sub_operator_list)
# totle_res = None
# for Index ,i in enumerate(sub_calc_list):
# if totle_res: #sub_resは true で、これが初めてではないことを示します
loop
# if sub_operator_list[index-1]=="+": #sub_operator_list のインデックスで終了を判断します )
# else:
# sub_res = float(i)
# print(totle_res)
def Calculation(formula):
print("operation",formula)
calc_list = re.split("[+-]",formula) #それぞれを分離+- 記号による乗除算 calc_list = deal_negative_issue(calc_list) print(calc_list)
calc_list の項目の場合: sub_calc_list = re.split("[*/]",item) sub_operator_list = re.findall( "[*/]",item) # 乗算記号と除算記号を渡します list メソッドは print (sub_calc_list, sub_oprator_list) から分離されます
sub_res = none
for Index, I in enumerate (sub_calc_list):
if sub_res: # Sub_res は true です。これは、これが最初のループではないことを意味します
if sub_operator_list[index-1]=="*": #sub_operator_list のインデックスを使用して加算か減算かを判断します
sub_res /= float(i)
else:
= float(i)
、、、、 ,,, # 計算 +- メソッド
totle_calc_list = re.split("[+-]", Formula)
totle_operator_list = re.findall("[+-]", Formula) # リスト内の乗算と除算の符号を分離します
print( totle_calc_list, totle_operator_list)
totle_res = None
enumerate(totle_calc_list):のインデックス、項目の場合
totle_res: #sub_res が true の場合、これが最初のサイクルではないことを示します
if totle_operator_list[index- 1]== +": # sub_operator_list 内のインデックスのインデックス判定が加算か減算か、
Totle_res+= Float (項目)
Else:
TOTLE_RES-= Float (項目)
Else:
TOTLE_RES = FLOAT (項目)
# Return f ORMULAin Print ("[" ["[" [" result]=, totle_res)
return totle_res
def calc(formula):
括弧_flag = True
calc_res = None
while
括弧_flag:
m = re .search ("([^()]*)", Formula) #下括弧を 1 つずつ見つけます print(m)
if m:
#print(type(m.group()))
subformula = m .group().strip("()" )#見つかった括弧を削除します
Subres = 計算中 (部分式)
Formula = Formula.replace (m.group (), STR (Subres)) else: proprint ("括弧はありません")
Print 結果は ",calculated(formula))です
parseses_flag = False
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)")
#注: -40/5 関数は実装されていません
以上がPython 正規表現を使用して計算メソッドを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。