koddla

Yazılımcıları bilgi ile güçlendirir.

Python101 – Listeler

Birden fazla değere sahip değişkenler

Tek bir değeri depolayan sıradan değişkenleri artık biliyoruz. Ancak bazı değişken türleri birden fazla değer tutabilir. Birden fazla nesne içerebilecekleri için bunlara kapsayıcılar denir. Bu türün en basit öğesi listelerdir. Bir liste örneğine aşağıda bakalım:

hangi_ay = int(input("Hangi ay (1-12)? "))
aylar = ['Ocak', 'Subat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz',
          'Agustos', 'Eylul', 'Ekim', 'Kasım', 'Aralık']

if 1 <= hangi_ay <= 12:
    print("Seçtiğiniz ay:", aylar[hangi_ay - 1])

çıktı örneği:

Hangi ay (1-12)? 3
Seçtiğiniz ay:Mart

Bu örnekte aylar değişkeni listedir. Bu değişken aylar = ['Ocak', 'Subat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Agustos', 'Eylul', 'Ekim', 'Kasım', 'Aralık'] satırır ile tanımlanır. Liste öğeleri [ ile başlar ve ] ile biter. Öğeler birbirinden virgülle (,) ayrılır. Liste değişkeni ise aylar[hangi_ay - 1] ifadesi ile kullanıldı. Listeler, 0’dan itibaren numaralanan öğelerden oluşur. Başka bir deyişle, Ocak’ı isteseniz aylar[0] ifadesini kullanmanız gerekir. Listeye bir sayı veririz ve bu konumda depolanan değeri döndürürüz.

if 1 <= which_one <= 12: ifadesi yalnızca which_one değişkeninin bir ile on iki arasında olması durumunda doğru olacaktır. 

Listeler bir dizi kutu olarak düşünülebilir. Her kutunun farklı bir değeri vardır. Örneğin, aşağıdaki örnekte demolist listesi için demolist[0] ifadesi “yaşam” öğesini, demolist[3] ise 6 öğesini döndürür. Her kutuya o kutunun numarası ile başvurulur.

kutu numarası012345
demolist“yaşam”42“evren”6“ve”9

Listelerin diğer özellikleri[düzenleme | kaynağı düzenle]

Bir sonraki örnek, listelerin yapabileceği diğer birçok şeyi göstermektir (bir kez olsun yazmanızı beklemiyorum, ancak muhtemelen onlarla rahat edene kadar etkileşimli modda listelerle oynamalısınız.). İşte gidiyor:

demolist = ["yaşam", 42, "evren", 6, "ve", 9]
print("demolist = ",demolist)
demolist.append("her şey")
print("'her şey' eklendikten sonraki demolist:")
print(demolist)
print("len(demolist) =", len(demolist))
print("demolist.index(42) =", demolist.index(42))
print("demolist[1] =", demolist[1])

# tüm öğeler üzerinde döngü:
for c in range(len(demolist)):
    print("demolist[", c, "] =", demolist)

del demolist[2]
print("'evren' çıkartıldıktan sonra demolist:")
print(demolist)
if "yaşam" in demolist:
    print("'yaşam' demolist listesinde bulundu")
else:
    print("'yaşam' demolist listesinde bulunamadı")

if "amoeba" in demolist:
    print("'amoeba' demolist listesinde bulundu")

if "amoeba" not in demolist:
    print("'amoeba' demolist listesinde bulunamadı")

diger_liste = [42,7,0,123]
diger_liste.sort()
print("Sıralanmış diger_liste:", diger_liste)

Çıktı:

demolist = ["yaşam", 42, "evren", 6, "ve", 9]
'her şey' eklendikten sonraki demolist:
["yaşam", 42, "evren", 6, "ve", 9, "her şey"]
len(demolist) = 7
demolist.index(42) = 1
demolist[1] = 42
demolist[ 0 ] = yaşam
demolist[ 1 ] = 42
demolist[ 2 ] = evren
demolist[ 3 ] = 6
demolist[ 4 ] = ve
demolist[ 5 ] = 9
demolist[ 6 ] = her şey
'evren' çıkartıldıktan sonra demolist:
['yaşam', 42, 6, 've', 9, 'her şey']
'yaşam' demolist listesinde bulundu
'amoeba' demolist listesinde bulundu
Sıralanmış diger_liste: [0, 7, 42, 123]

Bu örnekte bir sürü yeni işlev kullandık. print ile listenin tüm öğelerini bastırabildiğimize dikkat edin. append işlevi, listenin sonuna yeni bir öğe eklemek için kullanılır. len işlevi listede kaç öğe olduğunu döndürür. Bir listenin geçerli dizinleri ([ ] içinde kullanılabilecek sayılarda olduğu gibi) 0 ile len - 1 arasında değişir. index işlevi bir öğenin ilk konumunun listede nerede bulunduğunu bildirir. Örneğin demolist.index(42) ifadesi 1 döndürür ve demolist[1] çalıştırıldığında ise 42 döndürür. Bir listenin sizin için sağladığı tüm işlevler hakkında yardım almak için etkileşimli Python yorumlayıcısına help(list) yazabilirsiniz. 

