Day5:Python实现简易计算器

一、前情回顾

上次我们写了一个简单的四则运算小工具。能算加减乘除,但每次只能算一次,算完程序就关了。

今天我们要把他进化成一个能持续计算的命令行计算器。 就跟我们平常在用的计算器那样:

能够连续计算多组数字。

输入exit就可以退出。

如果输入格式不对,程序能提醒我们,而不是直接报错。

二、我们的目标

这个版本我们要实现四个功能:

  1. 循环运行(不用每次重新启动程序),这是前文我们预留的优化工作。

  2. 输入一行表达式,比如8 * 3,直接输出结果。

  3. 输入exit退出程序。这个也是前文留下的。

  4. 输入错误时友好提示,而不是红色一片报错

三、编码

创建项目和新建源码文件这里就不再重复了。

image-20251017135212494

先放完整代码,后面我们再逐行讲。

 # 简易计算器 CLI 版
 print("=== 🧮 懒惰蜗牛计算器 2.0 ===")
 print("输入格式示例:8 * 2")
 print("输入 exit 退出程序")
 print("============================")
 ​
 while True:
     s = input("请输入表达式:").strip()  # 去掉首尾空格
     if s.lower() == "exit":
         print("再见,懒惰蜗牛计算器已关闭 🐌")
         break
     try:
         # 拆分输入:数字1 运算符 数字2
         a, op, b = s.split()
         a, b = float(a), float(b)
 ​
         # 根据运算符选择操作
         if op == "+":
             result = a + b
         elif op == "-":
             result = a - b
         elif op == "*":
             result = a * b
         elif op == "/":
             if b == 0:
                 result = "错误:除数不能为0!"
             else:
                 result = a / b
         else:
             result = "无效的运算符!"
 ​
         print(f"结果:{result}")
 ​
     except ValueError:
         print("⚠️ 输入格式错误,请按示例:8 * 2")
     except Exception as e:
         print("发生未知错误:", e)

四、运行效果

示例输出:

image-20251017135444069

看到没? 这一次,程序会一直等待我们的输入,直到我们主动输入“exit”。 而且,就算输入错了,他也不会崩溃。

五、代码讲解

这一版的代码里又多了几个新的关键字:while、break、True、try、except。

还用到了其他的内置函数:strip()、lower()、split()。

5.1. 关键字

所有的关键字在哪儿?https://docs.python.org/3/reference/lexical_analysis.html#keywords

image-20251017140205660

关键字是什么:是编程语言中预先定义的、具有特殊含义的保留字。用来表示程序的结构、控制流程、数据类型等核心功能。

不能用作变量名、函数名等标识符。

每个关键字都有固定的语法功能。

由语言规范明确规定。

我们不能改变关键字的含义。

内置函数前文我们说了到哪里去查用法和说明。

看一下这版代码比较关键的点。

5.2. 循环结构

while True:这是个循环语句,就是不停的重复干一件事儿。

 while True:
     print('懒惰蜗牛')

这样就会在控制台不停的输出“懒惰蜗牛”四个字。不会停下来,像永动机。

break:跳出循环

我们写的业务相关代码,一般不会写个死循环(永动机),当满足某个条件的时候,一般还是会退出循环的。

 while True:
     print('懒惰蜗牛')
     break

break就是用来跳出循环的。我们的小计算器代码里最外层是个while True:包着的死循环。

然后使用if判断条件,满足的情况就使用break跳出循环,结束程序。

5.3. 异常捕获

try...except:处理异常

我们上文写四则运算小工具的时候,如果碰到除法运算中被除数是0的情况,程序就会结束,控制台就出现红色的报错。

这个版本使用了try...except来捕获处理异常,就算出现异常情况,我们的程序也不会挂调,还能提示出来。

try:包着的内容,我们假设这里面可能会出现一些错误(因为你不能完全的控制用户会输入什么)。如果出现错误了,except里面就是处理这个错误的逻辑。

 try:
     # 可能会出错的代码
     可能出错的语句
 except 异常类型:
     # 发生该类型异常时的处理代码
     异常处理语句

异常也被分成很多类型,我们案例中就有ValueError和Exception。

写在上面的会先被捕获到,如果都不满足,Exception就是兜底的,他会捕获所有未被特定处理的异常。

except Exception后面还有个as e,这是个python的语法,把捕获的异常对象赋值给变量e,后面的except里面就可以用这个e。

比如案例中就是通过print打印了异常的字符串表示。

5.4. 内置函数

strip():把输入两边的空格去掉。

 print(' 懒惰蜗牛  '.strip())

image-20251017143607908

lower():字母小写转换。

 
print('LAZYSNAIL'.lower())

image-20251017143701777

split():拆分字符串。

 print('懒 惰 蜗 牛'.split())
 print('懒@惰@蜗@牛'.split('@'))

image-20251017143824603

split默认是以空格分隔的。上面第二行是按照@分隔的。

控制台中的['懒', '惰', '蜗', '牛'],中括号表示这是个数组。就是装了一组东西,而不是单个的了。

我们写的程序跑起来,不能动不动就挂了。

try...except:异常处理就是一个比较好的处理办法,能够帮我们优雅的处理异常的情况。

六、继续优化

我们再来点小进阶。 比如第一次算 8 * 3 结果是24, 接下来直接输入 + 5,让程序自动记住上次的结果。

先想一下,有没有思路,再看下面的代码。

1、如果要记住上一次的计算结果,我们是不是得那个东西来记录他。

2、我们怎通过输入判断和处理一次计算还是多次计算。

 
print("=== 🧮 懒惰蜗牛计算器 3.0 ===")
 print("直接输入 + 5、* 2 也可以连续计算哦!")
 print("输入 exit 退出程序")
 ​
 last_result = None  # 记录上一次结果
 ​
 while True:
     s = input("请输入表达式:").strip()
     if s.lower() == "exit":
         print("Bye~ 感谢使用懒惰蜗牛计算器 🐌")
         break
     try:
         parts = s.split()
         if len(parts) == 3:
             a, op, b = parts
             a, b = float(a), float(b)
         elif len(parts) == 2 and last_result is not None:
             op, b = parts
             a, b = last_result, float(b)
         else:
             print("⚠️ 输入格式错误,请按示例:8 * 2 或 + 5")
             continue
 ​
         result = (
             a + b if op == "+" else
             a - b if op == "-" else
             a * b if op == "*" else
             (a / b if b != 0 else "错误:除数不能为0!") if op == "/" else
             "无效的运算符!"
         )
 ​
         print(f"结果:{result}")
         last_result = result if isinstance(result, (int, float)) else last_result
 ​
     except Exception as e:
         print("输入有误,请按格式重新来一次。")

这个代码中使用last_result保存上次计算结果。(last_result = None)

检查输入是 8 * 2(三部分)还是 + 5(两部分)。(len(parts))

两部分时用last_result作为第一个数。(a, b = last_result, float(b))

只有数字结果才更新记忆。(isinstance(result, (int, float)))

用到两个新的关键字:

continue:跳过当前循环的剩余代码,直接进入下一次循环。

isinstance:检查变量类型,isinstance(result, (int, float)) 判断结果是不是数字类型。

现在你可以这样玩:

image-20251017144833748

七、小结

学到的东西说明
while True + break控制程序循环与退出
try / except防止程序崩溃
split() + 类型转换解析字符串表达式
变量记忆记录上一次结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒惰蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值