用python做计算器(超级版)

用python做计算器(超级版)

经过三分钟的思考,高级版计算器被我升级了,变成了更快捷,更简单的超级版

依旧还是我们忠实的sympy库,非常好用。


string附属功能

这次因为一个一个输入数太麻烦了,我就改成 1+1 这种形式了(横版)。主要是应用string的检索,不懂得人可以去官网看看(3. An Informal Introduction to Python — Python 3.9.13 documentation

主要就是通过对于输入的字符串进行某一段的索取,因为字符串是不允许删减的,所以只有这种办法。

寻找运算符

list_s = ["+", "-", "*", "/", "!", "^", "%"]
function = input()
while(1):
    if(function[f_search] in list_s):
        sym = function[f_search]
        break
    else:
        f_search += 1

先设置一个list,把所有的运算符放在里面,记住得是string类型的。这里我只放了一部分,并没有都做。然后用一个while循环,不断去找function的运算符的地方,如果找到了,就赋值给一个变量,如果不是运算符,就将f_search加一。这样可以从输入的string变量的第一个字符到最后一个字符去找运算符。

截取第一个数

num1 = function[0:f_search]

因为我是对于运算符前面进行检索,所以第一个是0。0到f_search就可以确保第一个数不会包括运算符,避免之后出问题。这里我不用了if和else就是因为我输入的运算符是!(阶乘)的时候不会出错,具体原因接下来讲。

截取第二个数

length = len(function)

gan = 1 + f_search
    
if(length != (f_search + 1)):
    num2 = function[gan:length]

这里定义了一个gan变量,也是为了确保截取第二个数的时候不会包括运算符。这里还获取了一下function的长度,如果长度和运算符的一致的话就不进行第二个数的截取了,因为阶乘只要一个数。这里要记住+1,不然length和f_searc永远不会相等。

数过大的问题

try:
    result = float(num1) ** float(num2)
except OverflowError:
    print("Result too big.")
    result = None

用了一个非常简单的try + except组合,overflowerror就是数过大会报错的类型。这样就会避免报错了。

把程序合起来

import sympy
result = 0.0
f_search = 0
x = 0
num1 = ""
num2 = ""
sym = ""
list_s = ["+", "-", "*", "/", "!", "^", "%"]
gan = 0
while(1):
    function = input()
    while(1):
        if(function[f_search] in list_s):
            sym = function[f_search]
            break
        else:
            f_search += 1

    length = len(function)
    num1 = function[0:f_search]
    gan = 1 + f_search
    
    if(length != (f_search + 1)):
       num2 = function[gan:length]
        
    if(function[f_search] == list_s[0]):
       result = float(num1) + float(num2)
    elif(function[f_search] == list_s[1]):
        result = float(num1) - float(num2)
    elif(function[f_search] == list_s[2]):
        try:
            result = float(num1) * float(num2)
        except OverflowError:
            print("Result too big.")
            result = None
    elif(function[f_search] == list_s[3]):
        result = float(num1) / float(num2)
    elif(function[f_search] == list_s[4]):
        result = sympy.factorial(float(num1))
    elif(function[f_search] == list_s[5]):
        try:
            result = float(num1) ** float(num2)
        except OverflowError:
            print("Result too big.")
            result = None
    elif(function[f_search] == list_s[6]):
        result = float(num1) % float(num2)
    if(result != None):
        print(result)
    else:
        pass
    f_search = 0
    result = 0

效果

可以看出这种写的非常方便。

tips

f_search 和result要最后归零,不然下次运算会出bug。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A Python 萌新花花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值