Python简单计算器题目(+ - * /的优先级一样情况)

目录

一、题目要求:

输入格式:

输出格式:

输入样例:

输出样例:

 二、代码解答:

三、运用的re库简单注解:


一、题目要求:

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:

输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出格式:

在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:

1+2*10-10/2=

输出样例:

10

 二、代码解答:

import re
def calculator(a, b, c):
    if b == '+':
        return a + c
    elif b == '-':
        return a - c
    elif b == '*':
        return a * c
    elif b == '/':
        if c == 0:
            return 'ERROR'
        else:
            return a / c

expression = input()
numbers = re.findall(r'\d+', expression)  # 提取数字
non_digits = re.findall(r'[^\d]+', expression)  # 提取符号
my_list = list(map(int, numbers))
n = len(my_list)
result = my_list[0]
for x in range(1, n):
    if calculator(result, non_digits[x-1], my_list[x]) != 'ERROR':
        result = calculator(result, non_digits[x - 1], my_list[x])
    else:
        result = 'ERROR'
        break
if result == 'ERROR':
    print('ERROR')
else:
    print(f'{result:.0f}')

三、运用的re库简单注解:

import re  
  
expression = "1+2*10-10/2="  
numbers = re.findall(r'\d+', expression)  
print(numbers)
输出结果:
['1', '2', '10', '10', '2']

这段Python代码利用了正则表达式库refindall函数来提取字符串expression中的所有数字。

  • import re:这行代码导入了Python的正则表达式库。
  • expression = "1+2*10-10/2=":这行代码定义了一个字符串,即需要从中提取数字的表达式。
  • numbers = re.findall(r'\d+', expression):这行代码使用re.findall函数从expression字符串中提取所有匹配r'\d+'正则表达式的部分,即所有数字。\d+是一个正则表达式,表示一个或多个数字。
  • print(numbers):这行代码打印出提取到的数字列表。
import re  
  
expression = "1+2*10-10/2="  
non_digits = re.findall(r'[^\d]+', expression)  
print(non_digits)
输出结果:
['+', '*', '-', '/', '=']
  1. import re:这行代码导入了Python的正则表达式库,使得我们可以使用正则表达式相关的功能。

  2. expression = "1+2*10-10/2=":定义了一个字符串expression,它是一个数学表达式。

  3. non_digits = re.findall(r'[^\d]+', expression)

    • re.findall是正则表达式库中的一个函数,用于在给定的字符串中找出所有与正则表达式匹配的部分。
    • r'[^\d]+'是一个正则表达式。其中:
      • [^\d]:这里的\d代表数字字符(0-9)。而[^...]中的方括号内的反斜线表示非匹配。所以,[^\d]匹配的是所有非数字字符。
      • +:表示匹配前面的字符或组(在这里是非数字字符)一次或多次。
    • 所以,这个正则表达式的意思是找出expression字符串中所有的连续的非数字字符。

注意:re库代码的解释来源与大模型回答,可能会有错误,但代码是自己写的。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值