a für eine Weile umwandeln, aber die gleichen Eigenschaften behalten? [Duplikat]
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
Ich möchte das for
in meinem Code in ein verwandeln, while
aber alle Eigenschaften beibehalten. Gibt es eine Möglichkeit, dies zu tun, ohne den Code selbst zu stören?
Antworten
Wenn Sie nur eine for
Schleife in eine while
Schleife konvertieren möchten , sind diese beiden Schleifen äquivalent:
for x in range(y):
# do stuff
x = 0
while x < y:
# do stuff
x += 1
Sie müssen die z-Variable auf 0 instanziieren und können dann eine while-Schleife verwenden, um zu unterbrechen, sobald alle Elemente von l überprüft wurden.
In Ihrem Fall wird jedoch ein indexError ausgelöst, wenn versucht wird, l [z + 1] auszuführen. Daher benötigen Sie y - 1 als Beendigungsbedingung.
z = 0
while z < y:
if (sum(l[z+1:]) == sum(l[:z])):
x = False
return z
z += 1
Ihr Code hat keine Einrückungen, aber es scheint, es sollte so sein. Bereich (y) bedeutet von 0 bis y-1, also beginnen wir bei 0: z = 0
und erhöhen z bei jeder Iteration um 1 : z += 1
. Der letzte Wert ist y-1, also muss er aufhören, wenn z = y ist, also solange die Bedingungen sindz < 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