可用的运算符是+,-,*,/,sgrt,undo,clear python写一个基于命令行的RPN计算器 代码
时间: 2024-01-03 17:04:27 浏览: 55
计算器(支持+,-,*,/)运算
好的,以下是一个支持+,-,*,/,sqrt,undo和clear操作的基于命令行的RPN计算器的Python代码:
```python
import math
stack = []
history = []
while True:
user_input = input()
if user_input == 'q':
break
elif user_input.isdigit():
stack.append(int(user_input))
history.append(int(user_input))
elif user_input == '+':
if len(stack) < 2:
print("Error: Insufficient operands")
continue
result = stack.pop() + stack.pop()
stack.append(result)
history.append("+")
elif user_input == '-':
if len(stack) < 2:
print("Error: Insufficient operands")
continue
result = -stack.pop() + stack.pop()
stack.append(result)
history.append("-")
elif user_input == '*':
if len(stack) < 2:
print("Error: Insufficient operands")
continue
result = stack.pop() * stack.pop()
stack.append(result)
history.append("*")
elif user_input == '/':
if len(stack) < 2:
print("Error: Insufficient operands")
continue
divisor = stack.pop()
dividend = stack.pop()
if divisor == 0:
print("Error: Division by zero")
stack.append(dividend)
continue
result = dividend / divisor
stack.append(result)
history.append("/")
elif user_input == 'sqrt':
if len(stack) < 1:
print("Error: Insufficient operands")
continue
result = math.sqrt(stack.pop())
stack.append(result)
history.append("sqrt")
elif user_input == 'undo':
if len(history) < 1:
print("Error: No history")
continue
last = history.pop()
if last in ["+", "-", "*", "/"]:
stack.pop()
stack.pop()
else:
stack.pop()
elif user_input == 'clear':
stack.clear()
history.clear()
else:
print("Error: Invalid operator")
continue
print(stack)
print("Goodbye!")
```
这个计算器支持加、减、乘、除、平方根、撤销和清空操作。通过记录历史操作,撤销操作可以撤销最近的一次操作。清空操作会清空堆栈和历史记录。用户可以在任何时候输入 "q" 来退出程序。
阅读全文