थोड़ी देर के लिए एक ही है लेकिन एक ही गुण रखने के लिए? [डुप्लिकेट]
def p(l):
x = True
y = len(l)
for z in range(y):
if (sum(l[z+1:]) == sum(l[:z])):
x = False
return z
if x:
return -1
इसलिए मैं for
अपने कोड को एक में बदलना चाहूंगा, while
लेकिन सभी समान गुणों को बनाए रखने के लिए कोड को स्वयं को परेशान किए बिना इसे करने का कोई तरीका है?
जवाब
यदि आप एक for
लूप को लूप में बदलना चाहते हैं while
, तो ये दो लूप बराबर हैं:
for x in range(y):
# do stuff
x = 0
while x < y:
# do stuff
x += 1
आपको z वैरिएबल को 0 पर इंस्टेंट करना होगा और फिर एल के सभी तत्वों को जांचने के बाद आप थोड़ी देर के लूप का उपयोग कर सकते हैं।
हालांकि आपके मामले में, मुझे लगता है कि यह एक indexError फेंक देगा जब यह l [z + 1] करने की कोशिश करता है, तो आपको समाप्ति की स्थिति के रूप में y - 1 की आवश्यकता होगी।
z = 0
while z < y:
if (sum(l[z+1:]) == sum(l[:z])):
x = False
return z
z += 1
आपके कोड में कोई इंडेंट नहीं है, लेकिन ऐसा लगता है, यह इस तरह होना चाहिए। रेंज (y) का अर्थ 0 से y-1 है, इसलिए हम 0 से शुरू करते हैं: z = 0
और z को 1 पुनरावृति से बढ़ाते हैं z += 1
:। अंतिम मान y-1 है, इसलिए इसे z = y पर रोकना चाहिए, इसलिए जब शर्तें होंz < y
x = True
y = len(l)
# for z in range(y):
z = 0
while z < y:
if (sum(l[z+1:]) == sum(l[:z])):
x = False
return z
z += 1 # increase z value
if x:
return -1