Kí pháp nghịch đảo Ba Lan và phương pháp tính giá trị của biểu thức toán học Hãy viết chương trình yêu cầu nhập vào một kí pháp nghịch đảo Ba Lan dưới dạng một xâu kí tự chỉ bao gồm: năm toán
Chương trình yêu cầu nhập vào một kí pháp nghịch đảo Ba Lan (Reverse Polish Notation - RPN) chỉ bao gồm các toán tử cộng, trừ, nhân, chia, lũy thừa (+, -, *, /, ^) và các toán hạng là các số nguyên có một chữ số từ 0 đến 9. Chương trình sẽ tính giá trị của biểu thức đó và in kết quả ra màn hình:
Chương trình như sau:
def evaluate_rpn(expression):
stack = []
# Define operations
operators = {
'+': lambda b, a: a + b,
'-': lambda b, a: a - b,
'*': lambda b, a: a * b,
'/': lambda b, a: a // b if b != 0 else float('inf'), # Using integer division for single-digit integers
'^': lambda b, a: a ** b
}
# Process each character in the expression
for char in expression:
if char.isdigit():
stack.append(int(char))
elif char in operators:
b = stack.pop()
a = stack.pop()
result = operators[char](b, a)
stack.append(result)
else:
raise ValueError(f"Invalid character in expression: {char}")
# The final result should be the only element left in the stack
if len(stack) != 1:
raise ValueError("The input RPN expression is invalid.")
return stack[0]
# Input the RPN expression
expression = input("Nhập biểu thức ký pháp nghịch đảo Ba Lan: ")
# Evaluate the expression
try:
result = evaluate_rpn(expression)
print(f"Kết quả: {result}")
except Exception as e:
print(f"Lỗi: {e}")