पायथन में "ट्रू" का मतलब क्या होता है?


89
def play_game(word_list):
    hand = deal_hand(HAND_SIZE) # random init
    while True:
        cmd = raw_input('Enter n to deal a new hand, r to replay the last hand, or e to end game: ')
        if cmd == 'n':
            hand = deal_hand(HAND_SIZE)
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'r':
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'e':
            break
        else:
            print "Invalid command."

जबकि सच क्या है?

मैं कह रहा हूँ 'जबकि सच है' शॉर्टहैंड है, लेकिन किस लिए? जबकि चर 'हाथ' को एक मान दिया जा रहा है? और क्या होगा अगर चर 'हाथ' को एक मान नहीं सौंपा जा रहा है?


1
ट्रू 1 के लिए एक उपनाम की तरह है। मेरे द्वारा पूछे गए संबंधित प्रश्न का एक प्रकार यहां पाया जा सकता है stackoverflow.com/questions/885908/…
Copas

17
@ कोपस, के Trueलिए एक उपनाम नहीं है 1। यद्यपि कई भाषाओं 1में बूलियन संदर्भ में सत्य का मूल्यांकन किया जाता है।
adamse

2
adamse: पायथन के कुछ संस्करणों में, के Trueलिए एक उपनाम है 1, नहीं? हालांकि, पायथन के नवीनतम संस्करणों में एक वास्तविक बूलियन प्रकार है।
केन

1
@adamse, @Ken: Python 2.3 में नया क्या है - PEP 285 : "बूलियन प्रकार को Python 2.3 में जोड़ा गया था। __builtin__मॉड्यूल में दो नए स्थिरांक जोड़े गए थे , True और False। (ट्रू और फाल्स कॉन्स्टेंट को जोड़ा गया था)। -पायथन 2.2.1 में स्थित है, लेकिन 2.2.1 संस्करण केवल 1 और 0 के पूर्णांक मानों पर सेट हैं और एक अलग प्रकार नहीं हैं।) "।
बजे क्रिस्टियान सियुपिटु

@adamse अजगर में, हालांकि यह कई भाषाओं में नहीं है। मैंने इसे एक अधिक सामान्य प्रश्न माना। एक शुरुआत करने वाले के रूप में बाबा ने कहा कि वह "वह 1 के लिए एक उपनाम की तरह है" पूरी तरह से सही है। मैं सहमत हूँ कि पायथन ट्रू 1 का उपनाम नहीं है। मैंने यह नहीं कहा था कि यह था।
कोपस

जवाबों:


107

while Trueहमेशा के लिए पाश। whileबयान एक अभिव्यक्ति लेता है और पाश शरीर निष्पादित करता है, जबकि (बुलियन) "सही" करने के लिए अभिव्यक्ति मूल्यांकन करता है। Trueहमेशा "सच" बूलियन का मूल्यांकन करता है और इस प्रकार लूप बॉडी को अनिश्चित काल तक निष्पादित करता है। यह एक मुहावरा है कि आप अंततः करने के लिए इस्तेमाल किया जाएगा! अधिकांश भाषाओं में आपका सामना मुहावरों के बराबर होने की संभावना है।

ध्यान दें कि अधिकांश भाषाओं में आमतौर पर लूप से जल्दी बाहर निकलने के लिए कुछ तंत्र होता है। अजगर के मामले में यह आपके प्रश्न में नमूने breakके cmd == 'e'मामले में बयान है ।


9
स्पष्टता के लिए मेरा मानना ​​है कि आप अधिकांश भाषाओं में (सत्य == सत्य) रहते हुए कर सकते हैं। यह एक नए प्रोग्रामर को इसके पीछे के तर्क को बेहतर ढंग से समझने में मदद कर सकता है।
क्रिस

9
क्रिस, while True==Trueबदसूरत है। यह उतनी ही बदसूरत है जितनी while 'apples'!='oranges':)
धीरजोस

34
जैसा कि मेरे एक शिक्षक ने बताया: यदि आपको लगता true==trueहै कि एक सुधार है, तो आप कहाँ रुकेंगे? (true==true)==trueबेहतर भी नहीं होगा ?
केन

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

6
@ मकार को अंततः इस बात की जानकारी होनी चाहिए कि बूलियन लॉजिक और लाइक को समझने के लिए नए प्रोग्रामर को प्राप्त करने में कई बार अतिरिक्त मदद मिलती है। मैं यह करने में मदद कर रहा था कि वह उसे समझ सके।
क्रिस

53

मेरा सवाल: जबकि सच्चा क्या है?

