Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में अंतर्निहित कार्यों के बिना एक गणितीय अभिव्यक्ति का मूल्यांकन करने का कार्यक्रम

मान लीजिए कि हमारे पास एक स्ट्रिंग है जो गणितीय अभिव्यक्ति का प्रतिनिधित्व करती है (+, -, *, /) यहां / पूर्णांक विभाजन का प्रतिनिधित्व कर रहा है, हमें किसी भी अंतर्निहित फ़ंक्शन का उपयोग किए बिना परिणाम का मूल्यांकन करना और वापस करना होगा।

इसलिए, यदि इनपुट s ="2+3*5/7" जैसा है, तो आउटपुट 4 होगा, जैसे 2 + ((3 * 5) / 7) =4

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • s :=दिए गए स्ट्रिंग को उलट दें
  • एक फ़ंक्शन परिभाषित करें get_value().
  • चिह्न :=1
  • यदि s खाली नहीं है और s का अंतिम तत्व "-" के समान है, तो
    • एस से अंतिम तत्व हटाएं
    • चिह्न :=-1
  • मान :=0
  • जबकि s खाली नहीं है और s का अंतिम तत्व एक अंक है, करें
    • मान :=मान * 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. किसी दिए गए एक्सप्रेशन के एक्सप्रेशन ट्री के निर्माण के लिए पायथन प्रोग्राम

    एक्सप्रेशन ट्री वे होते हैं जिनमें लीफ नोड्स के संचालन के लिए मान होते हैं, और आंतरिक नोड्स में वह ऑपरेटर होता है जिस पर लीफ नोड का प्रदर्शन किया जाएगा। उदाहरण:4 + ((7 + 9) * 2) एक एक्सप्रेशन ट्री होगा जैसे - इस समस्या को हल करने का तरीका किसी दिए गए एक्सप्रेशन के लिए एक्सप्रेशन ट्री बनाने के ल

  1. पायथन प्रोग्राम में इनबिल्ट फ़ंक्शंस का उपयोग किए बिना अपर और लोअर केस कैरेक्टर गिनें

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक स्ट्रिंग दी गई है, हमें इनबिल्ट फ़ंक्शन का उपयोग किए बिना स्ट्रिंग में मौजूद अपरकेस और लोअरकेस वर्णों की संख्या गिनने की आवश्यकता है इसे अजगर में उपलब्ध islower () और isupper () फ़ंक्शन का उपयोग करके आसानी स

  1. इनबिल्ट फ़ंक्शंस का उपयोग किए बिना अपर और लोअर केस कैरेक्टर गिनने के लिए पायथन प्रोग्राम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक स्ट्रिंग इनपुट को देखते हुए, हमें दिए गए स्ट्रिंग्स में अपरकेस और लोअरकेस वर्णों की संख्या ज्ञात करनी होगी। यहां हम बिल्ट-इन ऑर्ड () फ़ंक्शन की मदद से प्रत्येक वर्ण के ASCII मान की जाँच करेंगे