目录
一、题目要求:
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为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代码利用了正则表达式库re
的findall
函数来提取字符串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)
输出结果:
['+', '*', '-', '/', '=']
-
import re
:这行代码导入了Python的正则表达式库,使得我们可以使用正则表达式相关的功能。 -
expression = "1+2*10-10/2="
:定义了一个字符串expression
,它是一个数学表达式。 -
non_digits = re.findall(r'[^\d]+', expression)
:re.findall
是正则表达式库中的一个函数,用于在给定的字符串中找出所有与正则表达式匹配的部分。r'[^\d]+'
是一个正则表达式。其中:[^\d]
:这里的\d
代表数字字符(0-9)。而[^...]
中的方括号内的反斜线表示非匹配。所以,[^\d]
匹配的是所有非数字字符。+
:表示匹配前面的字符或组(在这里是非数字字符)一次或多次。
- 所以,这个正则表达式的意思是找出
expression
字符串中所有的连续的非数字字符。
注意:re库代码的解释来源与大模型回答,可能会有错误,但代码是自己写的。