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