函数还没学,不知道如何写。
python简单计算器,假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
用Python编程pta里的一题,真的不会
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了实现这个简单的计算器,我们可以按照以下步骤编写Python代码:
- 读取用户输入的算术表达式。
- 检查表达式是否合法(只包含数字、运算符和等号,并且至少有一个操作数)。
- 使用栈数据结构处理运算符和操作数,遵循从左到右的顺序以及相同的优先级。
- 处理加、减、乘、除运算。
- 如果遇到除数为0的情况,返回"ERROR"。
- 输出最终结果。
下面是完整的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表达式,也可以使用常规的函数定义方式。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
- ¥15 C语言使用vscode编码错误
- ¥15 用KSV5转成本时,如何不生成那笔中间凭证
- ¥20 ensp怎么配置让PC1和PC2通讯上
- ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
- ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
- ¥15 请各位帮我看看是哪里出了问题
- ¥15 vs2019的js智能提示
- ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
- ¥15 uniapp的h5项目写一个抽奖动画