python列表去括号_python 简易计算器(只能计算加减乘除和括号)

import re

# 格式化字符串函数(消除一些错误的格式)

def format_string(string):

# 一系列的替换语句

string = string.replace("--", "-")

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

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

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

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

string = string.replace(" ", "-")

return string

# 检查函数(检查输入的表达式是否合法)

def chek_expression(string):

check_result = true # 标志位

if not string.count("(") == string.count(")"): # 检查括号是否完整

print("输入错误,未匹配到完整括号!")

check_result = false

if re.findall('[a-pr-z]+', string.lower()): # 检查是否包含字母

print("输入错误,包含非法字符!")

check_result = false

return check_result

# 加减法函数

def add_minus(string):

add_regular = r'[\-]?\d+\.?\d*\+[\-]?\d+\.?\d*' # 定义一个匹配的规则

sub_regular = r'[\-]?\d+\.?\d*\-[\-]?\d+\.?\d*' # 同上

# 注解:[\-]? 如果有负号,匹配负号; \d+ 匹配最少一个数字; \.? 是否有小数点,有就匹配;\d* 是否有数字有就匹配

# \+ 匹配一个加号; [\-]?\d+\.?\d* 这几个同上

# 加法

while re.findall(add_regular, string): # 按照regular规则获取一个表达式,用while循环,把所有加法都算完

add_list = re.findall(add_regular, string)

for add_stars in add_list:

x, y = add_stars.split('+') # 获取两个做加法的数(以+号作为分割对象),分别赋给x和y

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

string = string.replace(add_stars, add_result) # 替换

string = format_string(string)

# 减法

while re.findall(sub_regular, string): # 用while循环,把所有减法都算完

sub_list = re.findall(sub_regular, string)

for sub_stars in sub_list:

x, y = sub_stars.split('-') # 获取两个做减法的数(以-号作为分割对象),分别赋给x和y

sub_result = '+' + str(float(x) + float(y))

string = string.replace(sub_stars, sub_result) # 替换

string = format_string(string)

return string

# 乘、除法函数

def multiply_divide(string):

regular = r'[\-]?\d+\.?\d*[*/][\-]?\d+\.?\d*' # 定义一个匹配的规则regular

while re.findall(regular, string):

expression = re.search(regular, string).group() # 按照regular规则获取一个表达式

# 如果是乘法

if expression.count('*') == 1:

x, y = expression.spilt('*')

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

string = string.replace(expression, mul_result) # 计算结果替换原表达式

string = format_string(string) # 格式化

# 如果是除法

if expression.count('/') == 1:

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

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

string = string.replace(expression, div_result)

string = format_string(string) # 格式化

# 如果是阶乘

if expression.count('**') == 1:

x, y = expression.spilt('**')

pow_result = 1

for i in range(int(y)):

pow_result *= int(x)

string = string.replace(expression, str(pow_result))

string = format_string(string) # 格式化

return string

# 主程序

while true:

source = input("请输入表达式:") # 输入要计算的式子

if source == "q": # 该判断语句只能写在前面,写后面会报错

exit() # 如果输入是q,退出

elif chek_expression(source):

print("eval result: ", eval(source)) # eval() 是把其他类型转换为字符串

sourse = format_string(source)

if source.count("(") > 0:

stars = re.search(r'\([^()]*\)', source).group() # 去括号,得到括号里的字符串

replace_stars = multiply_divide(stars) # 将括号的表达式进行乘除运算

replace_stars = add_minus(stars) # 将乘除的结果进行加减运算

source = format_string(source.replace(stars, replace_stars)) # 用计算结果替换括号字符串

# 没有括号直接进行运算

else:

replace_stars = multiply_divide(source) # 乘除运算

replace_stars = add_minus(source) # 加减运算

source = source.replace(source, replace_stars)

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,Python有很多GUI库可以使用,比如Tkinter、PyQt等。下面是一个使用Tkinter库实现的简单计算器示例代码,可以实现基本的加减乘除括号运算: ```python import tkinter as tk def calculate(): expression = entry.get() try: result = eval(expression) output.config(text=str(result)) except: output.config(text="Error") def add_to_expression(char): entry.insert(tk.END, char) def clear(): entry.delete(0, tk.END) output.config(text="") root = tk.Tk() root.title("Calculator") entry = tk.Entry(root, width=40, borderwidth=5) entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10) button_1 = tk.Button(root, text="1", padx=40, pady=20, command=lambda: add_to_expression("1")) button_2 = tk.Button(root, text="2", padx=40, pady=20, command=lambda: add_to_expression("2")) button_3 = tk.Button(root, text="3", padx=40, pady=20, command=lambda: add_to_expression("3")) button_4 = tk.Button(root, text="4", padx=40, pady=20, command=lambda: add_to_expression("4")) button_5 = tk.Button(root, text="5", padx=40, pady=20, command=lambda: add_to_expression("5")) button_6 = tk.Button(root, text="6", padx=40, pady=20, command=lambda: add_to_expression("6")) button_7 = tk.Button(root, text="7", padx=40, pady=20, command=lambda: add_to_expression("7")) button_8 = tk.Button(root, text="8", padx=40, pady=20, command=lambda: add_to_expression("8")) button_9 = tk.Button(root, text="9", padx=40, pady=20, command=lambda: add_to_expression("9")) button_0 = tk.Button(root, text="0", padx=40, pady=20, command=lambda: add_to_expression("0")) button_add = tk.Button(root, text="+", padx=39, pady=20, command=lambda: add_to_expression("+")) button_subtract = tk.Button(root, text="-", padx=41, pady=20, command=lambda: add_to_expression("-")) button_multiply = tk.Button(root, text="*", padx=40, pady=20, command=lambda: add_to_expression("*")) button_divide = tk.Button(root, text="/", padx=41, pady=20, command=lambda: add_to_expression("/")) button_left_paren = tk.Button(root, text="(", padx=41, pady=20, command=lambda: add_to_expression("(")) button_right_paren = tk.Button(root, text=")", padx=41, pady=20, command=lambda: add_to_expression(")")) button_clear = tk.Button(root, text="Clear", padx=79, pady=20, command=clear) button_equals = tk.Button(root, text="=", padx=91, pady=20, command=calculate) button_1.grid(row=1, column=0) button_2.grid(row=1, column=1) button_3.grid(row=1, column=2) button_4.grid(row=2, column=0) button_5.grid(row=2, column=1) button_6.grid(row=2, column=2) button_7.grid(row=3, column=0) button_8.grid(row=3, column=1) button_9.grid(row=3, column=2) button_0.grid(row=4, column=0) button_add.grid(row=5, column=0) button_subtract.grid(row=6, column=0) button_multiply.grid(row=6, column=1) button_divide.grid(row=6, column=2) button_left_paren.grid(row=5, column=1) button_right_paren.grid(row=5, column=2) button_clear.grid(row=4, column=1, columnspan=2) button_equals.grid(row=7, column=0, columnspan=4, padx=10, pady=10) output = tk.Label(root, text="", width=40, borderwidth=5) output.grid(row=8, column=0, columnspan=4, padx=10, pady=10) root.mainloop() ``` 这段代码使用了Tkinter库,创建了一个简单的图形用户界面。用户可以通过按钮输入算式,然后计算器会显示计算结果。如果算式有错误,计算器会显示"Error"。 注意:这个计算器还有很多不足之处,比如没有处理除数为零的情况,也没有处理科学计数法、三角函数、对数函数、求幂等高级功能。如果需要实现这些功能,需要对代码进行进一步修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值