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()

该代码实现了一个简单的四则运算计算器,可以批量计算小学生四则运算表达式。具体实现过程如下:

  1. 首先,将代码按行分割,得到一个代码行列表。

  2. 然后,使用正则表达式匹配四则运算表达式,并计算其值。

  3. 接着,将表达式替换为计算结果,将修改后的代码打印出来。

  4. 最后,将代码放入 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 字符串方法】帖子详情回复的代码是实现,这里本着借用给予各位参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SzetoZeZe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值