¿Transformar un por un tiempo pero mantener las mismas propiedades? [duplicar]

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

Entonces, me gustaría transformar el foren mi código en un whilepero mantener las mismas propiedades, ¿hay alguna forma de hacerlo sin alterar el código?

Respuestas

2 JohnGordon Dec 06 2020 at 03:41

Si solo desea convertir un forbucle en un whilebucle, estos dos bucles son equivalentes:

for x in range(y):
    # do stuff

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

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

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 = 0y 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