#!/usr/bin/evn python
다시 가져오기
def deal_negative_issue(calc_list):
new_calc_list =[] # 새로운 빈 목록을 정의하고 필터링이 완료된 후 데이터를 새 목록에 넣습니다.
for index,item in enumerate(calc_list):
if item.strip().endswith("*") 또는 item.strip().endswith("/"): # 곱셈 기호나 나눗셈 기호로 끝나는 문자열을 선택합니다.
new_calc_list.append("%s-%s"%(calc_list[index],calc_list[index+1])) #접합 문자열 처리는 2*5/-3과 유사합니다
# elif ( "*" 또는 "/") in item: #목록에서 곱셈과 나눗셈이 있는 옵션을 찾습니다. 이런 식으로 작성해 보았는데 *만 일치하는 것 같은데 40/5만으로는 일치하지 않습니다.
항목의 elif("/ ") 또는 항목의 ("*"):
🎜> return new_calc_list
def deal_unusual_issue(formula):
Formula = Formula.replace ("++","+")
공식 = 공식.replace(" +-", "-") 공식 = 공식.replace("-+", "-") 공식 = 공식.replace("--", "+")
공식 = 공식 .replace("- -", "+")
반환 공식
# def덧셈_및_뺄셈(공식):
# sub_calc_list = re.split("[+-]",formula)
# 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의 인덱스로 덧셈인지 뺄셈인지 판단 totle_res -= float(i)
# else:
# sub_res = float(i )
# print(totle_res)
def 계산(공식):
print("연산",공식) calc_list = re.split("[+-]" ,formula) # 각 곱셈과 나눗셈 연산을 +- 기호로 구분 calc_list = deal_negative_issue(calc_list)
print(calc_list) for item in calc_list: sub_calc_list = re.split("[* /]",item)
sub_operator_list = re.findall("[*/]",item) # 곱셈과 나눗셈 기호를 리스트로 분리
print (sub_calc_list,sub_operator_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 ) 그렇지 않으면:
sub_res = Float(i)
인쇄("[%s] ="%item, sub_res)
Formula = Formula.Replace (item, sTR (SUB_RS)) )
Formula = deal_unusual_issue(formula)
print(formula )
#계산 +-방법
totle_calc_list = re.split("[+-]", 공식)
totle_operator_ list = re.findall("[+-]", 공식) # 목록에서 곱셈과 나눗셈 기호를 분리하세요.
print(totle_calc_list, totle_operator_list)
totle_res = None
for index, item in enumerate( totle_calc_list):
if 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 공식
인쇄 "[result]=", totle_res)
return totle_res
def calc(formula):
parentheses_flag = True
calc_res = None
while
parentheses_flag:
m = re.search("([^()] *)",formula) # 아래쪽 괄호를 하나씩 찾습니다.
print(m) if m: # Print (Type (m.group ()))
subformula = m. 그룹(). 스트립("()")#발견된 괄호 떼어내기
Subres = 계산 중(하위 수식)
FORMULA = Formula.replace(m.group(),str(subres))
else: parentheses_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 중국어 웹사이트의 기타 관련 기사를 참조하세요!