# tüm öğeler üzerinde döngü: satırır, programcıya (yorum olarak da adlandırılır) bir anımsatıcı olması amacıyla yazılmış. Python, geçerli satırda #‘dan sonra yazılan her şeyi yoksayar. Bu durumda aşağıdaki sonraki satırlar çalıştırılır: 

for c in range(len(demolist)):
    print('demolist[', c, '] =', demolist)

0’dan başlayan ve listenin son dizinine ulaşana kadar artırılan bir c değişkeni oluşturur. Bu arada print ifadesi listenin her öğesini yazdırır. 

Yukarıdaki ifadeyi çalıştırmanınn çok daha iyi bir yolu ise aşağıdaki gibi olabilir:

for c, x in enumerate(demolist):
    print("demolist[", c, "] =", x)

del komutu, listedeki belirli bir öğeyi kaldırmak için kullanılabilir. Sonraki birkaç satırda ise bir öğenin listede olup olmadığını test etmek için in işlecini kullanılır. sort işlevi listeyi sıralar. Bu, en küçük sayıdan en büyük sayıya sıralı bir listeye veya alfabetik bir listeye ihtiyacınız varsa kullanışlı olacaktır. Bunun listeyi yeniden düzenlediğini unutmayın. Özetle, bir liste için aşağıdaki işlemler gerçekleşir: 

örnekaçıklama
demolist[2]dizin 2’deki öğeye erişir
demolist[2] = 3dizin 2’deki öğeyi 3 olarak ayarlar
del demolist[2]dizin 2’deki öğeyi kaldırır
len(demolist)listenin uzunluğunu verir 
"deger" in demolist“değer” listede bir öğeyse True döner
"deger" not in demolist"deger" listede bir öğe değilse True döner
diger_liste.sort()diger_liste listesini sıralar. Listenin sıralanması için her öğenin sayılardan veya veya dizeler oluşması gerektiğini unutmayın. 
demolist.index("deger")"deger" öğesinin ilk bulunduğu konumu verir
demolist.append("deger")listenin sonuna "deger" öğesini ekler 
demolist.remove("deger")değer öğesi ilk bulunduğu konumdan kaldırılır

Bir sonraki örnek, bu özellikleri daha kullanışlı bir şekilde kullanır:

menu_ogesi = 0
isimlist = []
while menu_ogesi != 9:
    print("--------------------")
    print("1. Listeyi bastır")
    print("2. Listeye isim ekle")
    print("3. Listeden isim çıkar")
    print("4. Listedeki bir ismi değiştir")
    print("9. Çıkış")
    menu_ogesi = int(input("Menüden bir seçenek seçin: "))
    if menu_ogesi == 1:
        simdiki_oge = 0
        if len(isimlist) > 0:
            while simdiki_oge < len(isimlist):
                print(simdiki_oge, ".", isimlist[simdiki_oge])
                simdiki_oge = simdiki_oge + 1
        else:
            print("Liste boş")
    elif menu_ogesi == 2:
        isim = input("Eklemek için bir isim yazın: ")
        isimlist.append(isim)
    elif menu_ogesi == 3:
        sil_isim = input("Hangi ismi çıkarmak istersiniz: ")
        if sil_isim in isimlist:
            # isimlist.remove(sil_isim) ifadesi de kullanılabilir
            oge_sayisi = isimlist.index(sil_isim)
            del isimlist[oge_sayisi]
            # Yukarıdaki kod öğeyi sadece ilk bulunduğu konumdan siler
            # Aşağıdaki kod tüm konumlardakini silecektir.
            # while sil_isim in isimlist:
            #       oge_sayisi = isimlist.index(sil_isim)
            #       del isimlist[oge_sayisi]
        else:
            print(sil_isim, " bulunamadı")
    elif menu_oge == 4:
        eski_isim = input("Hangi ismi değiştirmek istersiniz: ")
        if eski_isim in isimlist:
            oge_sayisi = isimlist.index(eski_isim)
            yeni_isim = input("Yeni isim : ")
            isimlist[oge_sayisi] = yeni_isim
        else:
            print(eski_isim, " bulunamadı")

print("Goodbye")

Ve işte bu kodun çıktısı

--------------------
1. Listeyi bastır
2. Listeye isim ekle
3. Listeden isim çıkar
4. Listedeki bir ismi değiştir
9. Çıkış

Menüden bir seçenek seçin: 2
Eklemek için bir isim yazın: Jack

Menüden bir seçenek seçin: 2
Eklemek için bir isim yazın: Jill

Menüden bir seçenek seçin: 1
0 . Jack
1 . Jill

Menüden bir seçenek seçin: 3
Hangi ismi çıkarmak istersiniz: Jack

