python新手一定要试试——终端计算器(带括号的加减乘除求幂混合运算)

欢迎关注,敬请点赞!

【关键字】:

  • 终端计算器
  • 不使用eval函数
  • sys.argv
  • 带括号混合运算

【摘要】:

  • 系统函数sys.argv传给python解释器的参数(是一个列表,第一个元素是脚本文件名)
  • 算术符运算的初始优先级
  • 本文使用的主要函数:(1) 列表逆序:list.reverse() ;(2) 列表查找元素:list.index() ,返回第一次出现的下标;(3)列表弹出元素:list.pop()

过程分析:

比如在终端输入:python lt_super_sum.py 2 - 2 * 2 ** 1 ** 2 + ( 5 + 2 * ( 2 + 5 ) ) * 3 / 5(符号和数字前后需加空格,求幂符号中间不加空格)【其中lt_super_sum.py为主函数名】

要求计算上面输入的一连串数字加、减、乘、除、求幂及括号混合运算(不使用eval函数)。

面对一个问题,分析其特点,找到要点和难点,转化为编程语言。

首先:终端输入的字符,存入了sys.argv这个列表中['lt_super_sum.py', '2', '-', '2', '*', '2', '**', '1', '**', '2', '+', '(', '5', '+', '2', '*', '(', '2', '+', '5', ')', ')', '*', '3', '/', '5'],可以用下标依次提取符合和数字。

从数字开始,依次判断符号,进行相关运算,可能存在算术运算优先级的问题,这就是**本问题的要点**。

步骤:

  1. 【先处理不带括号的情形,并封装函数lt_sum.py】
  2. 【再找到成对括号,调用lt_sum.py,依次消除成对括号】
  3. 【所有括号消除完后,再调用lt_sum.py,计算最后结果】

不带括号的情形:

返回顶部
熟悉一下不带括号时,算术运算优先级:

print(2 ** 3 ** 2,'连续求幂时,先计算后面,结果512;如果先计算前面,结果64,是不正确的')
print(4 * 2 / 2 ** 3 ** 2,'先算幂函数,后算乘除法')
print(8 / 512,'与上式同')
print(4 * 2 / 2,4 / 2 * 2,'连续乘除时,可以按顺序算;先算除法总不会错,为简化编程')
print(4 + 2 - 2,4 - 2 + 2,'连续加减时,可以按顺序算;先算减法总不会错')
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值