Betiğinizin neden şu anda çalışmadığını açıklamak için, değişkeni unsorted
olarak yeniden adlandıracağım sorted
.
İlk başta, listeniz henüz sıralanmamış. Tabii ki, biz ayarlamak sorted
için False
.
Döngüye başlar başlamaz while
, listenin zaten sıralandığını varsayıyoruz. Fikir şudur: Doğru sırada olmayan iki öğe bulduğumuzda, sorted
geri dönüyoruz False
. yalnızca yanlış sırada hiçbir öğe yoksasorted
kalır .True
sorted = False # We haven't started sorting yet
while not sorted:
sorted = True # Assume the list is now sorted
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False # We found two elements in the wrong order
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
# We went through the whole list. At this point, if there were no elements
# in the wrong order, sorted is still True. Otherwise, it's false, and the
# while loop executes again.
Kodun daha verimli veya okunabilir olmasına yardımcı olacak küçük küçük sorunlar da vardır.
In for
döngü, sen değişken kullanabilirsiniz element
. Teknik olarak element
bir unsur değildir; bir liste dizinini temsil eden bir sayıdır. Ayrıca oldukça uzun. Bu durumlarda, i
"dizin" gibi geçici bir değişken adı kullanın .
for i in range(0, length):
range
Komut ayrıca (adında sadece bir argüman alabilir stop
). Bu durumda, 0'dan o bağımsız değişkene kadar tüm tam sayıların bir listesini alırsınız.
for i in range(length):
Python Stil Kılavuzu değişkenleri alt çizgilerle küçük harflerle adlandırılmış önerir. Bu, bunun gibi küçük bir betik için çok küçük bir olaydır; daha çok Python kodunun neye benzediğine alışmanızı sağlamaktır.
def bubble(bad_list):
İki değişkenin değerlerini takas etmek için, bunları bir demet ataması olarak yazın. Sağ taraftaki bir demet olarak değerlendirilir (diyelim ki, alır (badList[i+1], badList[i])
ise (3, 5)
sol tarafta iki değişkene atanır sonra) ve ( (badList[i], badList[i+1])
).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
Hepsini bir araya getirin ve şunu elde edin:
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
(Bu arada, basılı ifadeni de kaldırdım.)