日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python123外汇兑换计算器_Python 3.x--使用re模块,实现计算器运算实例

發布時間:2024/9/27 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python123外汇兑换计算器_Python 3.x--使用re模块,实现计算器运算实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 importre2

3 #乘除運算處理,可以處理不含括號的加減和乘除函數(只處理乘除)

4 defmulti_and_divi(arg):5 #傳入參數為列表,如:['3*2-1*9/3',0]

6 val =arg[0]7 #對字符串進行乘除匹配:如3*2-1*9/3,就匹配:3*2

8 mch = re.search('\d+\.?\d*[\*\/]+[\+\-]?\d+\.?\d*', val)9 if not mch: #mch為空,沒有匹配

10 return

11 #將匹配到的內容保存在content中

12 content = re.search('\d+\.?\d*[\*\/]+[\+\-]?\d+\.?\d*',val).group()13 #print('>>>>>>>>',content)

14 #對匹配到的內容進行*、/判斷,然后進行相應的計算,如2*3,先分割后計算

15 if len(content.split('*')) > 1:16 n1,n2 = content.split('*')17 value = float(n1)*float(n2)18 elif len(content.split('/')) > 1:19 n1,n2 = content.split('/')20 value = round(float(n1)/float(n2),8)21 #取出匹配內容兩頭的內容:before,after

22 before,after = re.split('\d+\.?\d*[\*\/]+[\+\-]?\d+\.?\d*',val,1)23 #拼接成新的字符串

24 new_str = "%s%s%s" %(before, value, after)25 #把new_str賦值到arg[0]中

26 arg[0] =new_str27 #print(arg)

28 #再遞歸進行乘除計算

29 multi_and_divi(arg)30

31 #multi_and_divi(['-40/-5-4*+2+2*-3+3*+3',0])

32 #處理后的結果:['--8.0-8.0+-6.0+9.0', 0]

33

34 #加減運算處理

35 defadd_and_substr(arg):36 #arg = ['--8.0-8.0+-6.0+9.0', 0]

37 #對傳進來的arg[0]表達式進行第1次處理,將表達式中的++\--變成+,+-、-+變成-,處理完成以后就直接break

38 whileTrue:39 if arg[0].__contains__('++') or arg[0].__contains__('--') or arg[0].__contains__('-+') or arg[0].__contains__('+-'):40 arg[0] = arg[0].replace('++','+')41 arg[0] = arg[0].replace('--','+')42 arg[0] = arg[0].replace('+-','-')43 arg[0] = arg[0].replace('-+','-')44 else:45 break

46

47 #對傳進來的arg[0]表達式進行第2次處理,提取首位為“-”,并將提取的次數保存在arg[1]中

48 #并且每提取1次:將表達式中的"+"替換成"-"."-"替換成"+",然后取arg[0]表達式字符串中第1到最后1位即可賦給arg[0]

49 #如:-8-10+19-4 = -(8+10-19+4)

50 if arg[0].startswith('-'):51 arg[1] += 1

52 arg[0] = arg[0].replace('-', '&') #&8.0&10.0&6.0+9.0

53 arg[0] = arg[0].replace('+', '-') #&8.0&10.0&6.0-9.0

54 arg[0] = arg[0].replace('&', '+') #+8.0+10.0+6.0-9.0

55 arg[0] = arg[0][1:]56 value =arg[0]57

58 #對字符串value進行匹配,匹配加或減兩邊的內容,如1+2-3,就匹配1+2

59 mch = re.search('\d+\.?\d*[\+\-]+\d+\.?\d*',value)60 if notmch:61 return

62 content = re.search('\d+\.?\d*[\+\-]+\d+\.?\d*',value).group()63 if len(content.split('+')) > 1:64 n1,n2 = content.split('+')65 get_value = float(n1)+float(n2)66 else:67 n1,n2 = content.split('-')68 get_value = float(n1)-float(n2)69 #取出匹配內容兩頭的內容:before,after

70 before, after = re.split('\d+\.?\d*[\+\-]+\d+\.?\d*', arg[0], 1)71 #拼接成新的字符串

72 new_str = "%s%s%s" %(before, get_value, after)73 #把new_str賦值到arg[0]中

74 arg[0] =new_str75 #print(arg)

76 add_and_substr(arg)77

78 #add_and_substr(['-8.0-10.0+-6.0+9.0', 0])

79

80 #計算函數

81 defcompute(sr):82 #傳入需要計算的函數,如:'(-40/5-4*2+2*-3+3*3)'

83 #去掉括號,組成列表

84 list_str = [sr.strip('()'), 0]85 multi_and_divi(list_str)86 add_and_substr(list_str)87

88 #判斷new_str[1]是奇數還是偶數,若是奇數,表明結果為負數,否則為正數

89 #注:計算加減和乘除的函數沒有返回值,可以取出list_str結果,原因解釋見最后實例

90 count = divmod(list_str[1], 2)91 result =list_str[0]92 if count[1] == 1:93 result = float(result) * (-1)94 returnresult95

96 #print(compute('-40/5-4*2+2*-3+3*3'))

97

98 #remv_brackets:去括號,只保留最內層函數

99 defremv_brackets(sr):100 flag =True101 whileflag:102 #匹配最里層“()”及函數,如:1+2*(3/(3-2)*2),這里匹配的是(3-2)

103 i = re.search('\([^()]+\)',sr)104 ifi:105 sub_str =i.group()106 #調用計算函數,返回值賦值給sub_res

107 sub_res =compute(sub_str)108 #將i截取的第一個括號內容替換為轉化為str類型的sub_res

109 sr =sr.replace(sub_str,str(sub_res))110 else:111 #如果沒有括號了,打印計算函數返回的結果

112 print('結果是:',compute(sr))113 flag =False114

115 if __name__ == '__main__':116 print('-------------歡迎使用--------------')117 flag =True118 whileflag:119 sr = input('請輸入計算函數(q退出):')120 sr = re.sub('\s*','',sr)121 symbol = re.search('[0-9q\+\-\/\*]',sr)122 #print(symbol)

123 if not symbol: #判斷symbol為空

124 print('輸入有誤')125 sr = input('請重新輸入要計算的函數(q:退出):')126 sr = re.sub('\s*', '', sr)127 if sr == 'q':128 exit('感謝使用,再見')129 else:130 remv_brackets(sr)131 else:132 if sr == 'q':133 exit('感謝使用,再見')134 else:135 remv_brackets(sr)136

137 #1-2*((60-30+(-40/5)*(9-2*5/3+ 7/3*99/4*2998+10*568/14)) - (-4*3)/(16-3*2) )

總結

以上是生活随笔為你收集整理的python123外汇兑换计算器_Python 3.x--使用re模块,实现计算器运算实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。