जबकि Trueहै True

जब तक सशर्त अभिव्यक्ति का मूल्यांकन होता है, तब तक लूप चलेगा True

चूँकि Trueहमेशा मूल्यांकन होता है True, लूप अनिश्चित काल तक चलेगा, जब तक कि लूप returns या breaks के भीतर कुछ नहीं होगा ।


4
यह अजगर है। कोई छोटा अभिव्यक्ति नहीं है; पी
माइक ऐसक सिप

हेह, अच्छी बात है। मैं पायथन में सोचने के आदी नहीं हूँ। हालांकि मैं आपको लगता है कि हो सकता है उसके चारों ओर कोष्ठक डाल अगर तुम चाहते थे ...
Dagg Nabbit

10

मेरा सवाल: जबकि सच्चा क्या है?

जबकि कथन के अंदर () सब कुछ एक बूलियन के रूप में मूल्यांकन किया जा रहा है। मतलब यह सच या झूठ में परिवर्तित हो जाता है।

कथन में विचार करें while(6 > 5)

यह सबसे पहले अभिव्यक्ति का मूल्यांकन करता है 6 > 5जो trueऐसा है जैसा कि कह रहा हैwhile(true)

कुछ भी जो FALSE, 0, एक खाली स्ट्रिंग "", अशक्त या अपरिभाषित नहीं है, का मूल्यांकन सही होने की संभावना है।

जब मैंने पहली बार प्रोग्रामिंग शुरू की थी तो if(foo == true)मैं जैसे चीजें करता था , मुझे महसूस नहीं हुआ कि वास्तव में वैसा ही था if(foo)

तो जब आप कहते while(true)हैं कि जैसे कह रहे हैंwhile(true == true)

तो आप सवाल का जवाब देने के लिए: जबकि सच सच है।


10

जबकि Trueसच है - यानी हमेशा। यह एक अनंत लूप है

यहां महत्वपूर्ण अंतर पर ध्यान दें, Trueजिसके बीच भाषा में एक कीवर्ड एक विशेष प्रकार के निरंतर मूल्य को दर्शाता है, और 'सच' है जो एक गणितीय अवधारणा है।


तकनीकी रूप से, आप गलत हैं। निर्माण का अर्थ है "जबकि सत्य असत्य नहीं है"। यदि आप while(5)C में लिखते हैं, तो आप अंतर देख सकते हैं , जहाँ कोई उचित बूलियन नहीं हैं। इसका मतलब यह नहीं है while(5==1), इसका मतलब है while(5!=0)
ब्लांडी

2
मुझे लगता है कि इसे 'अनिश्चित लूप' कहना अधिक उचित है। धारणा यह होनी चाहिए कि लूप ब्रेक से बाधित हो जाएगा या किसी बिंदु पर वापस आ जाएगा। वास्तव में 'अनंत' छोर प्रोग्रामर त्रुटि है; 'अनिश्चित छोरों' को डिजाइन द्वारा बनाया गया है।
डग नबबिट

3
@ बेलिंडी: स्वचालित कास्टिंग के साथ एक कमजोर टाइप की भाषा में, आप कह सकते हैं कि x 'का मूल्यांकन' y ... यह नहीं है जबकि 5 कड़ाई से 0 के बराबर नहीं है, जबकि यह 5 सच के बराबर है।
डग्गड़ नबबिट

@ बेलिंडी, while(5)सी में मतलब है, जबकि 5सच है, जबकि इसके trueया 0, जो कुछ पूरी तरह से अलग है। 5हमेशा सच होता है। सामान्य तौर पर, जब भाषाओं में एक कीवर्ड होता है true, तो एक ऐसा स्थिरांक जो सत्य होता है, लेकिन एकमात्र ऐसा स्थिरांक नहीं है जो सत्य है। इसी तरह falseजरूरी नहीं कि एकमात्र मूल्य ही झूठा हो।
क्रिस डोड

4

इस संदर्भ में, मुझे लगता है कि इसकी व्याख्या की जा सकती है

do
...
while cmd  != 'e' 

3

Trueहमेशा है True, इसलिए while Trueहमेशा के लिए लूप कर देगा।

whileकीवर्ड एक अभिव्यक्ति लेता है, और लूप जबकि अभिव्यक्ति सच है। Trueएक अभिव्यक्ति है जो हमेशा सच होती है।

संभवतः स्पष्ट करने वाले उदाहरण के रूप में, निम्नलिखित पर विचार करें:

a = 1
result = a == 1

यहाँ, a == 1वापस आ जाएगा True, और इसलिए डाल Trueदिया result। अत,

