حل عبارت ریاضی با پشته در پایتون
از مسائل مهم ساختمان داده همیشه از پشته ها می توان نام برد؛ پشته ها یک نوع ساختمان داده ای هستند که برای نگهداری داده ها استفاده می شوند و فرآیند ورود و خروج خاصی دارند.
به نحوه ورود و خروج داده ها از پشته Lifo می گوییم.
در این نوشته با حل عبارت های ریاضی معمولی یا infix به کمک پشته ها (دو پشته) با زبان برنامه نویسی پایتون می پردازیم.
همراه ما باشید.
خواندن نوشته های زیر نیز به شما توصیه می شود:
حل عبارت ریاضی با پشته در پایتون
با استفاده از کد زیر به کمک پشته ها یک عبارت میانوندی را با زبان برنامه نویسی پایتون برای شما حل می کنیم:
def isOperator(c): if c != "": return (c in "+-*/") else: return False def checkPriority(c): if c in "+-": return 0 if c in "*/": return 1 def isNumber(c): if c != "": return (c in "0123456789.") else: return False def runOperator(op, number1, number2): if op == "+": return str(float(number1) + float(number2)) if op == "-": return str(float(number1) - float(number2)) if op == "*": return str(float(number1) * float(number2)) if op == "/": return str(float(number1) / float(number2)) def Calculation(expr): expr = list(expr) stack_o = list() stack_n = list() num = "" while len(expr) > 0: c = expr.pop(0) if len(expr) > 0: d = expr[0] else: d = "" if isNumber(c): num += c if not isNumber(d): stack_n.append(num) num = "" elif isOperator(c): while True: if len(stack_o) > 0: top = stack_o[-1] else: top = "" if isOperator(top): if not checkPriority(c) > checkPriority(top): number2 = stack_n.pop() op = stack_o.pop() number1 = stack_n.pop() stack_n.append(runOperator(op, number1, number2)) else: stack_o.append(c) break else: stack_o.append(c) break elif c == "(": stack_o.append(c) elif c == ")": while len(stack_o) > 0: c = stack_o.pop() if c == "(": break elif isOperator(c): number2 = stack_n.pop() number1 = stack_n.pop() stack_n.append(runOperator(c, number1, number2)) while len(stack_o) > 0: c = stack_o.pop() if c == "(": break elif isOperator(c): number2 = stack_n.pop() number1 = stack_n.pop() stack_n.append(runOperator(c, number1, number2)) return stack_n.pop() # For Exam : ((4*2)-(3-1))/(8-3*2) = 3.0 my_input = input("Enter String For Calculation : ") print(Calculation(my_input))
با توجه به کد بالا به عنوان مثال یک ورودی مثل ورودی زیر می دهیم:
((4*2)-(3-1))/(8-3*2)
و در صورتی که کد بالا را درست اجرا کنید باید خروجی 3 را مشاهده کنید.
توضیحات – اجرای عبارت میانوندی با پشته در پایتون
- در کد بالا از دو پشته با نام های stack_o و stack_n استفاده شده است که از پشته ی stack_n به عنوان پشته ای برای نگهداری اعداد و از پشته ی stack_o برای نگهداری عملگرها استفاده کردیم.
- کد بالا با زبان برنامه نویسی پایتون نوشته شده است.
- در کد بالا عبارت ریاضی میاوندی را می توانید به صورت دستی وارد کنید و هر بار یک عبارت خاص اجرا کنید و در واقع ورودی را از کاربر خواهید گرفت.
- در کد بالا توابع زیر را تعریف کرده ایم:
- isOperator
- checkPriority
- isNumber
- runOperator
- Calculation
- این برنامه اعداد اعشاری را نیز محاسبه می کند.
کتاب رایگان پایتون:
- کتاب رایگان آموزش برنامه نویسی به زبان پایتون
- کتاب علوم داده با پایتون
- کتاب آموزش الگوریتم های پایه با پایتون
اگر روش های بهتری برای حل عبارت های میانوندی با کمک زبان برنامه نویسی پایتون در اختیار دارید در بخش نظرات همین نوشته برای ما ارسال کنید.
موفق باشید.
ارسال پاسخ