¿Transformar un por un tiempo pero mantener las mismas propiedades? [duplicar]
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
Entonces, me gustaría transformar el for
en mi código en un while
pero mantener las mismas propiedades, ¿hay alguna forma de hacerlo sin alterar el código?
Respuestas
Si solo desea convertir un for
bucle en un while
bucle, estos dos bucles son equivalentes:
for x in range(y):
# do stuff
x = 0
while x < y:
# do stuff
x += 1
Deberá crear una instancia de la variable z en 0 y luego puede usar un ciclo while para romper una vez que se hayan verificado todos los elementos de l.
Aunque en su caso, supongo que arrojará un indexError cuando intente hacer l [z + 1], por lo que necesitará y - 1 como condición de terminación.
z = 0
while z < y:
if (sum(l[z+1:]) == sum(l[:z])):
x = False
return z
z += 1
Su código no tiene sangrías, pero parece que debería ser así. gama (y) medios de 0 a Y-1, por lo que partimos de 0: z = 0
y aumento z por 1 cada iteración: z += 1
. El último valor es y-1, por lo que debe detenerse cuando z = y, por lo que mientras las condiciones sonz < 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