दिलचस्प पोस्ट
हटाएँ ax vs ax = undefined जावास्क्रिप्ट में "सबमिट फंक्शन नहीं है" त्रुटि वेबब्राउज़र पूर्ण पृष्ठ लोड हो रहा है गज़ले 6 का उपयोग करके आप सभी एपीआई कॉलों को कैसे लॉग करते हैं स्टोरीबोर्ड के भीतर एक मूल दृश्य नियंत्रक को बच्चे को देखने नियंत्रकों को लिंक करना PHP चौखटे में सुंदर यूआरएल सी # का इस्तेमाल करते हुए एचटीटीपी फॉर्म कैसे जमा करें निष्पादन योजना में एक कंप्यूटित कॉलम के लिए एक यूज़र-डिफ़ाइंड फ़ंक्शन कॉल क्यों शामिल है जो जारी है? क्रोम डेवलपर टूल में जावास्क्रिप्ट को अक्षम कैसे करें एक्सटेंशन प्रकारों के संकलन में संगतता की जांच करना, और उन्हें सीडीएफ़ के साथ प्रयोग करना डॉकर्स – यूएसबी या सीरियल डिवाइस की मेजबानी करने का कोई तरीका? पायथन में लूप के लिए सूची तत्वों को कैसे निकालें? किसी आउटपुट फ़ाइल में उपयोग के लिए कस्टम स्ट्रिंग प्रारूप में ऑब्जेक्ट को सीरियल करने के लिए सर्वोत्तम प्रथाएं डेटाबेस में पासवर्ड को स्टोर करने का सबसे अच्छा तरीका क्या एक चयन कथन में "पिछला पंक्ति" मान तक पहुंचने का कोई तरीका है?

क्यों `एक == बी या सी या डी 'हमेशा सही पर मूल्यांकन करता है?

मैं एक सुरक्षा प्रणाली लिख रहा हूँ जो अनधिकृत उपयोगकर्ताओं तक पहुंच से इनकार करता है।

import sys print("Hello. Please enter your name:") name = sys.stdin.readline().strip() if name == "Kevin" or "Jon" or "Inbar": print("Access granted.") else: print("Access denied.") 

यह अपेक्षित के रूप में अधिकृत उपयोगकर्ताओं तक पहुंच प्रदान करता है, लेकिन यह अनधिकृत उपयोगकर्ताओं को भी देता है!

 Hello. Please enter your name: Bob Access granted. 

ऐसा क्यों होता है? मैं स्पष्ट रूप से केवल पहुंच प्रदान करने के लिए कहा है जब name केविन, जॉन या इनबार के बराबर है मैंने भी विपरीत तर्क की कोशिश की है, if "Kevin" or "Jon" or "Inbar" == name , लेकिन परिणाम एक ही है।

Solutions Collecting From Web of "क्यों `एक == बी या सी या डी 'हमेशा सही पर मूल्यांकन करता है?"

कई मामलों में, पाइथन प्राकृतिक अंग्रेज़ी की तरह व्यवहार करता है और व्यवहार करता है, लेकिन यह एक ऐसा मामला है जहां अमूर्त विफल हो जाता है। लोगों को यह निर्धारित करने के लिए कि "जॉन" और "इनबार" ऑब्जेक्ट "बराबर" से जुड़े हुए हैं, लेकिन पायथन इंटरप्रिटर अधिक शाब्दिक दिमाग है, यह निर्धारित करने के लिए लोग संदर्भ सूचियों का उपयोग कर सकते हैं।

 if name == "Kevin" or "Jon" or "Inbar": 

तार्किक रूप से इसके बराबर है:

 if (name == "Kevin") or ("Jon") or ("Inbar"): 

जो, बॉब के लिए उपयोगकर्ता के बराबर है:

 if (False) or ("Jon") or ("Inbar"): 

or ऑपरेटर एक सकारात्मक सत्य मूल्य के साथ पहली तर्क का चयन करता है:

 if ("Jon"): 

और चूंकि "जॉन" एक सकारात्मक सत्य मान है, if ब्लॉक निष्पादित होता है। यही कारण है कि दिए गए नाम की परवाह किए बिना मुद्रित होने के लिए "पहुंच प्रदान"

यह सब तर्क अभिव्यक्ति पर भी लागू होता है if "Kevin" or "Jon" or "Inbar" == name । पहला मान, "Kevin" , सच है, इसलिए if ब्लॉक निष्पादित करता है।


इस सशर्त रूप से उचित रूप से निर्माण करने के दो सामान्य तरीके हैं।

  1. प्रत्येक मूल्य के विरुद्ध स्पष्ट रूप से जांचने के लिए कई == ऑपरेटरों का उपयोग करें:
    if name == "Kevin" or name == "Jon" or name == "Inbar":

  2. वैध मानों का अनुक्रम लिखें और सदस्यता के लिए परीक्षा in ऑपरेटर का उपयोग करें:
    if name in ("Kevin", "Jon", "Inbar"):

दोनों के सामान्य रूप में दूसरे को प्राथमिकता दी जानी चाहिए क्योंकि यह पढ़ने और भी तेज़ करना आसान है:

 In [1]: name = "Inbar" In [2]: %timeit name == "Keven" or name == "Jon" or name == "Inbar" 10000000 loops, best of 3: 116 ns per loop In [3]: %timeit name in ("Keven", "Jon", "Inbar") 10000000 loops, best of 3: 65.2 ns per loop