mengubah a untuk sementara tetapi tetap mempertahankan properti yang sama? [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

Jadi saya ingin mengubah fordalam kode saya menjadi a whiletetapi tetap semua properti yang sama adakah cara untuk melakukannya tanpa mengganggu kode itu sendiri?

Jawaban

2 JohnGordon Dec 06 2020 at 03:41

Jika Anda hanya ingin mengubah satu forloop menjadi satu whileloop, kedua loop ini setara:

for x in range(y):
    # do stuff

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

Anda harus membuat instance variabel z menjadi 0 dan kemudian Anda dapat menggunakan loop sementara untuk memutuskan setelah semua elemen l diperiksa.

Meskipun dalam kasus Anda, saya rasa itu akan memunculkan indexError ketika mencoba melakukan l [z + 1], jadi Anda memerlukan y - 1 sebagai kondisi penghentian.

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

Kode Anda tidak memiliki indentasi apa pun, tetapi tampaknya, seharusnya seperti ini. range (y) berarti dari 0 y-1, jadi kita mulai dari 0: z = 0, dan peningkatan z oleh 1 setiap iterasi: z += 1. Nilai terakhir adalah y-1, sehingga harus berhenti saat z = y, begitu juga saat kondisinyaz < 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