ev_17568 2024-04-27 00:32 采纳率: 0%
浏览 3

用Python编程pta里的一题,真的不会

函数还没学,不知道如何写。
python简单计算器,假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

img

img

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-27 00:32
    关注

    引自免费微信小程序:皆我百晓生

    为了实现这个简单的计算器,我们可以按照以下步骤编写Python代码:

    1. 读取用户输入的算术表达式。
    2. 检查表达式是否合法(只包含数字、运算符和等号,并且至少有一个操作数)。
    3. 使用栈数据结构处理运算符和操作数,遵循从左到右的顺序以及相同的优先级。
    4. 处理加、减、乘、除运算。
    5. 如果遇到除数为0的情况,返回"ERROR"。
    6. 输出最终结果。

    下面是完整的Python代码实现:

    def simple_calculator(expression):
        # 定义运算符和它们对应的函数
        operators = {
            '+': lambda x, y: x + y,
            '-': lambda x, y: x - y,
            '*': lambda x, y: x * y,
            '/': lambda x, y: x // y if y != 0 else "ERROR"
        }
        
        # 将输入字符串转换为列表,元素包括数字和运算符
        tokens = list(expression)
        
        # 初始化两个栈,一个用于存储数字,另一个用于存储运算符
        num_stack = []
        op_stack = []
        
        for token in tokens:
            if token.isdigit():
                num_stack.append(int(token))
            elif token in operators:
                while (op_stack and op_stack[-1] in operators and
                       operators[token].__name__ <= operators[op_stack[-1]].__name__):
                    num2 = num_stack.pop()
                    num1 = num_stack.pop()
                    operator = op_stack.pop()
                    result = operators[operator](num1, num2)
                    num_stack.append(result)
                op_stack.append(token)
            elif token == '=':
                break
        
        # 处理剩余的运算符和数字
        while op_stack:
            num2 = num_stack.pop()
            num1 = num_stack.pop()
            operator = op_stack.pop()
            result = operators[operator](num1, num2)
            num_stack.append(result)
        
        # 返回结果
        return num_stack[0]
    
    # 测试代码
    expression = input("请输入一个四则运算算式(例如:1+2*10-10/2=):")
    result = simple_calculator(expression.strip())
    print(result)
    

    这段代码首先定义了一个字典operators,其中包含了四个基本运算及其对应的函数。然后遍历输入的表达式,将数字压入num_stack,将运算符压入op_stack。当遇到运算符时,会检查栈顶的运算符是否具有更高的优先级,如果有,就执行相应的运算。最后处理完所有运算符后,返回num_stack中的结果。

    请注意,这里我们使用了Python的lambda表达式来简化运算符的定义。如果你不熟悉lambda表达式,也可以使用常规的函数定义方式。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月27日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画