しばらくの間を変換しますが、同じプロパティを維持しますか?[複製]

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、これら2つのループは同等です。

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にインスタンス化する必要があります。次に、lのすべての要素がチェックされたら、whileループを使用して中断できます。

あなたの場合、l [z + 1]を実行しようとすると、indexErrorがスローされると思います。したがって、終了条件として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

コードにインデントはありませんが、次のようになります。range(y)は0からy-1を意味するため、0:から開始しz = 0、反復ごとにzを1ずつ増やしますz += 1。最後の値はy-1であるため、z = yのときに停止する必要があります。したがって、条件がz < 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