2016-03-20 21 views
1

Bu işlevin üç hatasını bularak bir listenin sırasını ters çevirmeye çalışıyorum. Bu fonksiyonun bir listenin ilk ve son elemanlarını, ikinci ve ikinci son elemanların vb. Tersine çevirmesi beklenir. İki tane bulduğuma inanıyorum ama list[j] = y hattını düzeltmede sorun yaşıyorum.Takas Sonuna Göre Listeyi Tersine Çevirme

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)): 
     j = len(list) - i 
     x = list[i] 
     y = list[j-1] 
     list[i] = x 
     list[j] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 
+0

Kodu anlıyor musunuz? Hangi iki elementin değiştiğini görmeye çalışın ... o zaman belli olur. Ayrıca, her bir öğeyi kaç kez değiştirdiğinizi de unutmayın (eski Laurel ve Hardy komedilerini izlemek, bunu bulmaya yardımcı olabilir). – Amadan

+1

Mylist [:: - 1] 'ile ilgili sorun nedir? – Evert

+3

@Evert: Ödev hata ayıklama olduğunu varsayalım. Buradaki nokta liste tersine yazmamaktır, ancak hatalı mantığı bulmaktır. – Amadan

cevap

-1

bir kaç sorunları var Oluşan. İlk sorun, list[j-1] = x yerine list[j] = y kullanmanızdır. y'u j-1 ile doğru tanımladınız, ancak list[j-1], diğeri ise x. Diğer bir problem ise listenin başından sonuna kadar devam etmenizdir. Listenin yarısından fazlasına ulaştığınızda, işinizi geri alıyorsunuz. len(list)-i'u kullanmanıza da gerek yoktur, çünkü -i'u kullanabilirsiniz. İşte güncellenen kod:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(seq)//2): 
     x = seq[i] 
     y = seq[-i-1] 
     seq[i] = y 
     seq[-i-1] = x 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 

Çıktı: Hatta x ve y tanımlamak gerekmez

['e', 'd', 'c', 'b', 'a'] 

. Bunun yerine, bunu yapın: Adlandırmanızı da değiştirdim. Muhtemelen, seq'dan daha iyi bir ad vardır, ancak list, yerleşik türle çakıştığı için kabul edilemez.

+0

listeyi kullanmayın, yerleşiktir. –

+0

@NamitSingal: Kesinlikle haklısınız. Bunu değiştirmeyi unuttum, ama şimdi değişti. – zondo

+2

@NamitSingal: Pedantic: Yerleşik, ancak bir anahtar sözcük değil.Bir anahtar kelime olsaydı, onu kullanamazdın. – ShadowRanger

-1

kullanın bu kod:

l = ['a', 'b', 'c', 'd', 'e'] 
l=l[::-1] 
print(l) 

bu basit inşaat zorlaştırmak istiyor Neden? Veya bunu bu şekilde yapmak istemiyorsanız, aşağıdakileri kullanmayı deneyin:

l.reverse() 

işlevi. Python'un kullanıma hazır birçok işlevi vardır. Sanıyorum

+5

Diğer yorumları oku. l.reverse() 'farklı bir soruya doğru bir cevaptır. Kimse kod yazmaz ve kaç tane hata yapması gerektiğini bilir; bir ödev olmalı. – Amadan

0

Ödev ...

Ama - hepimiz ödev bir mola gerekir. Tüm listenin üzerinden geçerek iki kez geri döndürüyorsun.

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)/2): 
     j = i + 1 
     x = list[i] 
     y = list[-j] 
     list[-j] = x 
     list[i] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
l=reverse(l) 
print(l) 

Sen

['e', 'd', 'c', 'b', 'a'] 
İlgili konular