कोड के इस खंड को यह देखने के लिए स्ट्रिंग की जांच करनी चाहिए कि क्या इसमें लगातार एक स्थान है और या तो एक संख्या या एक मूल अभिव्यक्ति वर्ण (+, -, *, /) है

def is_basic_expr(string):
    try:
        eval(string)
        return True 
    except:
        return False
print(is_basic_expr('1 + + 22'))

उपरोक्त फ़ंक्शन गलत लौटाएगा क्योंकि ऑपरेटर + . के बाद कोई संख्या नहीं है

उदाहरण के लिए:

("2 [स्पेस] + [स्पेस] 45 [स्पेस] * [स्पेस] 444")

सच लौटना चाहिए ...

("-1")

झूठी वापसी करनी चाहिए ...

("3 [स्पेस] + [स्पेस] + [स्पेस] 67")

झूठी वापसी करनी चाहिए ...

("45 [स्पेस] [स्पेस] + [स्पेस] [स्पेस] 3")

झूठी वापसी करनी चाहिए ...

("1[स्पेस]+")

झूठी वापसी करनी चाहिए ...

-1
That Guy 7 फरवरी 2020, 08:39
क्या आप इसके लिए रेगेक्स का उपयोग करने का विरोध कर रहे हैं?
 – 
Karan Shishoo
7 फरवरी 2020, 10:42
1
क्यों? जब तक अभिव्यक्ति को पार्स किया जा सकता है, तब तक आपको क्या परवाह है कि रिक्त स्थान कहां हैं?
 – 
user207421
7 फरवरी 2020, 12:11
1
क्या केवल बाइनरी ऑपरेटरों की अनुमति है? क्या नकारात्मक संख्याएं (यूनरी ऑपरेटर)?
 – 
ccl
7 फरवरी 2020, 12:27
साथ ही 123 जैसे इनपुट के लिए अपेक्षित आउटपुट क्या है? (सिर्फ एक संख्या कोई रिक्त स्थान या कोई ऑपरेटर नहीं)
 – 
Karan Shishoo
7 फरवरी 2020, 12:46

2 जवाब

इसके लिए एक भोला विकल्प है:

def is_basic_expr(s):
    try:
        s = [l if l not in ("+", "-", "*", "/") else "+" for l in s]
        s = "".join(s)
        if "  " in s:
            return False
        s = s.split("+")
        if "" in s or " " in s:
            return False
        else:
            return True
     except:
        return False
0
YamiOmar88 7 फरवरी 2020, 10:41
1
चूंकि आपका कोड अभी है, यह 1 1 + 2 जैसे इनपुट के लिए गलत आउटपुट देगा
 – 
Karan Shishoo
7 फरवरी 2020, 10:57

बाहरी पुस्तकालयों का उपयोग किए बिना, मैं इसके बारे में इस प्रकार बताऊंगा -

def is_basic_expr(s):
    try:
        exp_list = s.split(" ")
        if not exp_list[0].isnumeric():
            return False
        for i in range(1, len(exp_list), 2):
            if exp_list[i] not in ['+', '-', '*', '/']:
                return False
            if not exp_list[i+1].isnumeric():
                return False
        return True
    except:
        return False
0
Karan Shishoo 7 फरवरी 2020, 12:40
1
यह "128 +" जैसे मामलों के लिए इंडेक्स एरर देता है
 – 
ccl
7 फरवरी 2020, 12:39
अच्छा बिंदु, इसे पकड़ने के लिए क्लॉज को छोड़कर कोशिश में बीमार फेंकना
 – 
Karan Shishoo
7 फरवरी 2020, 12:39
उस स्थिति को ठीक कर दिया, इसे False जैसे इनपुट के लिए 128 + अभी वापस करना चाहिए
 – 
Karan Shishoo
7 फरवरी 2020, 12:42