सत्य और मिथ्या क्या है? यह सत्य और असत्य से कैसे भिन्न है?


118

मुझे अभी पता चला कि अजगर में ट्रू और फैल्सी मूल्य हैं जो सामान्य से अलग हैं Trueऔर False?

क्या कोई गहराई से समझा सकता है कि सच्चाई और झूठे मूल्य क्या हैं?

मुझे उनका उपयोग कहां करना चाहिए?

सत्य और Trueमूल्यों और मिथ्या और Falseमूल्यों के बीच अंतर क्या है ?


20
तो bool(value)में परिणाम Trueहै, तो valueहै truthy
18

4
आपने स्वयं उन शब्दों का आविष्कार किया, क्या आपने नहीं किया? वैसे भी, देखें __nonzero__और__bool__
zvone

6
सत्य / मिथ्या मूल्य उन परिस्थितियों के लिए उपयुक्त हैं जहाँ आपको किसी प्रकार के द्विआधारी परीक्षण की आवश्यकता होती है। यह सरल कोड के लिए अनुमति देता है, और सरल कोड अक्सर बग के लिए कम संभावना के साथ पढ़ने के लिए आसान है।
मार्क रैनसम

4
@ ज़ोन ट्रू और फाल्सी का उपयोग आमतौर पर कोड गोल्फ में किया जाता है, अगर प्रोग्रामिंग भाषाओं में बूलियन मूल्य नहीं होते हैं।
MilkyWay90

6
@zvone: प्रोग्रामिंग भाषाओं की तुलना करते समय 'ट्रूथी' और 'मिथ्या' का व्यापक रूप से उपयोग किया जाता है, जैसे PHP बनाम PERL बनाम पायथन बनाम JS। (बिल्कुल नहीं कोड गोल्फ)।
smci

जवाबों:


77

वर्णित टिप्पणियों के अनुसार, यह केवल उन मूल्यों को संदर्भित करता है जिनका मूल्यांकन True या False के लिए किया जाता है।

उदाहरण के लिए, यह देखने के लिए कि क्या कोई सूची इस तरह की जाँच के बजाय खाली नहीं है:

if len(my_list) != 0:
   print("Not empty!")

आप बस यह कर सकते हैं:

if my_list:
   print("Not empty!")

ऐसा इसलिए है क्योंकि बूलियन मान के लिए मूल्यांकन किए जाने पर कुछ मान, जैसे खाली सूची, को गलत माना जाता है। गैर-रिक्त सूची सत्य हैं।

इसी तरह पूर्णांक 0 के लिए, रिक्त स्ट्रिंग "", और इसी तरह, गलत के लिए, और गैर-शून्य पूर्णांक, गैर-रिक्त स्ट्रिंग और इसी तरह, सत्य के लिए।

"सत्य" और "मिथ्या" जैसे शब्दों का विचार केवल उन मूल्यों को संदर्भित करता है जिन्हें ऊपर वर्णित मामलों की तरह सत्य माना जाता है, और जिन्हें गलत माना जाता है।

उदाहरण के लिए, एक खाली सूची ( []) को "झूठी" माना जाता है, और एक गैर-रिक्त सूची (उदाहरण के लिए [1]) को "सत्यवादी" माना जाता है।

प्रलेखन के इस भाग को भी देखें ।


या इसका मतलब है कि अगर my_list सच है?

मेरा सुझाव है कि आप पायथन शेल में इन चीजों को आज़माएं और अपने लिए देखें। ;) का if my_listअर्थ है "अगर my_list खाली नहीं है", और if not my_listइसका मतलब है "अगर my_list खाली है"।
बी। ईकल्स

1
ठीक है, मुझे थोड़ी सी उलझन है, मैंने कई जगहों को देखा है if a:कि इस प्रकार की स्थितियों का क्या मतलब है? क्या इसका मतलब यह है कि अगर कोई सही है या इसका मतलब है कि असत्य है? या इसका मतलब यह है कि अगर एक सत्य है या यदि एक मिथ्या है?

1
इसका मतलब है "अगर एक सच है"। जैसा कि मैंने अपने उत्तर में वर्णित किया है, और जैसा कि अन्य लोगों ने टिप्पणियों और अन्य उत्तरों में वर्णित किया है, विभिन्न चीजें CONSIDERED True या गलत हैं, लेकिन वास्तव में ऐसा नहीं है। एक खाली सूची, उदाहरण के लिए, गलत माना जाता है। इसलिए if []:कभी अमल नहीं करेगा।
बी। इकेल्स

इसका मतलब है अगर: का मतलब है अगर एक सच है (जब एक पूर्णांक या स्ट्रिंग है) और अगर a: का अर्थ है असत्य अगर एक खाली सूची या खाली तानाशाही या गलत मान है!

199

निम्नलिखित को छोड़कर सभी मूल्यों को "सत्य" माना जाता है, जो "मिथ्या" हैं:

  • None
  • False
  • 0
  • 0.0
  • 0j
  • Decimal(0)
  • Fraction(0, 1)
  • [] - एक खाली list
  • {} - एक खाली dict
  • () - एक खाली tuple
  • '' - एक खाली str
  • b'' - एक खाली bytes
  • set() - एक खाली set
  • एक खाली range, जैसेrange(0)
  • जिसके लिए वस्तुएं
    • obj.__bool__() रिटर्न False
    • obj.__len__() रिटर्न 0

एक "सत्य" मूल्य चेक ifया whileस्टेटमेंट द्वारा किए गए चेक को संतुष्ट करेगा । हम "सत्य" और "मिथ्या" का उपयोग boolमूल्यों Trueऔर अंतर से अलग करने के लिए करते हैं False

सत्य मूल्य परीक्षण


