transformar um por um tempo mas manter as mesmas propriedades? [duplicado]

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

Então, eu gostaria de transformar o forno meu código em um, whilemas manter todas as mesmas propriedades. Existe alguma maneira de fazer isso sem perturbar o próprio código?

Respostas

2 JohnGordon Dec 06 2020 at 03:41

Se você deseja apenas converter um forloop em whileloop, esses dois loops são 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

Você precisará instanciar a variável z para 0 e, em seguida, poderá usar um loop while para interromper uma vez que todos os elementos de l tenham sido verificados.

Porém, no seu caso, eu acho que ele lançará um indexError quando tentar fazer l [z + 1], então você precisará de y - 1 como a condição de terminação.

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

Seu código não tem recuos, mas parece que deve ser assim. gama (y) meios de 0 a y-1, de modo que começam a partir de 0: z = 0, e aumento z por um cada iteração: z += 1. O último valor é y-1, então ele deve parar quando z = y, portanto, enquanto as condições sãoz < 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