使用字符串和列表设计一个python程序,读取用户输入的一个算式,计算其正确结果。
时间: 2024-10-25 19:10:05 浏览: 21
在Python中,你可以通过解析用户输入的算式,并利用列表存储操作数和运算符,然后逐一执行计算来实现这个功能。这里我们假设用户输入的是基本的加减乘除运算。以下是一个简单的示例:
```python
def calculate_expression():
# 获取用户输入的算式,用空格分隔元素
user_input = input("请输入一个算式(例如:1 + 2 * 3):")
# 将用户输入的字符串按照"空格"切分成列表
expression_list = user_input.split()
# 初始化操作数栈和运算符栈
operand_stack = []
operator_stack = []
# 定义优先级函数,用于处理运算符的顺序
def priority(op):
if op == '+' or op == '-':
return 1
elif op == '*' or op == '/':
return 2
else:
raise ValueError(f"无效的运算符:{op}")
# 遍历表达式列表
for item in expression_list:
# 如果遇到数字,压入操作数栈
if item.isdigit():
operand_stack.append(int(item))
# 否则,如果遇到运算符
else:
while (operator_stack and priority(operator_stack[-1]) >= priority(item)):
# 从运算符栈取出操作并计算
op = operator_stack.pop()
b = operand_stack.pop()
a = operand_stack.pop()
result = perform_operation(a, b, op)
operand_stack.append(result)
# 将当前运算符压入栈
operator_stack.append(item)
# 清理栈,最后剩余的操作数相加得到最终结果
while operator_stack:
op = operator_stack.pop()
b = operand_stack.pop()
a = operand_stack.pop()
result = perform_operation(a, b, op)
operand_stack.append(result)
# 返回最终结果
return operand_stack[0]
# 对于加法和减法,直接相加或相减;对于乘法和除法,需要额外的计算函数
def perform_operation(a, b, op):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
elif op == '/':
if b != 0:
return a / b
else:
raise ZeroDivisionError("除数不能为零")
# 调用函数并打印结果
try:
result = calculate_expression()
print(f"计算结果是:{result}")
except Exception as e:
print(f"错误:{e}")
阅读全文