利用python實現計算器

2021-08-21 05:37:22 字數 3672 閱讀 9468

通過聯絡可以熟練掌握,正規表示式,迴圈,以及字串操作。

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等類似功能偷懶實現 運算後得出結果,結果必須與真實的計...