a = 1
while a == 1:
  ...

के बराबर है:

while True:
  ...

बशर्ते आप लूप के aअंदर के मूल्य में बदलाव न करें while


1
Trueनहीं है हमेशा True , जैसे True = False। ;-)
देशभक्ति

1
@ राष्ट्रवाद- सत्य ही सत्य है, प्रतिशोध के अंत तक।
धीरोसोर

3

औपचारिक रूप से, Trueएक अजगर है निर्मित निरंतर की bool प्रकार।

आप बूल प्रकार पर बूलियन ऑपरेशन का उपयोग कर सकते हैं (उदाहरण के लिए इंटरेक्टिव पाइथन प्रॉम्प्ट पर) और नंबरों को बूल प्रकार में परिवर्तित करें :

>>> print not True
False
>>> print not False
True
>>> print True or False
True
>>> print True and False
False
>>> a=bool(9)
>>> print a
True
>>> b=bool(0)
>>> print b
False
>>> b=bool(0.000000000000000000000000000000000001)
>>> print b
True

और "गोचचा" संभावित रूप से आप क्या देखते हैं और पायथन कंपाइलर क्या देखते हैं:

>>> n=0
>>> print bool(n)
False
>>> n='0'
>>> print bool(n)
True
>>> n=0.0
>>> print bool(n)
False
>>> n="0.0"
>>> print bool(n)
True

इस बात के संकेत के रूप में कि पायथन बूल प्रकार को आंतरिक रूप से कैसे संग्रहीत करता है, आप बूल प्रकार को पूर्णांकों में डाल सकते हैं और ट्रू 1 और फाल्स 0 हो जाएगा।

>>> print True+0
1
>>> print True+1
2
>>> print False+0
0
>>> print False+1
1

वास्तव में, पायथन boolप्रकार पायथन के प्रकार का एक उपवर्ग है int:

>>> type(True)
<type 'bool'>
>>> isinstance(True, int)
True

आपके प्रश्न का अधिक महत्वपूर्ण हिस्सा "क्या है while True?" 'क्या सच है', और एक महत्वपूर्ण कोरोलरी है: क्या गलत है?

पहले, हर उस भाषा के लिए जिसे आप सीख रहे हैं, सीखें कि भाषा 'सत्य' और 'गलत' को क्या मानती है। अजगर समझता है सत्य से थोड़ा अलग तरीके पर्ल सत्य उदाहरण के लिए। अन्य भाषाओं में सत्य / असत्य की कुछ अलग अवधारणाएँ हैं। पता है कि आपकी भाषा क्या विभिन्न ऑपरेशनों के लिए सही और गलत मानती है और बाद में कई सिरदर्द से बचने के लिए प्रवाह नियंत्रण करती है!

कई एल्गोरिदम हैं जहां आप कुछ संसाधित करना चाहते हैं जब तक आप पाते हैं कि आप क्या देख रहे हैं। इसलिए अनंत लूप या अनिश्चित लूप। प्रत्येक भाषा इन निर्माणों के लिए अपना मुहावरा है। यहां आम सी अनंत लूप हैं, जो पर्ल के लिए भी काम करते हैं:

for(;;) { /* loop until break */ }

/* or */

while (1) {
   return if (function(arg) > 3);
}

while True:प्रपत्र लूप से बाहर तोड़ने के कुछ तरीके के साथ अनिश्चितकालीन छोरों के लिए अजगर में आम है। यह समझने के लिए कि आप छोरों से बाहर कैसे निकलते हैं, पायथन फ्लो कंट्रोल सीखें while True। अधिकांश भाषाओं के विपरीत, उदाहरण के लिए, पायथन में elseएक लूप पर एक खंड हो सकता है । अंतिम कड़ी में एक उदाहरण है।


1

एक whileलूप एक सशर्त तर्क लेता है (जिसका अर्थ है कि आम तौर पर या तो सच है या गलत है, या इस तरह की व्याख्या की जा सकती है), और केवल स्थिति निष्पादित होने पर निष्पादित होती है True

के रूप में while True? खैर, सरलतम सच्ची स्थिति Trueस्वयं है! तो यह एक अनंत लूप है, आमतौर पर एक गेम में अच्छा होता है जिसमें बहुत सारे लूपिंग की आवश्यकता होती है। (मेरे दृष्टिकोण से अधिक सामान्य, हालांकि, कुछ प्रकार के "किए गए" वैरिएबल को झूठा करने के लिए सेट करना है और फिर खेल को समाप्त करने के लिए सही बनाना है, और लूप अधिक while not done:या जैसा भी लगेगा ।)


