przekształcić a na chwilę, ale zachować te same właściwości? [duplikować]
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
Więc chciałbym przekształcić for
w moim kodzie a, while
ale zachować wszystkie te same właściwości. Czy istnieje sposób, aby to zrobić bez zakłócania kodu?
Odpowiedzi
Jeśli chcesz po prostu przekonwertować for
pętlę na while
pętlę, te dwie pętle są równoważne:
for x in range(y):
# do stuff
x = 0
while x < y:
# do stuff
x += 1
Będziesz musiał utworzyć wystąpienie zmiennej z na 0, a następnie możesz użyć pętli while do przerwania, gdy wszystkie elementy l zostaną sprawdzone.
Chociaż w twoim przypadku myślę, że wyrzuci on błąd indexError, gdy spróbuje wykonać l [z + 1], więc będziesz potrzebować y - 1 jako warunku zakończenia.
z = 0
while z < y:
if (sum(l[z+1:]) == sum(l[:z])):
x = False
return z
z += 1
Twój kod nie ma wcięć, ale wygląda na to, że tak powinno być. Przedział (y) oznacza od 0 do Y-1, tak, że zaczyna się od 0: z = 0
i o jeden przyrost z każdej iteracji: z += 1
. Ostatnia wartość to y-1, więc musi się zatrzymać, gdy z = y, więc gdy warunki są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