Menüden bir seçenek seçin: 4
Hangi ismi değiştirmek istersiniz: Jill
Yeni isim : Jill Peters

Menüden bir seçenek seçin:1
0 . Jill Peters

Menüden bir seçenek seçin: 9
Goodbye

Bu yazdığımız uzun bir programdı. Kaynak koduna bir göz atalım. isimlist = [] satırı öğesi olmayan bir liste oluşturur. Bir sonraki önemli satır while menu_ogesi != 9:. Bu satır, bu program için menü sistemine izin veren bir döngü başlatır. Sonraki birkaç satır bir menü görüntüler ve programın hangi bölümünün çalıştırılacağına karar verir. 

isimlist = 0
if len(isimlist) > 0:
            while simdiki_oge < len(isimlist):
                print(simdiki_oge, ".", isimlist[simdiki_oge])
                simdiki_oge = simdiki_oge + 1
        else:
            print("Liste boş")

listeyi gözden geçirir ve her adı yazdırır. len(isimlist) listede kaç öğe olduğunu söyler. len 0 döndürürse, liste boştur. 

Birkaç satır sonra isimlist.append(isim) ifadesini görürüz. Listenin sonuna öğe eklemek için append işlevi kullanılır. İki satır daha atlayıp aşağıdaki bölüme dikkat edelilm:

oge_sayisi = isimlist.index(sil_isim)
del isimlist[oge_sayisi]

Burada index işlevi bir öğeyi kaldırmak için daha sonra kullanılacak dizin değerini bulmak için kullanılır. del isimlist[oge_sayisi] listenin bir öğesini kaldırmak için kullanılır. 

Sonraki bölüm

        eski_isim = input("Hangi ismi değiştirmek istersiniz: ")
        if eski_isim in isimlist:
            oge_sayisi = isimlist.index(eski_isim)
            yeni_isim = input("Yeni isim : ")
            isimlist[oge_sayisi] = yeni_isim
        else:
            print(eski_isim, " bulunamadı")

index işlevini öğenin yerini bulmak için kullanır ve sonra bu yere yeni değeri koyar.

Tebrikler, listelerle birlikte, artık bir bilgisayarın yapabileceği herhangi bir hesaplamayı yapabileceğiniz bir dili yeterince biliyorsunuz (bu teknik olarak Turing-Completeness olarak bilinir). Tabii ki, hayatınızı kolaylaştırmak için kullanabileceğiniz birçok özellik hala var.

test.py

## This program runs a test of knowledge

# First get the test questions
# Later this will be modified to use file io.
def get_questions():
    # notice how the data is stored as a list of lists
    return [["What color is the daytime sky on a clear day? ", "blue"],
            ["What is the answer to life, the universe and everything? ", "42"],
            ["What is a three letter word for mouse trap? ", "cat"]]

# This will test a single question
# it takes a single question in
# it returns True if the user typed the correct answer, otherwise False

def check_question(question_and_answer):
    # extract the question and the answer from the list
    # This function takes a list with two elements, a question and an answer.  
    question = question_and_answer[0]   
    answer = question_and_answer[1]
    # give the question to the user
    given_answer = input(question)
    # compare the user's answer to the tester's answer
    if answer == given_answer:
        print("Correct")
        return True
    else:
        print("Incorrect, correct was:", answer)
        return False

# This will run through all the questions
def run_test(questions):
    if len(questions) == 0:
        print("No questions were given.")
        # the return exits the function
        return
    index = 0
    right = 0
    while index < len(questions):
        # Check the question
        #Note that this is extracting a question and answer list from the list of lists.
        if check_question(questions[index]): 
            right = right + 1
        # go to the next question
        index = index + 1
    # notice the order of the computation, first multiply, then divide
    print("You got", right * 100 / len(questions),\
           "% right out of", len(questions))

# now let's get the questions from the get_questions function, and
# send the returned list of lists as an argument to the run_test function.

run_test(get_questions())

True ve False değerleri sırasıyla 1 ve 0’ı işaret eder. Genellikle kontrol ifadelerinde, döngü koşullarında vb. durumlarda kullanılır. Daha sonraki bölümlerde bu konu ile ilgili daha fazla bilgi edineceksiniz get_questions() aslında bir liste olduğunu lütfen unutmayın. Teknik olarak bir fonksyion olsa da, bu işlevin yaptığı tek şey bir liste listesi döndürmek.

Örnek Çıktı:

What color is the daytime sky on a clear day? green
Incorrect, correct was: blue
What is the answer to life, the universe and everything? 42
Correct
What is a three letter word for mouse trap? cat
Correct
You got 66 % right out of 3

Alıştırmalar

test.py programını genişletin, böylece teste girme, soru ve cevap listesini görüntüleme ve çıkış seçeneği sunan bir menüye sahip olsun. Ayrıca, “ping” cevabıyla “Gerçekten gelişmiş bir makine nasıl bir gürültü çıkarırr?” diye soran yeni bir soru da ekleyin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top