1

कुछ भाषाओं में ट्रू नंबर के लिए सिर्फ और सिर्फ उर्फ ​​है। आप अधिक जान सकते हैं कि यह बूलियन लॉजिक के बारे में अधिक पढ़ने से क्यों है ।


1

सीधे अपने प्रश्न का उत्तर देने के लिए: जबकि लूप की स्थिति सत्य है। जो यह हमेशा होता है, इस विशेष बिट कोड में।


0

whileजब तक स्थिति झूठी न हो जाए तब तक लूप जारी रहे। उदाहरण के लिए (स्यूडोकोड):

i = 0
while i < 10
  i++

लूप के प्रत्येक पुनरावृत्ति के साथ, i1 से वृद्धि होगी, जब तक कि यह 10. नहीं है। उस बिंदु पर, स्थिति i < 10अब सच नहीं है, और लूप पूरा हो जाएगा।

चूंकि स्थिति while Trueस्पष्ट रूप से और हमेशा होती है true, लूप कभी खत्म नहीं होगा (जब तक कि इसे किसी अन्य तरीके से तोड़ा नहीं जाता है, आमतौर पर breakलूप बॉडी के भीतर एक निर्माण द्वारा )।


0

कुछ भी Trueतेजी से मूल्यांकन नहीं करता है True। इसलिए, यह अच्छा है अगर आप while Trueइसके बजाय उपयोग करते हैं while 1==1आदि।


0
while True:
    ...

अनंत लूप का अर्थ है।

जबकि बयान अक्सर एक परिमित पाश का उपयोग किया जाता है। लेकिन निरंतर 'ट्रू' का उपयोग लूप को नियंत्रित करने की आवश्यकता के बिना समय के कथन की पुनरावृत्ति की गारंटी देता है (उदाहरण के लिए पुनरावृति के अंदर एक बूलियन मान सेट करना), जब तक आप इसे तोड़ना नहीं चाहते।

असल में

True == (1 == 1)

0

जबकि ट्रू का अर्थ है अनंत लूप, यह आमतौर पर लंबी प्रक्रिया द्वारा उपयोग किया जाता है। तुम बदल सकते हो

while True:

साथ में

while 1:

0

हालांकि इनमें से अधिकांश उत्तर अलग-अलग डिग्री के लिए सही हैं, लेकिन उनमें से कोई भी ऐसा नहीं है जितना मैं चाहता हूं।

बस रखो, का उपयोग करते हुए while True:सिर्फ एक पाश है कि जब तक आप स्पष्ट रूप से इसे का उपयोग कर से बाहर तोड़ चलना जारी रहेगा चल रहा का एक तरीका है breakया return। चूंकि ट्रू हमेशा ट्रू का मूल्यांकन करेगा, इसलिए जब आप चाहते हैं, तो आपको लूप को समाप्त करने के लिए मजबूर करना होगा।

while True:
    # do stuff

    if some_condition:
        break

    # do more stuff - code here WILL NOT execute when `if some_condition:` evaluates to True

जबकि आम तौर पर एक लूप को चलाने के लिए सेट किया जाएगा जब तक कि स्थिति झूठी न हो, या यह एक पूर्वनिर्धारित अंतिम बिंदु तक पहुंच जाए:

do_next = True

while do_next:

    # do stuff

    if some_condition:
        do_next = False

    # do more stuff - code here WILL execute even when `if some_condition:` evaluates to True

उन दो कोड विखंडन प्रभावी रूप से एक ही काम करते हैं

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

while Trueप्रारूप अधिक pythonic के बाद से आप जानते हैं कि है breakकि सटीक बिंदु पर पाश टूट रहा है, जबकि do_next = Falseके अगले मूल्यांकन से पहले और अधिक सामान कर सकता है do_next


-4

कुछ भी सच के रूप में लिया जा सकता है जब तक कि विपरीत प्रस्तुत नहीं किया जाता है। इस तरह द्वैत काम करता है। यह एक तरह से विरोधाभासों की तुलना है। काला सच हो सकता है जब तक कि सफेद किस बिंदु पर गलत है। काला भी सफेद होने तक गलत हो सकता है जिस बिंदु पर यह सच है। यह एक राज्य नहीं बल्कि विपरीत राज्यों की तुलना है। यदि या तो सच है तो दूसरा गलत है। सत्य का मतलब यह नहीं है कि यह सही है या इसे स्वीकार किया गया है। यह एक ऐसी अवस्था है जहां विपरीत हमेशा गलत होता है। यह द्वैत है।

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