मैं इस बात को लेकर असमंजस में हूं कि किसी अन्य क्लॉज को कब निष्पादित किया जाता है। मैं यह जांचने के लिए कोड का एक टुकड़ा लिखने की कोशिश कर रहा हूं कि कोई संख्या प्रमुख है या नहीं। मेरे "if" स्टेटमेंट के तहत, जब x%n==0, मैं लूप तोड़ता हूं। क्या अन्य कथन अभी भी चलने वाला है? if...else..., for...else, while...else का सही अनुवाद क्या है? मुझे इसकी आवश्यकता कब है?

def is_prime(x):
  if x<2:
    return False
  if x==2:
    return True
  for n in range(2,x):
    if x%n==0:
      return False
      break
    else:
      return True
-2
M-M 3 अप्रैल 2018, 08:42

4 जवाब

सबसे बढ़िया उत्तर

यदि लूप break स्टेटमेंट के बिना बाहर निकलता है, तो लूप पर else क्लॉज दर्ज किया जाएगा। फॉर-लूप में, इसका आमतौर पर मतलब होता है कि आपने अंतिम आइटम से पहले पुनरावृति की है। थोड़ी देर में, इसका मतलब है कि "परीक्षण" विफल रहा।

लूप पर else प्रवाह किस तरह से काम करता है, इस बारे में भ्रमित न होने के लिए कुछ उपयोगी टिप्स:

  • क्या लूप को सशर्त के अंदर तोड़ना चाहिए, else if पर एक और की तरह है।
  • क्या एक while लूप समय "परीक्षण" की विफलता के कारण समाप्त हो जाना चाहिए, आप उस अंतिम पुनरावृत्ति में while कीवर्ड को if से बदलने की कल्पना कर सकते हैं।

उदाहरण जहां अन्य किया जाएगा निष्पादित किया जाएगा:

for x in 'abc':
    if x == 'z':
        break
else:
    # this will be executed, because we don't hit a break

for x in []:
    break
else:
    # this will be executed, because we don't hit a break

while False:
    break
else:
    # this will be executed, because we don't hit a break

उदाहरण जहां अन्य नहीं निष्पादित किए जाएंगे:

for x in 'abc':
    if x == 'b':
        break
else:
    # this will not be executed, because we hit a break

n = 0
while True:
    if n > 10:
        break
    n += 1
else:
    # this will not be executed, because we hit a break

for x in 'abc':
    if x == 'b':
        return  # assuming we're inside a function here
else:
    # this will not be executed, because flow did not exit the loop
    # (`for:else` is not like `finally`!)

while True:
    pass
else:
    # this will not be executed, and your CPU is overheating
4
wim 3 अप्रैल 2018, 06:25

क्योंकि और में आपको return True ब्लॉक कर देते हैं। जब n = 2 ने x % n == 0 की कोशिश की और इसके झूठे परिणाम के रूप में यह अन्य ब्लॉक और return True को निष्पादित करता है।

def is_prime(x):
    if x<2:
        return False
    if x==2:
        return True
    for n in range(2,x):
        if x%n==0:
          return False
    return True
0
atiq1589 3 अप्रैल 2018, 06:27

विचार यह है कि आपको किसी और पर वापसी की आवश्यकता नहीं है, इस उदाहरण को देखें:

x = 9
for n = 2,8
when n = 2 the if statement will be 9%2==0 which is False so will return 
True on else statement.

सही कार्य इस तरह दिखेगा

def is_prime(x):
    if x<2:
        return False
    if x==2:
        return True
    for n in range(2,x):
        if x%n==0:
            return False
            break
    return True

यह सही रूप है, यदि आपके पूरे लूप के लिए वापस नहीं लौटा है, तो इसका मतलब है कि संख्या अभाज्य है इसलिए सही लौटें। इसके अलावा आप x के बजाय sqrt(x) तक रेंज ले सकते हैं।

1
Silviu 3 अप्रैल 2018, 06:00

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

for idx, val in enumerate(lst):
    if val in good_vals:
        break
else:
    print("Couldn't find a good value")
    return None
print(f"Found good value {val} at position {idx}")
return do_something_with(idx)

लेकिन साधारण मामलों में, ऊपर वाले की तरह—और आपकी तरह—आप हमेशा else को अनावश्यक बनाने के लिए चीजों को फिर से लिख सकते हैं:

for idx, val in enumerate(lst):
    if val in good_vals:
        print(f"Found good value {val} at position {idx}")
        return do_something_with(idx)
print("Couldn't find a good value")
1
abarnert 3 अप्रैल 2018, 05:50