通過聯絡可以熟練掌握,正規表示式,迴圈,以及字串操作。
print('請輸入您要計算的算術表示式!')
def
str_test(scanf):
def
inner():
ret=scanf()
tmp=re.search('[\d*/()+\-. ]+'
,ret)
if tmp ==none:
print('error !')
return true, ret
elif not ret.count('(')==ret.count(')'):
print('error !')
return true, ret
else:
tmp=tmp.group()
if ret==tmp:
return false,ret
else:
flag=true
return flag,ret
return inner
def
hadle_repeat(f): #去除空格
def
inner(*ret):
ret1=f(*ret)
ret1 = ret1.replace(' '
, '')
ret1 = ret1.replace('+-'
, '-')
ret1 = ret1.replace('--'
, '+')
ret1 = ret1.replace('-+'
, '-')
ret1 = ret1.replace('++'
, '+')
ret1 = ret1.replace('*-'
, '+')
ret1 = ret1.replace('e'
, '')
return ret1
return inner
@str_test
@hadle_repeat
def
scanf():
st=input()
return st
@hadle_repeat
def
mut_div(ret):
while true:
tmp=re.search('\d+\.?\d*[*/]\d+\.?\d*'
,ret) #獲得x*y
if tmp != none:
tmp=tmp.group()
******=re.search('[*/]'
,tmp).group() #獲取*或者/的符號
tmp1=re.split('[*/]'
,tmp) #獲得[x,y]的列表
tmp1[0]=float(tmp1[0]) #修改type
tmp1[1]=float(tmp1[1])
if ****** == '*':
ind=str(tmp1[0]*tmp1[1])
ret=ret.replace(tmp,ind)
else:
ind=str(tmp1[0]/tmp1[1])
ret = ret.replace(tmp,ind)
else:
break
return ret
@hadle_repeat
def
add_sub(ret):
while true:
tmp=re.search('-?\d+\.?\d*[+-]\d+\.?\d*'
,ret) #獲得x*y
print(tmp)
if tmp != none:
tmp=tmp.group()
print(tmp,
type(tmp))
******=re.findall('\d+.?\d*(\w)\d+.?\d*'
,tmp) #獲取*或者/的符號
print(******,
type(******))
tmp1=re.split('[+-]'
,tmp) #獲得[x,y]的列表
print(tmp1,
type(tmp1))
if tmp1[0]=='':
del tmp1[0]
if tmp[0]=='-':
tmp1[0] = -float(tmp1[0])
tmp1[1] = float(tmp1[1])
else:
tmp1[0]=float(tmp1[0]) #修改type
tmp1[1]=float(tmp1[1])
if ******[0] == '+':
ind=str(tmp1[0]+tmp1[1])
ret=ret.replace(tmp,ind)
else:
ind=str(tmp1[0]-tmp1[1])
ret = ret.replace(tmp,ind)
else:
break
return ret
flag=true
#輸入檢測標誌位,輸入正確跳出,輸入錯誤繼續
while flag:
show_home()
flag,ret_code=scanf()
print(ret_code)
while re.search('\([^()]+\)'
,ret_code):
ret1=re.search('\([^()]+\)'
,ret_code).group() #獲得最裡面的括號和值
ret=ret1.strip('()') #去掉括號
print(ret)
ret = mut_div(ret)
print(ret)
ret = add_sub(ret)
print(ret)
ret_code=ret_code.replace(ret1,ret)
print(ret_code)
else:
ret=mut_div(ret_code)
print(ret)
ret=add_sub(ret)
print(ret)
利用棧實現簡易計算器
輸入數學表示式,輸出結果。其中符號支援加減乘除 乘方及括號,數字支援小數及負數。開兩個陣列,乙個陣列為符號棧,乙個陣列為數字棧。字串讀入表示式並逐位處理,有數字就擷取下來存入數字棧,運算符號截下來存入符號棧,若發現當前符號優先順序小於等於前乙個符號的優先順序,就要把前面那部分的值計算出來,例如3 2...
利用python製作簡單計算器
利用python的定義函式,加上if的條件語句進行程式設計 def add x,y 相加 return x y defsubtract x,y 相減 return x y defmultiply x,y 相乘 return x y defdivide x,y 相除 return x y 使用者輸入 ...
python 實現計算器功能
開發乙個簡單的python計算器 實現加減乘除及拓號優先順序解析 使用者輸入 1 2 60 30 40 5 9 25 3 7 399 42998 10 568 14 43 16 32 等類似公式後,必須自己解析裡面的 符號和公式 不能呼叫eval等類似功能偷懶實現 運算後得出結果,結果必須與真實的計...