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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python公式计算器_Python-计算器

發(fā)布時(shí)間:2024/7/5 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python公式计算器_Python-计算器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#計(jì)算器開(kāi)發(fā)需求

#

#1、實(shí)現(xiàn)加減乘除及拓號(hào)優(yōu)先級(jí)解析

#2、用戶輸入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等類似公式后,

#必須自己解析里面的(),+,-,*,/符號(hào)和公式,運(yùn)算后得出結(jié)果,結(jié)果必須與真實(shí)的計(jì)算器所得出的結(jié)果一致

import re

import functools

def minus_operator_handler(formula):

'''處理一些特殊的符號(hào)'''

minus_operator = re.split("-",formula)

calc_list = re.findall("[0-9]",formula)

if minus_operator[0] == '':#第一值肯定是負(fù)號(hào)

clac_list[0] = '-%s' % calc_list[0]

res = functools.reduce(lambda x,y:float(x) - float(y),calc_list)

print("\33[33;1m減號(hào)[%s]處理結(jié)果:\033[0m" % formula,res)

return res

def remove_duplicates(formula):

formula = formula.replace("++","+")

formula = formula.replace("+-","-")

formula = formula.replace("-+","-")

formula = formula.replace("--","+")

formula = formula.replace("- -","+")

return formula

def compute_mutiply_dividend(formula):

'''算乘除,傳進(jìn)來(lái)的是字符串'''

operators = re.findall("[*/]",formula)

calc_list = re.split("[*/]",formula)

res = None

for index,i in enumerate(calc_list):

if res:

if operators[index-1] == "*":

res *= float(i)

else operators[index-1] == "/"

res /= float(i)

else:

res = float(i)

print("\033[31;1m[%s]運(yùn)算結(jié)果=\033[0m" %formula, res)

return res

def handle_minus_in_list(operators_list,calc_list):

for index,i in enumerate(calc_list):

if i == '':#它其實(shí)代表負(fù)號(hào),改成負(fù)號(hào)

calc_list[index+1] = i + calc_list[index+1].strip()

def handle_special_occactions(plus_and_minus_operators,multiply_and_dividend):

for index,i in enumerate(multiply_and_dividend):

i = i.strip()

if i.endswith("*") or i.endswith("/"):

multiply_and_dividend[index] = multiply_and_dividend[index] + plus_and_minus_operators[index] + multiply_and_dividend[index+1]

del multiply_and_dividend[index+1]

del plus_and_minus_operators[index]

return plus_and_minus_operators,multiply_and_dividend

def compute(formula):

'''這里計(jì)算的是不帶括號(hào)的公式'''

formula = formula.strip("()")#去除外面包的括號(hào)

formula = remove_duplicates(formula)#去除外重復(fù)的+-號(hào)

plus_and_minus_operators = re.findall("[+-]",formula)

multiply_and_dividend = re.split("[+-]",formula)#取出乘除公式

if len(multiply_and_dividend[0].strip()) == 0:#代表這肯定是個(gè)減號(hào)

multiply_and_dividend[1] = plus_and_minus_operators[0] + multiply_and_dividend[1]

del multiply_and_dividend[0]

del plus_and_minus_operators[0]

plus_and_minus_operators,multiply_and_dividend=handle_special_occactions(plus_and_minus_operators,multiply_and_dividend)

for index,i in enumerate(multiply_and_dividend):

if re.search("[*/]",i):

sub_res = compute_mutiply_dividend(i)

multiply_and_dividend[index] = sub_res

#開(kāi)始運(yùn)算+,-

print(multiply_and_dividend,plus_and_minus_operators)

total_res = None

for index,item in enumerate(multiply_and_dividend):

if total_res:#代表不是第一次循環(huán)

if plus_and_minus_operators[index-1] == '+':

total_res += float(item)

elif plus_and_minus_operators[index-1] == '-':

total_res -= float(item)

else:

total_res = float(item)

print("\033[32;1m[%s]運(yùn)算結(jié)果:\033[0m" %format,total_res)

return total_res

def calc(formula):

'''計(jì)算程序入口,主要邏輯是先計(jì)算括號(hào)里的值,算出來(lái)后再計(jì)算乘除,再算加減'''

parenthesise_flag = Ture

calc_res = None#初始化運(yùn)算結(jié)果為None

while parenthesise_flag:

m = re.search("\[^()*\]",formula)#找到最里層的括號(hào)

if m:

#print("先算括號(hào)里的值:",m.group())

sub_res = compute(m.group())

formula = formula.replace(m.group(),str(sub_res))

else:

print('\033[41;1m----沒(méi)括號(hào)了...---\033[0m')

print('\n\n033[42;1m最終結(jié)果:\033[0m',compute(formula))

parenthesise_flag = False#代表公式里的括號(hào)已經(jīng)都被剝除

if __name__ == '__main__':

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的python公式计算器_Python-计算器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。