преобразовать на некоторое время, но сохранить те же свойства? [дубликат]

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

Итак, я хотел бы преобразовать forв моем коде в, whileно сохранить все те же свойства, есть ли способ сделать это, не нарушая сам код?

Ответы

2 JohnGordon Dec 06 2020 at 03:41

Если вы просто хотите преобразовать forцикл в whileцикл, эти два цикла эквивалентны:

for x in range(y):
    # do stuff

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

Вам нужно будет установить переменную z в ​​0, а затем вы можете использовать цикл while для прерывания после того, как все элементы l будут проверены.

Хотя в вашем случае, я предполагаю, что он выдаст indexError, когда попытается сделать l [z + 1], поэтому вам понадобится y - 1 в качестве условия завершения.

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

В вашем коде нет отступов, но вроде должно быть так. Диапазон (у) средства от 0 до Y-1, поэтому мы начинаем с 0: z = 0и увеличение на 1 г каждой итерации: z += 1. Последнее значение - y-1, поэтому он должен останавливаться, когда z = y, поэтому whilez < 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