কম্পিউটার টিউটোরিয়াল

পাইথনে বিল্ট-ইন ফাংশন ছাড়া ম্যাথম্যাটিক্যাল এক্সপ্রেশন ইভ্যালুয়েট করার প্রোগ্রাম


ধরি আমাদের একটি স্ট্রিং আছে যা একটি ম্যাথম্যাটিক্যাল এক্সপ্রেশন রিপ্রেজেন্ট করে (+, -, *, /)। এখানে / হলো ইন্টিজার ডিভিশন। আমাদের বিল্ট-ইন ফাংশন ব্যবহার না করে এক্সপ্রেশনটি ইভ্যালুয়েট করে রেজাল্ট রিটার্ন করতে হবে।

তাই, ইনপুট যদি s = "2+3*5/7" হয়, তবে আউটপুট হবে ৪, কারণ ২ + ((৩ * ৫) / ৭) = ৪।

সমাধানের ধাপগুলো:

  • s := দেওয়া স্ট্রিং রিভার্স করুন
  • get_value() ফাংশন ডিফাইন করুন
    • sign := 1
    • যদি s খালি নয় এবং লাস্ট এলিমেন্ট - হয়, তবে
      • লাস্ট এলিমেন্ট ডিলিট করুন
      • sign := -1
    • value := 0
    • যখন s খালি নয় এবং লাস্ট এলিমেন্ট ডিজিট হয়, করুন
      • value := value * 10
      • value := value + numeric value of last element, এবং লাস্ট এলিমেন্ট ডিলিট করুন
    • sign * value রিটার্ন করুন
  • get_term() ফাংশন ডিফাইন করুন
    • term := get_value()
    • যখন s খালি নয় এবং লাস্ট এলিমেন্ট * বা / হয়, করুন
      • op := last element, এবং ডিলিট করুন
      • value := get_value()
      • যদি op == "*", তবে term := term * value
      • অন্যথায়, term := floor(1.0 * term / value)
    • term রিটার্ন করুন
  • মেইন মেথড থেকে করুন
    • ans := get_term()
    • যখন s খালি নয়, করুন
      • op := last element, এবং ডিলিট করুন
      • term := get_term()
      • যদি op == "+", তবে ans := ans + term
      • অন্যথায়, ans := ans - term
    • ans রিটার্ন করুন

বেশি বুঝতে নিচের বাস্তবায়নটি দেখুন:

উদাহরণ

from math import floor, trunc

class Solution:
    def solve(self, s):
        s = list(s[::-1])
        def get_value():
            sign = 1
            if s and s[-1] == "-":
                s.pop()
                sign = -1
            value = 0
            while s and s[-1].isdigit():
                value *= 10
                value += int(s.pop())
            return sign * value
        def get_term():
            term = get_value()
            while s and s[-1] in "*/":
                op = s.pop()
                value = get_value()
                if op == "*":
                    term *= value
                else:
                    term = floor(1.0 * term / value)
            return term
        ans = get_term()
        while s:
            op, term = s.pop(), get_term()
            if op == "+":
                ans += term
            else:
                ans -= term
        return ans

ob = Solution()
s = "2+3*5/7"
print(ob.solve(s))

ইনপুট

"2+3*5/7"

আউটপুট

4
  1. Python দিয়ে এক্সপ্রেশন ট্রি বানানো এবং ইভ্যালুয়েট করার প্রোগ্রাম

  2. পাইথন প্রোগ্রাম: দिये गये এক্সপ্রেশন থেকে এক্সপ্রেশন ট্রি (Expression Tree) নির্মাণ

  3. পাইথন প্রোগ্রাম বিল্ট-ইন ফাংশন ছাড়া আপারকেস ও লোয়ারকেস ক্যারেক্টার কাউন্ট করা

  4. পাইথনে বিল্ট-ইন ফাংশন ছাড়া আপারকেস এবং লোয়ারকেস ক্যারেক্টার গণনা