5
महान सूची, धन्यवाद। संपूर्ण शैक्षणिक प्रश्न, लेकिन क्या आप जानते हैं कि निष्पादन आदेश क्या है? सोच रहा था कि आप एक ऑब्जेक्ट बना सकते हैं जहां बूल सही है और लेन रिटर्न 0 (या इसके विपरीत)।
हेडन क्रोकर

16
@ हेयडेन क्रोकर यह __bool__पहली बार दिखता है __len__। यदि न तो परिभाषित किया गया है, तो सभी उदाहरणों को "सच" माना जाता है। डॉक्स में इस object.__bool__पद्धति पर चर्चा की गई है
पैट्रिक हॉग

3
3.5 से पहले पायथन संस्करणों में, मध्यरात्रि यूटीसी का प्रतिनिधित्व करने वाले समय ऑब्जेक्ट को गलत माना गया था। यह आलेख समस्या की बग रिपोर्ट और अंतिम समाधान का अवलोकन देता है।
जेसन वी।

1
दिलचस्प रूप से डेटटाइम पैकेज के लिए, डेटटाइम.मिन सत्य है, जबकि टाइमडेल्टा (0) मिथ्या है।
डेविड किंगहॉर्न

1
@DavidKinghorn हालांकि यह समझ में आता है, है ना? न्यूनतम डेटटाइम मान किसी भी अन्य की तरह ही एक तारीख है, यह किसी भी तरह शून्य नहीं है। इसके विपरीत, timedelta(0)शून्य की तरह है। यह तब सामने आया जब पता चला कि आधी रात का प्रतिनिधित्व करने वाले समय के मूल्य मिथ्या
पैट्रिक हॉग

5

सत्य मान एक बूलियन संदर्भ में उपयोग की जाने वाली वस्तुओं को संदर्भित करता है और इतना अधिक बूलियन मूल्य नहीं है जो सच या गलत है। उदाहरण के रूप में इन्हें लें:

>>> bool([])
False
>>> bool([1])
True
>>> bool('')
False
>>> bool('hello')
True

4

पायथन bool()प्रकार के लिए आवेदन करके सत्यता को निर्धारित करता है , जो कि रिटर्न करता है Trueया Falseजिसका उपयोग अभिव्यक्ति में होता है जैसे ifया while

यहाँ एक कस्टम वर्ग के लिए एक उदाहरण है Vector2dऔर यह उदाहरण है Falseजब परिमाण (एक वेक्टर की लंबाई) 0 है, अन्यथा True

import math
class Vector2d(object):
    def __init__(self, x, y):
        self.x = float(x)
        self.y = float(y)

    def __abs__(self):
        return math.hypot(self.x, self.y)

    def __bool__(self):
        return bool(abs(self))

a = Vector2d(0,0)
print(bool(a))        #False
b = Vector2d(10,0)    
print(bool(b))        #True

नोट: यदि हमने परिभाषित नहीं किया होता तो __bool__यह हमेशा सही रहता, क्योंकि उपयोगकर्ता द्वारा परिभाषित वर्ग के उदाहरणों को डिफ़ॉल्ट रूप से सत्य माना जाता है।

पुस्तक से उदाहरण: "पायथन में धाराप्रवाह, स्पष्ट, संक्षिप्त और प्रभावी प्रोग्रामिंग"


2

आपको सत्य या मिथ्या मूल्यों का उपयोग कहां करना चाहिए? ये सिंथैटिक शुगर हैं , इसलिए आप इनसे हमेशा बच सकते हैं, लेकिन इनके इस्तेमाल से आप अपने कोड को अधिक पठनीय बना सकते हैं और आपको अधिक कुशल बना सकते हैं। इसके अलावा, आप उन्हें कई कोड उदाहरणों में पाएंगे, चाहे वह अजगर में हो या नहीं, क्योंकि यह अच्छा अभ्यास माना जाता है।

जैसा कि अन्य उत्तरों में बताया गया है, आप इनका उपयोग यदि परीक्षण और लूप में करते हैं। यहाँ के साथ संयुक्त मूलभूत मूल्यों के साथ अजगर 3 में दो अन्य उदाहरण हैं or, sएक स्ट्रिंग चर जा रहा है। आप समान स्थितियों में भी विस्तार करेंगे।

सत्य के बिना

if len(s) > 0:
    print(s)
else:
    print('Default value')

सच्चाई के साथ यह अधिक संक्षिप्त है:

print(s or 'Default value')

अजगर 3.8 में, हम असाइनमेंट एक्सप्रेशन का लाभ उठा सकते हैं :=

बिना सच्चाई के

if len(s) == 0:
    s = 'Default value'
do_something(s)

सच्चाई के साथ यह छोटा भी है

s or (s := 'Default value')
do_something(s)

या उससे भी कम,

do_something(s or (s := 'Default value'))

असाइनमेंट अभिव्यक्ति के बिना, कोई भी कर सकता है

s = s or 'Default value'
do_something(s)

लेकिन कम नहीं। कुछ लोगों को s =...लाइन असंतोषजनक लगती है क्योंकि यह मेल खाती है

if len(s)>0:
    s = s # HERE is an extra useless assignment
else:
    s = "Default value"

फिर भी यदि आप इसके साथ सहज महसूस करते हैं तो आप इस कोडिंग शैली का पालन कर सकते हैं।


-1
while 0:
    print("Inside the loop.", counter)
    counter -= 1
print("Outside the loop.", counter)

यदि आप इस लूप को चलाते हैं तो आप देखेंगे कि 0: = जबकि झूठ है:

0 को झूठा माना जाता है


-2

फाल्सी का मतलब है खाली सूची, टपल जैसे कुछ खाली, जैसे कि कोई डेटाटाइप खाली मान या कोई नहीं। सत्य का अर्थ है: सत्य को छोड़कर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.