pętla w pythonie problem

0
for i in range(0, 10):
    print(i)
    i-=1

chciałbym aby kod zwaracał coś takiego
0
0
0
0
0
0
0
0
0

zaś działa tak, że wyświetla od 0 do 9 cyfry. Generalnie chodzi o to aby "i-=1" w pętli odziałowywało na numer iteracji czyli iteracja zostaje powtórzona a w tym przypadku ciąglo by pokazywało 0, proszę o pomoc

0

Pętla for w pythonie nie działa tak jak w innych językach.
range(0, 10) jest funkcją która zwraca generator (coś jak iterator, ale kolejne wartości tworzone są na bieżąco).
i jest za każdym razem ustawiane na nową wartość zwracaną przez generator, pętla zakańcza się gdy generator nic nie zwraca. Efek jest taki, że zmiany jakie wprowadzasz do i, nigdy nie mają wpływu na następną iterację.
Jeśli chcesz by kolejne iteracje były od siebie zależne użyj pętli while.
Możesz też napisać własny generator. To jest proste, pomogę jeśli naświetlisz swój pierwotny problem.

0

Wystarczy to napisać tak:

for i in range(0, 10):
    print(0)
0
datamining napisał(a):

Wystarczy to napisać tak:

for i in range(0, 10):
    print(0)

Tak jak kolega w komenatrzu zauważył, chciałem tylko przedstawić problem.

   s =self.ui.textEdit.toPlainText()
                        list = [s]
                        s = "".join(list)                        
                        s = s.splitlines()
                        i = len(s)
                        self.ui.textEdit.setText('')
                        for i in range(0, i):
                                l = s[i].find('|')
                                if l != -1:
                                        
                                        s1 = s[i]
                                        s1 = s1[:0] + s1[l - 3:]
                                        s1 = s1[:7]
                                        s[i] = s1
                                        
                                        self.ui.textEdit.setText(self.ui.textEdit.toPlainText() + s1 + '\n')
                                else:
                                        s1 = s[i]        
                                        s.remove(s1)

Tak wygląda mój problem. Podczas wykonwyania else czyli gdy w lini nie ma znaku "|" usuwany jest dany element z listy ale następna iteracja już przeskakuje o 2 przez co może wyskoczyć błąd, że nie ma danego indexu na liscie bo usunałem jeden więc wszystkie się przesuwają. Jak ktoś nie rozumie to prosze napisać napisze inaczej.

0

Zamiast modyfikować obecną kolekcję, twórz kolejną.

0

iteruj od góry do dołu

0
Wibowit napisał(a):

Zamiast modyfikować obecną kolekcję, twórz kolejną.

dzięki, pewnie bym na to wpadł ale myślałem, że będzie jakieś wyjście z tą pętlą.

ŁF napisał(a):

iteruj od góry do dołu

tego nie rozumiem ;p

0

Primo:

list.remove(x)
Remove the first item from the list whose value is x. It is an error if there is no such item.

Jeśli będziesz miał duplikaty w liście to remove niekoniecznie zrobi to co chcesz.

Secundo:
remove(x) wywoływane wiele razy może być kosztowne, dużo bardziej niż tworzenie nowej listy.

Tertio:
Modyfikowanie i iterowanie jednocześnie po tej samej liście jest raczej błędogenne oraz mało eleganckie i czytelne.

0

pomyślałem chwile i wymyśliłem. Nie musze przecież używac remove wystarczy, że do nowej listy będę dował tylko to z ifa a z else nic.

1 użytkowników online, w tym zalogowanych: 0, gości: 1