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

Python में बिल्ट-इन फ़ंक्शन के बिना एक गणितीय अभिव्यक्ति का मूल्यांकन करने का प्रोग्राम


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

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

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

  • s := दी गई स्ट्रिंग को रिवर्स करें
  • get_value() फ़ंक्शन परिभाषित करें।
  • sign := 1
  • यदि s खाली नहीं है और s का अंतिम तत्व "-" के समान है, तो
    • s से अंतिम तत्व हटाएं
    • sign := -1
  • value := 0
  • जब तक s खाली नहीं है और s का अंतिम तत्व एक अंक है, करें
    • value := value * 10
    • value := value + s के अंतिम तत्व का संख्यात्मक मान, और s का अंतिम तत्व हटाएं
  • sign * value लौटाएं
  • get_term() फ़ंक्शन परिभाषित करें
  • term := get_value()
  • जब तक s खाली नहीं है और s का अंतिम तत्व या तो * या / है, करें
    • op := s का अंतिम तत्व और s से अंतिम तत्व हटाएं
    • value := get_value()
    • यदि op, "*" के समान है, तो
      • term := term * value
    • अन्यथा,
      • term := (1.0 * term / value) का फ्लोर
  • term लौटाएं
  • मुख्य मेथड से निम्नलिखित करें:
  • ans := get_term()
  • जब तक s खाली नहीं है, करें
    • op := s का अंतिम तत्व, और इसे s से हटाएं
    • 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 Program: दिए गए Expression का Expression Tree Construct करें Python Program: दिए गए Expression का Expression Tree Construct करें

    Expression trees वे होते हैं जिनमें leaf nodes में operate किए जाने वाले values होते हैं, और internal nodes में operator होता है जिस पर leaf node perform किया जाएगा। उदाहरण: 4 + ((7 + 9) * 2) का expression tree ऐसा होगा - Problem हल करने का दृष्टिकोण दिए गए expression के लिए Expression Tree constru

  1. Python प्रोग्राम में बिल्ट-इन फ़ंक्शन के बिना अपरकेस और लोअरकेस वर्णों की गिनती Python प्रोग्राम में बिल्ट-इन फ़ंक्शन के बिना अपरकेस और लोअरकेस वर्णों की गिनती

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

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

    इस लेख में, हम दिए गए प्रॉब्लम स्टेटमेंट को हल करने के समाधान और दृष्टिकोण के बारे में सीखेंगे। प्रॉब्लम स्टेटमेंट एक स्ट्रिंग इनपुट दिए जाने पर, हमें दी गई स्ट्रिंग्स में अपरकेस और लोअरकेस कैरेक्टर्स की संख्या ढूंढने की आवश्यकता है। यहां हम बिल्ट-इन ord() फंक्शन की मदद से प्रत्येक कैरेक्टर के ASC