python开发Day05(计算器代码)
生活随笔
收集整理的這篇文章主要介紹了
python开发Day05(计算器代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import re
def calculator(formula):#定義函數,參數為formula(傳進來的公式)print(formula) #輸出傳進來的參數a=''#定義一個空的變量字符串,為了將用戶傳進來的參數中有空格的去掉并重新給a變量公式for i in formula:#循環傳進來的參數if i == ' ':#判斷如果是空就continue進行下一次循環continuea=a+i#判斷不成立就向a變量中添加當前循環的內容while True:#while循環,使用break退出或者整個函數結束b=re.search('\([^()]+\)',a)#取出傳進來的參數中最里層的括號內容if b:#判斷b是否成立,如果取出了括號是成立向下執行,否則執行函數panduan。c=b.group()#讀取b變量的內容cc=c[1:-1]#使用切片去掉字符串兩邊的空格c2=panduan(formula_2=cc)#將去掉空格的字符串傳給panduan函數使用c2變量接收返回值print(c2)#輸出panduan執行后的返回值a=a.replace(c,c2[0])#將a變量中讀取到的c變量內容也就是括號內的內容替換成panduan函數執行的返回值print(a)#輸出修改后的內容else:#b變量不滿足判斷c2=panduan(formula_2=a)#不滿足的情況下就是沒有括號了所以繼續執行panduan函數將返回值給c2return c2[0]#panduan函數執行完畢后將內容返回并且使用索引取出格式為字符串
def panduan(formula_2):#定義函數panduan,formula_2參數是將公式內最里層的括號內容。a=re.split('[*/+-]',formula_2)#將傳進來的參數按照*/+-切割。b=re.findall('[*/+-]',formula_2)#在傳進來的參數中找到*/+-print(a,b)#輸出切割和找到的內容for k,i in enumerate(a):#循環輸出切割出來的內容并加上序號從0開始if len(i) == 0:#判斷這次循環的內容總長度是0a[k+1] = b[k]+a[k+1]#將切割后內容索引為k+1的改成b變量中k的索引和a變量中k+1的索引,因為如果i是空的那么就代表著這個數是一個負數del a[k]#刪除當前a變量中對應的k索引del b[k]#刪除當前b變量中對應的索引print(a,b)#輸出當前a變量和b變量abc=chengchu(formula_3=a,yunsuanfu=b)#在上一層循環結束后也就是將負數都恢復加上負號將當前切割后的a變量和b變量傳給乘除函數,使用abc變量來接收乘除函數的返回值return abc#返回abc變量內容
def chengchu(formula_3,yunsuanfu):#定義一個函數chengchu,參數formula_3用于接收panduan函數執行后的數值,yunsuanfu參數是panduan函數中b變量也就是索引的運算符號a=True#定義一個變量為Truewhile a:#while不斷的循環for k,i in enumerate(yunsuanfu):#for循環取運算符并且加上每一個的索引位置if i == '*' or i == '/':#判斷當前循環i的值是*或者/print(formula_3[k],formula_3[k+1])#輸出*或者/對應索引的formula_3列表中數值和當前索引加1的數值if i == '*':#判斷本次循環的i是*b=float(formula_3[k])*float(formula_3[k+1])#定義b變量使用formula_3加上本次循環索引的位置 乘 formula_3本次索引位置的+1,并且將其都轉換成浮點類型print('=======>',formula_3[k],'*',formula_3[k+1])#輸出上一步的操作formula_3[k] = str(b)#在上面計算完成后的b變量數值傳換成字符串格式,然后修改formula_3列表中本次循環索引位置為bdel formula_3[k+1]#刪除本次循環索引加1對應的formula_3列表的值del yunsuanfu[k]#刪除本次循環索引對應的yunsuanfu列表中的值,因為此值是使用過的不需要再出現print(formula_3,yunsuanfu)#輸出當前formula_3列表和yunsuanfu列表break#退出本次循環,因為如果他繼續循環循環formula_3,yunsuanfu這兩個列表的時候會報錯,因為索引長度超出了列表的長度else:#判斷如果不是*那就是/b=float(formula_3[k])/float(formula_3[k+1])#定義b變量使用formula_3加上本次循環索引的位置 除 formula_3本次索引位置的+1,并且將其都轉換成浮點類型print('+++++++>',formula_3[k],'/',formula_3[k+1])#輸出上一步的操作formula_3[k] = str(b)#在上面計算完成后的b變量數值傳換成字符串格式,然后修改formula_3列表中本次循環索引位置為bdel formula_3[k+1]#刪除本次循環索引加1對應的formula_3列表的值del yunsuanfu[k]#刪除本次循環索引對應的yunsuanfu列表中的值,因為此值是使用過的不需要再出現print(formula_3,yunsuanfu)#輸出當前formula_3列表和yunsuanfu列表break#退出本次循環,因為如果他繼續循環循環formula_3,yunsuanfu這兩個列表的時候會報錯,因為索引長度超出了列表的長度else:#循環完成了,在yunsuanfu列表中沒有了*/a=False#定義a變量為False停止while循環if len(yunsuanfu) == 0:#判斷當前的yunsunafu列表的長度是不是0,也就是說沒有運算符了return formula_3#返回計算后的結果else:#當前的yunsuanfu列表中還有那么可能就是+或者-了a=jiajian(formula_4=formula_3,yunsuanfu_2=yunsuanfu)#執行jiajian函數并且將當前計算完成的*和/結果傳給他和當前xunhuanfu變量的列表,使用變量a來接收返回值return a#返回a變量內容
def jiajian(formula_4,yunsuanfu_2):#定義一個函數jiajian,參數formula_4用于接收chengchu函數執行后的數值,yunsuanfu_2參數是chenghchu函數中執行完成后yunsuanfu變量剩余的內容a=True#定義一個變量為Truewhile a:#while不斷的循環for k,i in enumerate(yunsuanfu_2):#for循環取運算符并且加上每一個的索引位置if i == '+' or i == '-':#判斷當前循環i的值是+或者-print(formula_4[k],formula_4[k+1])#輸出+或者-對應索引的formula_4列表中數值和當前索引加1的數值if i == '+':#判斷本次循環的i是+b=float(formula_4[k])+float(formula_4[k+1])#定義b變量使用formula_4加上本次循環索引的位置 加 formula_4本次索引位置的+1,并且將其都轉換成浮點類型print('=======>',formula_4[k],'+',formula_4[k+1])#輸出上一步的操作formula_4[k] = str(b)#在上面計算完成后的b變量數值傳換成字符串格式,然后修改formula_4列表中本次循環索引位置為bdel formula_4[k+1]#刪除本次循環索引加1對應的formula_4列表的值del yunsuanfu_2[k]#刪除本次循環索引對應的yunsuanfu_2列表中的值,因為此值是使用過的不需要再出現print(formula_4,yunsuanfu_2)#輸出當前formula_4列表和yunsuanfu_2列表break#退出本次循環,因為如果他繼續循環循環formula_4,yunsuanfu_2這兩個列表的時候會報錯,因為索引長度超出了列表的長度else:#不是+就是-b=float(formula_4[k])-float(formula_4[k+1])#定義b變量使用formula_4加上本次循環索引的位置 減 formula_4本次索引位置的+1,并且將其都轉換成浮點類型print('+++++++>',formula_4[k],'-',formula_4[k+1])#輸出上一步的操作formula_4[k] = str(b)#在上面計算完成后的b變量數值傳換成字符串格式,然后修改formula_4列表中本次循環索引位置為bdel formula_4[k+1]#刪除本次循環索引加1對應的formula_4列表的值del yunsuanfu_2[k]#刪除本次循環索引對應的yunsuanfu_2列表中的值,因為此值是使用過的不需要再出現print(formula_4,yunsuanfu_2)#輸出當前formula_4列表和yunsuanfu_2列表break#退出本次循環,因為如果他繼續循環循環formula_4,yunsuanfu_2這兩個列表的時候會報錯,因為索引長度超出了列表的長度else:#循環完成了,在yunsuanfu列表中沒有了+-a=False#定義a變量為False停止while循環#if len(yunsuanfu_2) == 0:#判斷當前的yunsunafu列表的長度是不是0,也就是說沒有運算符了return formula_4#返回計算后的結果#else:#如果yunsuanfu列表中還有那就是*/但是不可能......# a=chengchu(formula_3=formula_4,yunsuanfu=yunsuanfu_2)# return a#返回a變量內容
result=calculator("1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ) ")#執行函數calculator并且將運算的數值傳給他的參數
print(result)#輸出函數calculator執行結果
?
轉載于:https://www.cnblogs.com/WuYongQi/p/5520592.html
總結
以上是生活随笔為你收集整理的python开发Day05(计算器代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 代码跟踪
- 下一篇: centos node跟npm 安装