Betiğinizin neden şu anda çalışmadığını açıklamak için, değişkeni unsortedolarak yeniden adlandıracağım sorted.
İlk başta, listeniz henüz sıralanmamış. Tabii ki, biz ayarlamak sortediç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, sortedgeri 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 fordöngü, sen değişken kullanabilirsiniz element. Teknik olarak elementbir 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):
rangeKomut 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.)