a für eine Weile umwandeln, aber die gleichen Eigenschaften behalten? [Duplikat]

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

Ich möchte das forin meinem Code in ein verwandeln, whileaber alle Eigenschaften beibehalten. Gibt es eine Möglichkeit, dies zu tun, ohne den Code selbst zu stören?

Antworten

2 JohnGordon Dec 06 2020 at 03:41

Wenn Sie nur eine forSchleife in eine whileSchleife konvertieren möchten , sind diese beiden Schleifen äquivalent:

for x in range(y):
    # do stuff

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

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

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