transformer un pendant un certain temps mais garder les mêmes propriétés? [dupliquer]

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

Je voudrais donc transformer le fordans mon code en un whilemais garder toutes les mêmes propriétés y a-t-il un moyen de le faire sans déranger le code lui-même?

Réponses

2 JohnGordon Dec 06 2020 at 03:41

Si vous souhaitez simplement convertir une forboucle en whileboucle, ces deux boucles sont équivalentes:

for x in range(y):
    # do stuff

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

Vous devrez instancier la variable z à 0, puis vous pourrez utiliser une boucle while pour rompre une fois que tous les éléments de l ont été vérifiés.

Bien que dans votre cas, je suppose qu'il lèvera une indexError quand il essaiera de faire l [z + 1], donc vous aurez besoin de y - 1 comme condition de terminaison.

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

Votre code n'a pas de retrait, mais il semble qu'il devrait en être ainsi. plage (y) un moyen de 0 à N-1, de sorte que l' on part de 0: z = 0, et z par augmentation de 1 à chaque itération: z += 1. La dernière valeur est y-1, elle doit donc s'arrêter lorsque z = y, donc tant que les conditions sontz < 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