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

পাইথনে বেসিক ক্যালকুলেটর II


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

ইনপুট যদি "3+2*2" হয়, তবে আউটপুট হবে 7।

এটি সমাধান করতে আমরা নিচের ধাপগুলো ফলো করব (স্ট্যাক ব্যবহার করে অপারেটর প্রসিডেন্স হ্যান্ডলিং):

  • stack := [], i := 0, x := ""

  • s-এর প্রতিটি ক্যারেক্টার j জন্য:

    • যদি j != " ", তবে x += j

  • s := x, n := len(s)

  • while i < n:

    • যদি s[i] == '/':

      • i++, num, i = make_num(s, i)

      • যদি stack[-1] < 0, তবে stack[-1] = -(abs(stack[-1]) // num), অন্যথায় stack[-1] //= num

    • অন্যথায় যদি s[i] == '*':

      • i++, num, i = make_num(s, i)

      • stack[-1] *= num

    • অন্যথায় যদি s[i] == '-':

      • i++, num, i = make_num(s, i)

      • stack.append(-num)

    • অন্যথায় যদি s[i] == '+':

      • i++, num, i = make_num(s, i)

      • stack.append(num)

    • অন্যথায় (সংখ্যা):

      • num, i = make_num(s, i)

      • stack.append(num)

      • i++

  • return sum(stack)

উদাহরণ

class Solution(object):
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        """
        stack = []
        i = 0
        x = ""
        for j in s:
            if j != " ":
                x += j
        s = x
        n = len(s)
        while i < n:
            if s[i] == '/':
                i += 1
                num, i = self.make_num(s, i)
                if stack[-1] < 0:
                    stack[-1] = -1 * (abs(stack[-1]) // num)
                else:
                    stack[-1] = stack[-1] // num
            elif s[i] == '*':
                i += 1
                num, i = self.make_num(s, i)
                stack[-1] = stack[-1] * num
            elif s[i] == '-':
                i += 1
                num, i = self.make_num(s, i)
                stack.append(-num)
            elif s[i] == '+':
                i += 1
                num, i = self.make_num(s, i)
                stack.append(num)
            else:
                num, i = self.make_num(s, i)
                stack.append(num)
                i += 1
        return sum(stack)

    def make_num(self, s, i):
        start = i
        while i < len(s) and s[i] != '/' and s[i] != '*' and s[i] != '-' and s[i] != '+':
            i += 1
        return int(s[start:i]), i - 1

ইনপুট

"3+2*2"

আউটপুট

7

  1. পাইথনে বাইনারি ট্রি পোস্টঅর্ডার ট্রাভার্সাল

  2. পাইথনে হিস্টোগ্রামে সবচেয়ে বড় আয়ত

  3. পাইথনে রেইন ওয়াটার ট্র্যাপিং

  4. পাইথনে বেসিক ক্যালকুলেটর প্রোগ্রাম