थोड़ी देर के लिए एक ही है लेकिन एक ही गुण रखने के लिए? [डुप्लिकेट]

Dec 06 2020
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लेकिन सभी समान गुणों को बनाए रखने के लिए कोड को स्वयं को परेशान किए बिना इसे करने का कोई तरीका है?

जवाब

2 JohnGordon Dec 06 2020 at 03:41

यदि आप एक forलूप को लूप में बदलना चाहते हैं while, तो ये दो लूप बराबर हैं:

for x in range(y):
    # do stuff

x = 0
while x < y:
    # do stuff
    x += 1
1 DanielLee Dec 06 2020 at 03:33

आपको 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
1 МаксимФомин Dec 06 2020 at 03:34

आपके कोड में कोई इंडेंट नहीं है, लेकिन ऐसा लगता है, यह इस तरह होना चाहिए। रेंज (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