Aby wyjaśnić, dlaczego twój skrypt teraz nie działa, zmienię nazwę zmiennej unsortedna sorted.
Na początku Twoja lista nie jest jeszcze posortowana. Oczywiście, możemy ustawić sortedsię False.
Gdy tylko uruchomimy whilepętlę, zakładamy, że lista jest już posortowana. Pomysł jest taki: gdy tylko znajdziemy dwa elementy, które nie są we właściwej kolejności, sortedwracamy do False. sortedpozostanie True tylko wtedy, gdy nie będzie elementów w złej kolejności .
sorted = False
while not sorted:
sorted = True
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
Istnieją również drobne, drobne problemy, które pomogłyby kodowi być wydajniejszym lub bardziej czytelnym.
W forpętli używasz zmiennej element. Technicznie elementnie jest elementem; jest to liczba reprezentująca indeks listy. Poza tym jest dość długi. W takich przypadkach wystarczy użyć tymczasowej nazwy zmiennej, na przykład i„indeks”.
for i in range(0, length):
rangeKomenda może także wziąć tylko jeden argument (nazwie stop). W takim przypadku otrzymasz listę wszystkich liczb całkowitych od 0 do tego argumentu.
for i in range(length):
Przewodnik po stylach Pythona zaleca, aby nazywać zmienne małymi literami z podkreśleniami. To bardzo drobna dziura w takim małym scenariuszu; bardziej przyzwyczaisz się do tego, co najczęściej przypomina kod w Pythonie.
def bubble(bad_list):
Aby zamienić wartości dwóch zmiennych, zapisz je jako przypisanie krotki. Prawa strona jest oceniana jako krotka (powiedzmy (badList[i+1], badList[i])jest (3, 5)), a następnie jest przypisywana do dwóch zmiennych po lewej stronie ( (badList[i], badList[i+1])).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
Połącz to wszystko razem, a otrzymasz to:
my_list = [12, 5, 13, 8, 9, 65]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print my_list
(Nawiasem mówiąc, usunąłem też twoje wydrukowane oświadczenie.)