Python 練習 計算器

2022-03-17 15:29:22 字數 2695 閱讀 3221

import re

def format_string(s): # 對表示式進行格式化

s = s.replace(' ', '')

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

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

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

s = s.replace("*+", "*")

s = s.replace("/+", "/")

return s

def check_expression(s): # 對表示式進行檢測

flag = true

if not s.count("(") == s.count(")"):

print("括號沒有閉合")

flag = false

if re.findall('[a-z]+', s.lower()):

print("有非法字元")

flag = false

return flag

def calc_mul_div(s):

regular = '[\-]?\d+\.?\d*[*/][\-]?\d+\.?\d*'

while re.findall(regular, s):

expression = re.search(regular, s).group()

if expression.count("*"): # 判斷是否是乘法

x, y = expression.split("*")

mul_result = str(float(x) * float(y))

s = s.replace(expression, mul_result)

s = format_string(s)

if expression.count("/"): # 判斷是否是除法

x, y = expression.split('/')

div_result = str(float(x) / float(y))

s = s.replace(expression, div_result)

s = format_string(s)

return s

def calc_add_sub(s): # 判斷加減法

add_regular = '[\-]?\d+\.?\d*\+[\-]?\d+\.?\d*'

sub_regular = '[\-]?\d+\.?\d*\-[\-]?\d+\.?\d*'

while re.findall(add_regular, s):

add_list = re.findall(add_regular, s)

for add_str in add_list:

x, y = add_str.split("+")

add_result = "+" + str(float(x) + float(y))

s = s.replace(add_str, add_result)

s = format_string(s)

while re.findall(sub_regular, s):

sub_list = re.findall(sub_regular, s)

for sub_str in sub_list:

numbers = sub_str.split("-")

if len(numbers) == 3: # 如果表示式類似 -1-1,則 list 是 ['', '1', '1'] ,

# 如果表示式類似 8-2, 則 list 是 ['8', '2']

result = 0

for v in numbers:

if v:

result -= float(v)

else:

x, y = numbers

result = float(x) - float(y)

s = s.replace(sub_str, "+" + str(result))

s = format_string(s)

return s

if __name__ == "__main__":

s = '(( 2 /1 * 7 ) - ( 3 *4 ) )'

if check_expression(s):

s = format_string(s)

while s.count("(") > 0:

strs = re.search('\([^()]*\)', s).group()

replace_str = calc_mul_div(strs)

replace_str = calc_add_sub(replace_str)

s = format_string(s.replace(strs, replace_str[1:-1])) # 去掉多餘的括號

else:

replace_str = calc_mul_div(s)

replace_str = calc_add_sub(replace_str)

s = s.replace(s, replace_str)

print("result: ", s.replace("+", ""))

執行結果:

result: 2.0

python正則練習 計算器

1 實現加減乘除及拓號優先順序解析 2 使用者輸入帶有加減乘除小括號的複雜運算公式後,必須自己解析裡面的 符號和公式,運算後得出結果,結果必須與真實的計算器所得出的結果一致 coding utf 8 import re def check string 檢查是否有其他特殊字元字母,檢查表示式合法性 ...

練習 製作計算器

自製乙個計算器,實現計算器的基本功能,按順序依次計算,可進行拓展練習新增其他內容,盡可能完善 思路 1 介面布局 2 數字鍵功能 3 運算子功能 4 清屏鍵 退格鍵 小數點等功能 5 查缺補漏 檔案 using system using system.collections.generic usin...

練習 WinForm 計算器

介面設計 練習 計算器 數字鍵的操作 private void button27 click object sender,eventargs e 追加 else 點選了數字 prev 1 運算子的操作 private void button26 click object sender,eventar...