mengubah a untuk sementara tetapi tetap mempertahankan properti yang sama? [duplikat]
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 for
dalam kode saya menjadi a while
tetapi tetap semua properti yang sama adakah cara untuk melakukannya tanpa mengganggu kode itu sendiri?
Jawaban
Jika Anda hanya ingin mengubah satu for
loop menjadi satu while
loop, kedua loop ini setara:
for x in range(y):
# do stuff
x = 0
while x < y:
# do stuff
x += 1
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
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