Python 的字符串处理, 一个朴实无华的四则运算计算器,批量计算小学生四则运算表达式 --2023博客之星候选--城市赛道
Python 的字符串处理, 实现一个朴实无华的四则运算计算器,批量计算小学生四则运算表达式
方法一:
# -*- coding: UTF-8 -*-
import re
def naive_calc(code):
# 按行分割代码
lines = code.strip().split('\n')
# 匹配四则运算表达式的正则表达式
pattern = r'\d+(\.\d+)?\s*[\+\-\*/]\s*\d+(\.\d+)?'
# 遍历每行代码,并计算四则运算表达式的值
for line in lines:
# 匹配四则运算表达式
match = re.search(pattern, line)
if match:
# 获取四则运算表达式
expr = match.group()
# 计算表达式的值
value = eval(expr)
# 将表达式替换为计算结果
line = line.replace(expr, str(value))
# 打印代码
print(line.strip())
def test():
code = '''
1+2
3+4
5-3
4*3
10/2
'''
naive_calc(code)
if __name__ == '__main__':
test()
该代码实现了一个简单的四则运算计算器,可以批量计算小学生四则运算表达式。具体实现过程如下:
-
首先,将代码按行分割,得到一个代码行列表。
-
然后,使用正则表达式匹配四则运算表达式,并计算其值。
-
接着,将表达式替换为计算结果,将修改后的代码打印出来。
-
最后,将代码放入 test 函数中进行测试。
需要注意的是,该代码实现了一个非常简单的四则运算计算器,只能计算小学生的四则运算表达式,实际的四则运算计算器需要更复杂的逻辑和更完善的错误处理。
方法二:
# -*- coding: UTF-8 -*-
import re
def naive_calc(code):
code_lines = [l for l in code.split('\n') if l.strip() != '']
# 这句代码是用来将多行字符串 code 按照换行符分割成多个行字符串,并将这
# 些行字符串保存在一个列表中。
# 具体来说,代码首先调用字符串对象的 split() 方法,将字符串按照换行符
# 分割成多个子字符串,然后将这些子字符串保存在一个列表中。由于在处理多
# 行字符串时,可能会出现包含多个连续空格或制表符的情况,因此代码中使用
# strip() 方法来去掉每个行字符串首尾的空格和制表符,并使用 if 条件语
# 句来过滤掉空行,即长度为0的行字符串。最终得到的列表 code_lines 中,
# 每个元素就是一行非空的字符串。这个"列表" code_lines 将会作为后面的处
# 理输入代码的数据源。
# print(code_lines) 输出结果如下
# [' 1+2', ' 3+4', ' 5-3', ' 4*3', ' 10/2']
for line in code_lines:
print(line)
ret = re.match("\s*(\d+)([\+\-\*\/])(\d+)\s*", line)
# 这个正则表达式可以用来匹配简单的数学表达式,如 2+3、 5 /6等等。
# 这个正则表达式包含了三个捕获组:
# 第一个捕获组 \s*(\d+) 匹配任意数量的空格,然后捕获一个或多个数字。
# 这个捕获组用于匹配表达式中的第一个数字。
# 第二个捕获组 ([\+\-\*\/]) 匹配加号、减号、乘号或除号。这个捕获组
# 用于匹配表达式中的运算符。
# 第三个捕获组 (\d+) 匹配一个或多个数字,并捕获它们。这个捕获组用于
# 匹配表达式中的第二个数字。
# 整个表达式用括号括起来,表示需要捕获整个匹配结果,以便后续的处理。
# 在每个数字和运算符周围的空格使用了 \s* 来匹配任意数量的空格,以防止
# 输入表达式时出现意外的空格。
# 注意,这个正则表达式只能匹配简单的数学表达式,而不能处理复杂的表达式
# ,例如带有括号、指数、函数等等。如果需要处理更复杂的表达式,可能需要
# 使用更复杂的正则表达式或其他解析器。
# print(ret.group()) 打印结果为: 1+2(注意前面是有空格的)
left = ret.group(1)
op = ret.group(2)
right = ret.group(3)
# 这几行代码将正则表达式匹配得到的结果分别赋值给了left、op和right三个
# 变量,把空格去掉了,具体来说:
# ret.group(1)代表正则表达式中第1个括号捕获到的内容,即匹配到的第1个数字;
# ret.group(2)代表正则表达式中第2个括号捕获到的内容,即匹配到的操作符;
# ret.group(3)代表正则表达式中第3个括号捕获到的内容,即匹配到的第2个数字。
# 这些变量会在接下来的代码中被使用,计算出对应表达式的结果。
# print(left, op, right) 打印结果为:1+2(空格没有啦!)
if op == '+':
print('{}+{}={}'.format(left, right, int(left) + int(right)))
# 因为op变量中存储了四则运算符,所以根据四则运算符加减乘除 +-*/ 来判断我们该
# 做哪项运算。由于我们取出的是字符串,所以我们在计算时候需要将字符串转为数字才
# 行。即:
# int(left) + int(right)
elif op == '-':
print('{}-{}={}'.format(left, right, int(left) - int(right)))
elif op == '*':
print('{}*{}={}'.format(left, right, int(left) * int(right)))
elif op == '/' and right != '0':
print('{}/{}={}'.format(left, right, int(left) / int(right)))
def test():
code = '''
1+2
3+4
5-3
4*3
10/2
'''
naive_calc(code)
test()
方法二是清风吹雨打芭蕉好大声唉睡不着了起来打游戏 在【Python 字符串方法】帖子详情回复的代码是实现,这里本着借用给予各位参考