কম্পিউটার

পাইথনে অন্তর্নির্মিত ফাংশন ছাড়াই একটি গাণিতিক অভিব্যক্তি মূল্যায়ন করার প্রোগ্রাম


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

সুতরাং, যদি ইনপুটটি s ="2+3*5/7" এর মত হয়, তাহলে আউটপুট হবে 4, যেমন 2 + (3 * 5) / 7) =4

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • s :=প্রদত্ত স্ট্রিংটি বিপরীত করুন
  • একটি ফাংশন get_value() সংজ্ঞায়িত করুন।
  • চিহ্ন :=1
  • যদি s খালি না হয় এবং s-এর শেষ উপাদান "-" এর মত হয়, তাহলে
    • s থেকে শেষ উপাদান মুছুন
    • চিহ্ন :=-1
  • মান :=0
  • যখন s খালি নয় এবং s এর শেষ উপাদানটি একটি অঙ্ক, do
    • মান :=মান * 10
    • মান :=মান + s থেকে শেষ উপাদানটির সাংখ্যিক মান এবং s-এর শেষ উপাদানটি মুছুন
  • রিটার্ন সাইন * মান
  • একটি ফাংশন get_term() সংজ্ঞায়িত করুন
  • টার্ম :=get_value()
  • যখন s খালি নয় এবং s এর শেষ উপাদানটি হয় * বা /, do
    • op :=s এর শেষ উপাদান এবং s থেকে শেষ উপাদান মুছুন
    • মান :=get_value()
    • যদি op "*" এর মত হয়, তাহলে
      • টার্ম :=টার্ম * মান
    • অন্যথায়,
      • টার্ম :=ফ্লোর অফ (1.0 * টার্ম / মান)
  • রিটার্ন টার্ম
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন:
  • উত্তর :=get_term()
  • যখন s খালি নয়, কর
    • op :=s এর শেষ উপাদান, এবং s থেকে মুছে দিন
    • টার্ম :=get_term()
    • যদি op "+" এর মত হয়, তাহলে
      • উত্তর :=উত্তর + পদ
    • অন্যথায়,
      • উত্তর :=উত্তর - পদ
  • উত্তর ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

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. পাইথন ব্যবহার করে একটি এক্সপ্রেশন ট্রি তৈরি এবং মূল্যায়ন করার জন্য প্রোগ্রাম

  2. একটি প্রদত্ত এক্সপ্রেশনের একটি এক্সপ্রেশন ট্রি তৈরি করতে পাইথন প্রোগ্রাম

  3. পাইথন প্রোগ্রামে অন্তর্নির্মিত ফাংশন ব্যবহার না করে বড় এবং ছোট হাতের অক্ষর গণনা করুন

  4. পাইথন প্রোগ্রাম ইনবিল্ট ফাংশন ব্যবহার না করে বড় এবং ছোট হাতের অক্ষর গণনা করতে