d1100108 gÖrsel programlama ve verİ yapilari Öğretim … · programlama dili ile programlama...

49
Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta [email protected] Ders Zamanı Perşembe 08:30 12:15 Derslik MBL Dersin Amacı Bu dersin amacı, nesneye dayalı programlama konusuna bir giriş yapmak, nesne tabanlı bir programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI

Upload: others

Post on 10-Jan-2020

69 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUNOda NumarasıE-posta [email protected] Zamanı Perşembe 08:30 – 12:15

Derslik MBL

Dersin AmacıBu dersin amacı, nesneye dayalı programlama konusuna bir giriş yapmak, nesne tabanlı bir

programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına

değinmektir.

D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI

Page 2: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

1. Konu Ders İçeriği

Karar yapıları, döngüler

İf/elseif/elif Yapısı

Lojik Karşılaştırma

Döngüler

Page 3: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Programları Kaydetme ve ÇalıştırmaBu noktaya kadar bütün işlerimizi Python’ın etkileşimli kabuğuüzerinden hallettik. Her ne kadar etkileşimli kabuk son derecekullanışlı bir ortam da olsa, bizim asıl çalışma alanımız değildir.Daha önce de dediğimiz gibi, etkileşimli kabuğu genellikle ufaktefek Python kodlarını test etmek için kullanacağız. Ama asılprogramlarımızı tabii ki etkileşimli kabuğa değil, programdosyasına yazacağız.Ne dedik? Özellikle küçük kod parçaları yazıp bunları denemekiçin etkileşimli kabuk mükemmel bir ortamdır. Ancak kodlarçoğalıp büyümeye başlayınca bu ortam yetersiz gelmeyebaşlayacaktır. Üstelik tabii ki yazdığınız kodları bir yere kaydedipsaklamak isteyeceksiniz. İşte burada metin düzenleyicilerdevreye girecek.Python kodlarını yazmak için istediğiniz herhangi bir metindüzenleyiciyi kullanabilirsiniz. Hatta Notepad bile olur. AncakPython kodlarını ayırt edip renklendirebilen bir metindüzenleyici ile yola çıkmak her bakımdan hayatınızıkolaylaştıracaktır.

Page 4: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

WindowsDaha önce de söylediğimiz gibi, Python kodlarımızı yazmak için istediğimiz bir metin düzenleyiciyi kullanabiliriz. Hatta Notepad’i bile kullansak olur. Ancak Notepad’den biraz daha gelişmiş bir metin düzenleyici ile başlamak işinizi kolaylaştıracaktır.Python programlama dilini öğrenmeye yeni başlayan Windows kullanıcıları için en uygun metin düzenleyici IDLE’dır. Başlat > Tüm Programlar > Python3.7 > IDLE (Python GUI) yolunu takip ederek IDLE’a ulaşabilirsiniz.IDLE’ı açtığınızda şöyle bir ekranla karşılaşacaksınız:

Page 5: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

isim = input("İsminiz nedir? ")

print("Merhaba", isim, end="!\n")

Bu programı kaydedip çalıştırdığınızda, sorulan soruya verdiğiniz cevaba göre çıktı farklı olacaktır. Örneğin eğer bu soruya ‘Niyazi’ cevabını vermişseniz çıktınız Merhaba Niyazi! şeklinde olacaktır.

Görüyorsunuz ya, tıpkı daha önce gördüğümüz fonksiyonlarda olduğu gibi, input() fonksiyonunda da parantez içine bir parametre yazıyoruz. Bu fonksiyona verilen parametre, kullanıcıdan veri alınırken kullanıcıya sorulacak soruyu gösteriyor. Gelin isterseniz bir örnek daha yapalım elimizin alışması için:

yaş = input("Yaşınız: ")

print("Demek", yaş, "yaşındasın.")print("Genç mi yoksa yaşlı mı olduğuna karar veremedim.")

Page 6: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

#Kullanıcıdan dairenin çapını girmesini istiyoruz.çap = input("Dairenin çapı: ")

#Kullanıcının verdiği çap bilgisini kullanarak#yarıçapı hesaplayalım. Buradaki int() fonksiyonunu#ilk kez görüyoruz. Biraz sonra bunu açıklayacağızyarıçap = int(çap) / 2

#pi sayımız sabitpi = 3.14159

#Yukarıdaki bilgileri kullanarak artık#dairenin alanını hesaplayabilirizalan = pi * (yarıçap * yarıçap)

#Son olarak, hesapladığımız alanı yazdırıyoruzprint("Çapı", çap, "cm olan dairenin alanı: ", alan, "cm2'dir")

Page 7: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

sayı = input("Lütfen bir sayı girin: ")

#Girilen sayının karesini bulmak için sayı değişkeninin 2.#kuvvetini alıyoruz. Aynı şeyi pow() fonksiyonu ile de#yapabileceğimizi biliyorsunuz. Örn.: pow(sayı, 2)print("Girdiğiniz sayının karesi: ", sayı ** 2)

Page 8: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

sayı1 = input("Toplama işlemi için ilk sayıyı girin: ")sayı2 = input("Toplama işlemi için ikinci sayıyı girin: ")

print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

Page 9: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

v1 = input("Toplama işlemi için ilk sayıyı girin: ")v2 = input("Toplama işlemi için ikinci sayıyı girin: ")

sayı1 = int(v1) #v1 adlı karakter dizisini sayıya dönüştürüyoruz.sayı2 = int(v2) #v2 adlı karakter dizisini sayıya dönüştürüyoruz.

print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

Page 10: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

sayı = 23kardiz = str(sayı)print(kardiz)

23

>>> print(type(kardiz))

<class 'str'>

len(12343423432)

Page 11: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Peki ya yazdığınız programda bir sayının kaç haneden oluştuğunu hesaplamanız gerekirse ne yapacaksınız? Yani mesela yukarıdaki sayının 11 haneli olduğunu bilmeniz gerekiyorsa ne olacak?

İşte böyle bir durumda str() fonksiyonundan yararlanabilirsiniz:

>>> sayı = 12343423432>>> kardiz = str(sayı)>>> len(kardiz)

11

Page 12: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

int()Sayı değerli bir karakter dizisini veya kayan noktalı sayıyı tamsayıya (integer) çevirir.float()Sayı değerli bir karakter dizisini veya tamsayıyı kayan noktalı sayıya (float) çevirir.str()Bir tamsayı veya kayan noktalı sayıyı karakter dizisine (string) çevirir.complex()Herhangi bir sayıyı veya sayı değerli karakter dizisini karmaşık sayıya (complex) çevirir.

Page 13: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

doğalgaz faturası hesaplayan program

#Her bir ayın kaç gün çektiğini tanımlıyoruzocak = mart = mayıs = temmuz = ağustos = ekim = aralık = 31nisan = haziran = eylül = kasım = 30şubat = 28

#Doğalgazın vergiler dahil metreküp fiyatıbirimFiyat = 0.79

#Kullanıcı ayda ne kadar doğalgaz tüketmiş?aylıkSarfiyat = input("Aylık doğalgaz sarfiyatınızı metreküp olarak giriniz: ")

#Kullanıcı hangi aya ait faturasını öğrenmek istiyor?dönem = input("""Hangi aya ait faturayı hesaplamak istersiniz?(Lütfen ay adını tamamı küçük harf olacak şekilde giriniz)\n""")

#Yukarıdaki input() fonksiyonundan gelen veriyi#Python'ın anlayabileceği bir biçime dönüştürüyoruzay = eval(dönem)

#Kullanıcının günlük doğalgaz sarfiyatıgünlükSarfiyat = int(aylıkSarfiyat) / ay

#Fatura tutarıfatura = birimFiyat * günlükSarfiyat * ay

print("günlük sarfiyatınız: \t", günlükSarfiyat, " metreküp\n","tahmini fatura tutarı: \t", fatura, " TL", sep="")

Page 14: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

eval() ve exec() FonksiyonlarıBir önceki bölümün son örnek programında eval() adlı bir fonksiyonla karşılaşmıştık. İşte şimdi bu önemli fonksiyonun ne işe yaradığını anlamaya çalışacağız. Ancak eval() fonksiyonunu anlatmaya başlamadan önce şu uyarıyı yapalım:

eval() ŞEYTANİ GÜÇLERİ OLAN BİR FONKSİYONDUR!Bunun neden böyle olduğunu hem biz anlatacağız, hem de zaten bu fonksiyonu tanıdıkça neden eval()‘e karşı dikkatli olmanız gerektiğini kendiniz de anlayacaksınız.

Dilerseniz işe basit bir eval() örneği vererek başlayalım:

print("""Basit bir hesap makinesi uygulaması.

İşleçler:

+ toplama- çıkarma* çarpma/ bölme

Yapmak istediğiniz işlemi yazıp ENTERtuşuna basın. (Örneğin 23 ve 46 sayılarınıçarpmak için 23 * 46 yazdıktan sonraENTER tuşuna basın.)""")

veri = input("İşleminiz: ")hesap = eval(veri)

print(hesap)

Page 15: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Ingilizcede evaluate diye bir kelime bulunur. Bu kelime, ‘değerlendirmeye tabi tutmak, işleme sokmak, işlemek’ gibi anlamlar taşır. İşte eval() fonksiyonundaki eval kelimesi bu evaluate kelimesinin kısaltmasıdır. Yani bu fonksiyonun görevi, kendisine verilen karakter dizilerini değerlendirmeye tabi tutmak ya da işlemektir. Peki bu tam olarak ne anlama geliyor?

Aslında yukarıdaki örnek programı çalıştırdığımızda bu sorunun yanıtını kendi kendimize verebiliyoruz. Bu programı çalıştırarak, “İşleminiz: “ ifadesinden sonra, örneğin, 45 * 76 yazıp Enter tuşuna basarsak programımız bize 3420 çıktısı verecektir. Yani programımız hesap makinesi işlevini yerine getirip 45 sayısı ile 76 sayısını çarpacaktır. Dolayısıyla, yukarıdaki programı kullanarak her türlü aritmetik işlemi yapabilirsiniz. Hatta bu program, son derece karmaşık aritmetik işlemlerin yapılmasına dahi müsaade eder.

Peki programımız bu işlevi nasıl yerine getiriyor? İsterseniz kodların üzerinden tek tek geçelim.

Öncelikle programımızın en başına kullanım kılavuzuna benzer bir metin yerleştirdik ve bu metni print() fonksiyonu yardımıyla ekrana bastık.

Daha sonra kullanıcıdan alacağımız komutları veri adlı bir değişkene atadık. Tabii ki kullanıcıyla iletişimi her zaman olduğugibi input() fonksiyonu yardımıyla sağlıyoruz.

Ardından, kullanıcıdan gelen veriyi eval() fonksiyonu yardımıyla değerlendirmeye tabi tutuyoruz. Yani kullanıcının girdiği komutları işleme sokuyoruz. Örneğin, kullanıcı 46 / 2 gibi bir veri girdiyse, biz eval() fonksiyonu yardımıyla bu 46 / 2 komutunu işletiyoruz. Bu işlemin sonucunu da hesap adlı başka bir değişken içinde depoluyoruz.

Eğer burada eval() fonksiyonunu kullanmazsak, programımız, kullanıcının girdiği 45 * 76 komutunu hiçbir işleme sokmadan dümdüz ekrana basacaktır.

Page 16: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Örneğin eval() fonksiyonu bir karakter dizisi içindeki değişken tanımlama işlemini yerine getiremez. Yani eval() ile şöyle bir şey yapamazsınız:

>>> eval("a = 45")Ama exec() ile böyle bir işlem yapabilirsiniz:

>>> exec("a = 45")Böylece a adlı bir değişken tanımlamış olduk. Kontrol edelim:

>>> print(a)

45

Page 17: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

eval() ve exec() fonksiyonları özellikle kullanıcıdan alınan verilerle doğrudan işlem yapmak gereken durumlarda işinize yarar. Örneğin bir hesap makinesi yaparken eval() fonksiyonundan yararlanabilirsiniz.

Aynı şekilde mesela insanlara Python programlama dilini öğreten bir program yazıyorsanız exec() fonksiyonunu şöyle kullanabilirsiniz:

d1 = """

Python'da ekrana çıktı verebilmek için print() adlı birfonksiyondan yararlanıyoruz. Bu fonksiyonu şöyle kullanabilirsiniz:

>>> print("Merhaba Dünya")

Şimdi de aynı kodu siz yazın!

>>> """

girdi = input(d1)

exec(girdi)

d2 = """

Gördüğünüz gibi print() fonksiyonu, kendisineparametre olarak verilen değerleri ekrana basıyor.

Böylece ilk dersimizi tamamlamış olduk. Şimdi birsonraki dersimize geçebiliriz."""

print(d2)

Page 18: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Bunu anlamak için şu basit örneklere bir bakalım:

>>> print("{} ve {} iyi bir ikilidir".format("Python", "Django"))

'Python ve Django iyi bir ikilidir'

>>> print("{} {}'yi seviyor!".format("Ali", "Ayşe"))

'Ali Ayşe'yi seviyor!'

>>> print("{} {} yaşında bir {}dur".format("Ahmet", "18", "futbolcu"))

'Ahmet 18 yaşında bir futbolcudur'

format() Metodu¶

Elbette bu örnekleri şöyle de yazabilirdik:

>>> metin = "{} ve {} iyi bir ikilidir">>> metin.format("Python", "Django")

'Python ve Django iyi bir ikilidir'

>>> metin = "{} {}'yi seviyor!">>> metin.format("Ali", "Ayşe")

'Ali Ayşe'yi seviyor!'

>>> metin = "{} {} yaşında bir {}dur">>> metin.format("Ahmet", "18", "futbolcu")

'Ahmet 18 yaşında bir futbolcudur'

Page 19: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Burada taslak metni doğrudan format() metoduna parametre olarak vermeden önce bir değişkene atadık. Böylece bu metni daha kolay bir şekilde kullanabildik.

Varsayalım ki kullanıcıdan aldığı bilgiler doğrultusunda, özel bir konu üzerine dilekçe oluşturan bir program yazmakistiyorsunuz.Dilekçe taslağımız şu şekilde olsun:

Page 20: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Kullanıcıdan bilgi alma kısmı kolay. input() fonksiyonunu kullanarak gerekli bilgileri kullanıcıdan alabileceğimizi biliyorsunuz:

tarih = input("tarih: ")üniversite = input("üniversite adı: ")fakülte = input("fakülte adı: ")bölüm = input("bölüm adı: ")öğrenci_no = input("öğrenci no. :")öğretim_yılı = input("öğretim yılı: ")yarıyıl = input("yarıyıl: ")ad = input("öğrencinin adı: ")soyad = input("öğrencinin soyadı: ")tc_kimlik_no = input("TC Kimlik no. :")adres = input("adres: ")tel = input("telefon: ")ekler = input("ekler: ")

Page 21: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Bilgileri kullanıcıdan aldık. Peki ama bu bilgileri dilekçe taslağı içindeki boşluklara nasıl yerleştireceğiz?

Şu ana kadar öğrendiğimiz print() fonksiyonunu ve \t ve \n gibi kaçış dizilerini kullanarak istediğiniz çıktıyı elde etmeyi deneyebilirsiniz. Ama denediğinizde siz de göreceksiniz ki, bu tür yöntemleri kullanarak yukarıdaki dilekçe taslağını doldurmak inanılmaz zor ve vakit alıcı olacaktır. Halbuki bunların hiçbirine gerek yok. Çünkü Python bize bu tür durumlarda kullanılmak üzere çok pratik bir araç sunuyor. Şimdi çok dikkatlice inceleyin şu kodları:

Page 22: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL
Page 23: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Koşul Deyimleri¶

Gelin şimdi bu araçların neler olduğunu görelim.

ifPython programlama dilinde koşullu durumları belirtmek için üç adet deyimden yararlanıyoruz:

ifelifelseİsterseniz önce if deyimi ile başlayalım...

Eğer daha önceden herhangi bir programlama dilini az da olsa kurcalama fırsatınız olduysa, bir programlama dilinde if deyimlerinin ne işe yaradığını az çok biliyorsunuzdur. Daha önceden hiç programcılık deneyiminiz olmamışsa da ziyanı yok. Zira bu bölümde if deyimlerinin ne işe yaradığını ve nerelerde kullanıldığını enine boyuna tartışacağız.

İngilizce bir kelime olan ‘if‘, Türkçede ‘eğer’ anlamına gelir. Anlamından da çıkarabileceğimiz gibi, bu kelime bir koşul bildiriyor. Yani ‘eğer bir şey falanca ise...‘ ya da ‘eğer bir şey filanca ise...‘ gibi... İşte biz Python’dabir koşula bağlamak istediğimiz durumları if deyimi aracılığıyla göstereceğiz.

Gelin isterseniz bu deyimi nasıl kullanacağımıza dair ufacık bir örnek vererek işe başlayalım:

Page 24: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Öncelikle elimizde şöyle bir değişken olsun:

n = 255Yukarıda verdiğimiz değişkenin değerinin bir karakter dizisi değil, aksine bir sayı olduğunu görüyoruz. Şimdi bu değişkenin değerini sorgulayalım:

if n > 10:

Burada gördüğümüz > işaretinin ne demek olduğunu açıklamaya gerek yok sanırım. Hepimizin bildiği ‘büyüktür’ işareti Python’da da aynen bildiğimiz şekilde kullanılıyor. Mesela ‘küçüktür’ demek isteseydik, < işaretini kullanacaktık. İsterseniz hemen şurada araya girip bu işaretleri yeniden hatırlayalım:

İşleç Anlamı> büyüktür< küçüktür>= büyük eşittir<= küçük eşittir== eşittir!= eşit değildirGördüğünüz gibi hiçbiri bize yabancı gelecek gibi değil. Yalnızca en sondaki ‘eşittir’ (==) ve ‘eşit değildir’ (!=) işaretleri biraz değişik gelmiş olabilir. Burada ‘eşittir’ işaretinin = olmadığına dikkat edin. Python’da = işaretini değer atama işlemleri için kullanıyoruz. == işaretini ise iki adet değerin birbirine eşit olup olmadığını denetlemek için... Mesela:

Page 25: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

sayı = int(input("Bir sayı giriniz: "))

if sayı > 10:print("Girdiğiniz sayı 10'dan büyüktür!")

if sayı < 10:print("Girdiğiniz sayı 10'dan küçüktür!")

if sayı == 10:print("Girdiğiniz sayı 10'dur!")

Page 26: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

elifPython’da, if deyimleriyle birlikte kullanılan ve yine koşul belirten bir başka deyim de elif deyimidir. Buna şöyle bir örnek verebiliriz:

yaş = int(input("Yaşınız: "))

if yaş == 18:print("18 iyidir!")

elif yaş < 0:print("Yok canım, daha neler!...")

elif yaş < 18:print("Genç bir kardeşimizsin!")

elif yaş > 18:print("Eh, artık yaş yavaş yavaş kemale eriyor!")

Yukarıdaki örneği şöyle yazmayı da deneyebilirsiniz:

yaş = int(input("Yaşınız: "))

if yaş == 18:print("18 iyidir!")

if yaş < 0:print("Yok canım, daha neler!...")

if yaş < 18:print("Genç bir kardeşimizsin!")

if yaş > 18:print("Eh, artık yaş yavaş yavaş kemale eriyor!")

Bu iki programın da aynı işlevi gördüğünü düşünebilirsiniz. Ancak ilk bakışta pek belli olmasa da, aslında yukarıdaki iki program birbirinden farklı davranacaktır. Örneğin ikinci programda eğer kullanıcı eksi değerli bir sayı girerse hem if yaş < 0 bloğu, hem de if yaş < 18 bloğu çalışacaktır. İsterseniz yukarıdaki programı çalıştırıp, cevap olarak eksi değerli bir sayı verin. Ne demek istediğimiz gayet net anlaşılacaktır.

Page 27: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Bu durum if ile elif arasındaki çok önemli bir farktan kaynaklanır. Buna göre if bize olası bütün sonuçları listeler, elif ise sadece doğru olan ilk sonucu verir. Bu soyut tanımlamayı biraz daha somutlaştıralım:

a = int(input("Bir sayı giriniz: "))

if a < 100:print("verdiğiniz sayı 100'den küçüktür.")

if a < 50:print("verdiğiniz sayı 50'den küçüktür.")

if a == 100:print("verdiğiniz sayı 100'dür.")

if a > 100:print("verdiğiniz sayı 100'den büyüktür.")

if a > 150:print("verdiğiniz sayı 150'den büyüktür.")

Yukarıdaki kodları çalıştırdığımızda, doğru olan bütün sonuçlar listelenecektir. Yani mesela kullanıcı 40 sayısını girmişse, ekrana verilecek çıktı şöyle olacaktır:

verdiğiniz sayı 100'den küçüktür.verdiğiniz sayı 50'den küçüktür.

Page 28: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Burada 40 sayısı hem 100‘den, hem de 50‘den küçük olduğu için iki sonuç da çıktı olarak verilecektir. Ama eğer yukarıdaki kodları şöyle yazarsak:

a = int(input("Bir sayı giriniz: "))

if a < 100:print("verdiğiniz sayı 100'den küçüktür.")

elif a < 50:print("verdiğiniz sayı 50'den küçüktür.")

elif a == 100:print("verdiğiniz sayı 100'dür.")

elif a > 150:print("verdiğiniz sayı 150'den büyüktür.")

elif a > 100:print("verdiğiniz sayı 100'den büyüktür.")

Kullanıcının 40 sayısını girdiğini varsaydığımızda, bu defa programımımız yalnızca şu çıktıyı verecektir:

verdiğiniz sayı 100'den küçüktür.

Page 29: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Eğer yukarıdaki koşulların hiçbiri gerçekleşmezse...Gelin isterseniz bununla ilgili şöyle bir örnek verelim:

soru = input("Bir meyve adı söyleyin bana:")

if soru == "elma":print("evet, elma bir meyvedir...")

elif soru == "karpuz":print("evet, karpuz bir meyvedir...")

elif soru == "armut":print("evet, armut bir meyvedir...")

else:print(soru, "gerçekten bir meyve midir?")

else¶

Dolayısıyla, eğer programınızda bir else bloğuna yer verecekseniz, ondan önce gelen koşullu durumların ilkini if ile sonrakileri ise elif ile bağlayın. Yani:

if koşul_1:sonuç_1

elif koşul_2:sonuç_2

elif koşul_3:sonuç_3

else:sonuç_4

Page 30: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Döngüler (Loops)

Yukarıda açıklamaya çalıştığımız süreç, yani bir sürecin tekrar tekrar devam etmesi Python’da ‘döngü’ (loop) olarak adlandırılır.

İşte bu bölümde, programlarımızın sürekli olarak çalışmasını nasıl sağlayabileceğimizi, yani programlarımızı bir döngü içine nasıl sokabileceğimizi öğreneceğiz.

Python’da programlarımızı tekrar tekrar çalıştırabilmek için döngü adı verilen bazı ifadelerden yararlanacağız.

Python’da iki tane döngü bulunur: while ve for

Dilerseniz işe while döngüsü ile başlayalım.

Page 31: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

İngilizce bir kelime olan while, Türkçede ‘... iken, ... olduğu sürece’ gibi anlamlara gelir. Python’da while bir döngüdür. Bir önceki bölümde söylediğimiz gibi, döngüler sayesinde programlarımızın sürekli olarak çalışmasını sağlayabiliriz.

Bu bölümde Python’da while döngüsünün ne olduğunu ve ne işe yaradığını anlamaya çalışacağız. Öncelikle while döngüsünün temellerini kavrayarak işe başlayalım.

Basit bir while döngüsü kabaca şuna benzer:

a = 1

while a == 1:Burada a adlı bir değişken oluşturduk. Bu değişkenin değeri 1. Bir sonraki satırda ise while a == 1: gibi bir ifade yazdık. En başta da söylediğimiz gibi whilekelimesi, ‘... iken, olduğu sürece’ gibi anlamlar taşıyor. Python programlama dilindeki anlamı da buna oldukça yakındır. Burada while a == 1 ifadesi programımıza şöyle bir anlam katıyor:

a değişkeninin değeri 1 olduğu sürece...Gördüğünüz gibi cümlemiz henüz eksik. Yani belli ki bunun bir de devamı olacak. Ayrıca while ifadesinin sonundaki : işaretinden anladığımız gibi, bundan sonra gelecek satır girintili yazılacak. Devam edelim:

a = 1

while a == 1:print("bilgisayar çıldırdı!")

Burada Python’a şu emri vermiş olduk:

a değişkeninin değeri 1 olduğu sürece, ekrana ‘bilgisayar çıldırdı!’ yazısını dök!

Page 32: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Yukarıdaki kodları şöyle yazarsak belki durum daha anlaşılır olabilir:

a = 1

while a < 10:a += 1print(a)

Burada Python’un arkada ne işler çevirdiğini daha net görebiliyoruz. Kodlarımız içine eklediğimiz while döngüsü sayesinde Python her defasında a değişkeninin değerini kontrol ediyor ve bu değer 10‘dan küçük olduğu müddetçe a değişkeninin değerini 1 artırıp, yeni değeri ekrana basıyor. Bu değişkenin değeri 10‘a ulaştığında ise, bu değerin artık 10‘dan küçük olmadığını anlayıp bütün işlemleri durduruyor.

Page 33: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

while döngüsünü hesap makinemize uygulayalım

Page 34: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

for Döngüsü¶Etrafta yazılmış Python programlarının kaynak kodlarını incelediğinizde, içinde for döngüsü geçmeyen bir program kolay kolay bulamazsınız. Belki while döngüsünün kullanılmadığı programlar vardır. Ancak for döngüsü Python’da o kadar yaygındır ve o kadar geniş bir kullanım alanına sahiptir ki, hemen hemen bütün Python programları bu for döngüsünden en az bir kez yararlanır.

for da tıpkı while gibi bir döngüdür. Yani tıpkı while döngüsünde olduğu gibi, programlarımızın birden fazla sayıda çalışmasını sağlar. Ancak for döngüsü while döngüsüne göre biraz daha yeteneklidir. while döngüsü ile yapamayacağınız veya yaparken çok zorlanacağınız şeyleri for döngüsü yardımıyla çok kolay bir şekilde halledebilirsiniz.

Yalnız, söylediğimiz bu cümleden, for döngüsünün whiledöngüsüne bir alternatif olduğu sonucunu çıkarmayın. Evet, while ile yapabildiğiniz bir işlemi for ile de yapabilirsiniz çoğu zaman, ama bu döngülerin, belli vakalar için tek seçenek olduğu durumlar da vardır. Zira bu iki döngünün çalışma mantığı birbirinden farklıdır.

Page 35: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

tr_harfler = "şçöğüİı"

for harf in tr_harfler:print(harf)

Yukarıdaki örnekte bir for döngüsü yardımıyla tr_harfler adlı değişken içindeki her bir öğeyi ekrana yazdırdık. Esasında fordöngüsünün yeteneklerini düşündüğümüzde bu örnek pek heyecan verici değil. Zira aynı işi aslında print() fonksiyonu ile de yapabilirdik:

tr_harfler = "şçöğüİı"print(*tr_harfler, sep="\n")

tr_harfler = "şçöğüİı"a = 0

while a < len(tr_harfler):print(tr_harfler[a], sep="\n")a += 1

Page 36: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

================== RESTART: C:/Users/lenova/Desktop/randevu.py =================24681012141618>>>

sayılar = "123456789"

for sayı in sayılar:print(int(sayı) * 2)

Page 37: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

for kelimesi İngilizcede ‘için’ anlamına gelir. Döngünün yapısı içinde geçen in ifadesini de tanıyorsunuz. Biz bu ifadeyi ‘Aitlik İşleçleri’ konusunu işlerken de görmüştük. Hatırlarsanız in işleci bir öğenin bir veri tipi içinde bulunup bulunmadığını sorguluyordu. Mesela:

>>> a = "durgun.net">>> "d" in a

True“h” öğesi “durgun.net” adlı karakter dizisi içinde geçtiği için "d" in a kodu True çıktısı veriyor. Bir de şuna bakın:

>>> "b" in a

False

Page 38: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

sayılar = "123456789"

for i in sayılar:if int(i) > 3:

print(i)Şu anlama geliyor:

sayılar değişkeni içinde i adını verdiğimiz her bir öğe için:eğer sayıya dönüştürülmüş i değeri 3‘ten büyükse:i öğesini ekrana basma işlemi gerçekleştir!

456789

Page 39: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

tr_harfler = "şçöğüİı"

parola = input("Parolanız: ")

for karakter in parola:if karakter in tr_harfler:

print("parolada Türkçe karakter kullanılamaz")

Page 40: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

while True:parola = input("Bir parola belirleyin: ")

if not parola:print("parola bölümü boş geçilemez!")

elif len(parola) > 8 or len(parola) < 3:print("parola 8 karakterden uzun 3 karakterden kısa

olmamalı")

else:print("Yeni parolanız", parola)break

Page 41: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

izinli_karakterler = "0123456789+-/*= "

print("""Basit bir hesap makinesi uygulaması.

İşleçler:

+ toplama- çıkarma* çarpma/ bölme

Yapmak istediğiniz işlemi yazıp ENTERtuşuna basın. (Örneğin 23 ve 46 sayılarınıçarpmak için 23 * 46 yazdıktan sonraENTER tuşuna basın.)""")

while True:veri = input("İşleminiz: ")if veri == "q":

print("çıkılıyor...")break

for s in veri:if s not in izinli_karakterler:

print("Neyin peşindesin?!")quit()

hesap = eval(veri)

print(hesap)

izinli_karakterler = "0123456789+-/*= "

for s in veri:if s not in izinli_karakterler:

print("Neyin peşindesin?!")quit()

hesap = eval(veri)

Page 42: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

range Fonksiyonu¶range kelimesi İngilizcede ‘aralık’ anlamına gelir. Biz Python’darange() fonksiyonunu belli bir aralıkta bulunan sayıları göstermek için kullanıyoruz. Örneğin:

>>> for i in range(0, 10):... print(i)...0123456789

Gördüğünüz gibi, range(0, 10) kodu sayesinde ve for döngüsünü de kullanarak, 0 ile 10 (10 hariç) aralığındaki sayıları ekrana yazdırdık.

Yukarıdaki kodda range() fonksiyonuna 0 ve 10 olmak üzere iki adet parametre verdiğimizi görüyorsunuz. Burada 0 sayısı, aralıktaki ilk sayıyı, 10 sayısı ise aralıktaki son sayıyı gösteriyor. Yani range() fonksiyonunun formülü şöyledir:

range(ilk_sayı, son_sayı)

Page 43: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

kullanıcının 3 karakterden kısa, 8 karakterden uzun parola belirlemesini engelleyen bir uygulama yazmıştık. O uygulamayı range() fonksiyonunu kullanarak da yazabiliriz:

while True:parola = input("parola belirleyin: ")

if not parola:print("parola bölümü boş geçilemez!")

elif len(parola) in range(3, 8): #eğer parolanın uzunluğu 3 ile 8 karakter

#aralığında ise...print("Yeni parolanız", parola)break

else:print("parola 8 karakterden uzun 3 karakterden kısa

olmamalı")

for i in range(3):print(i)parola = input("parola belirleyin: ")if not parola:

print("parola bölümü boş geçilemez!")

elif len(parola) in range(3, 8):print("Yeni parolanız", parola)break

elif i == 2:print("parolayı 3 kez yanlış girdiniz.","Lütfen 30 dakika sonra tekrar deneyin!")

else:print("parola 8 karakterden uzun 3 karakterden kısa

olmamalı")

Page 44: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

for i in range(0, 10, 2):... print(i)...

02468

for i in range(10, 0, -3):... print(i)...10741

Page 45: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

>>> print(*range(10))

0 1 2 3 4 5 6 7 8 9print() fonksiyonunun sep parametresi yardımıyla bu çıktıyı istediğiniz gibi düzenleyebileceğinizi biliyorsunuz. Mesela çıktıdaki sayıları birbirlerinden virgülle ayırmak için şöyle bir komut verebiliyoruz:

>>> print(*range(10), sep=", ")

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Page 46: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

pass kelimesi İngilizcede ‘geçmek, pas geçmek’ gibi anlamlara gelir. Python’daki kullanımı da bu anlama oldukça yakındır. Biz bu deyimi Pyhon’da ‘görmezden gel, hiçbir şey yapma’ anlamında kullanacağız.

while True:sayı = int(input("Bir sayı girin: "))

if sayı == 0:break

elif sayı < 0:pass

else:print(sayı)

Page 47: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

break DeyimiPython’da break özel bir deyimdir. Bu deyim yardımıyla, devam eden bir süreci kesintiye uğratabiliriz. Bu deyimin kullanıldığı basit bir örnek verelim:

>>> while True:... parola = input("Lütfen bir parola belirleyiniz:")... if len(parola) < 5:... print("Parola 5 karakterden az olmamalı!")... else:... print("Parolanız belirlendi!")... breakBurada, eğer kullanıcının girdiği parolanın uzunluğu 5 karakterden azsa, Parola 5 karakterden az olmamalı! uyarısı gösterilecektir. Eğer kullanıcı 5 karakterden uzun bir parola belirlemişse, kendisine ‘Parolanız belirlendi!’ mesajını gösterip, break deyimi yardımıyla programdan çıkıyoruz.

Page 48: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Karakter Dizilerinin İçeriğini KarşılaştırmaDiyelim ki elinizde şöyle iki farklı metin var:

ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"Siz burada, ilk_metin adlı değişken içinde bulunan, ama ikinci_metin adlı değişken içinde bulunmayan öğeleri ayıklamak istiyorsunuz. Yani bu iki metnin içeriğini karşılaştırıp, farklı öğeleri bulmayı amaçlıyorsunuz. Bu işlem için, bu bölümde öğrendiğimiz döngülerden ve daha önce öğrendiğimiz başka araçlardan yararlanabilirsiniz. Şimdi dikkatlice bakın:

ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

for s in ilk_metin:if not s in ikinci_metin:

print(s)Bu kodları bir dosyaya kaydedip çalıştırdığımızda şu çıktıyı alıyoruz:

aaşşa

Page 49: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI Öğretim … · programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL

Elbette yukarıda yaptığımız işlemin tersini yapmak da mümkündür. Biz yukarıdaki kodlarda ilk_metin‘de olan, ama ikinci_metin‘de olmayan öğeleri süzdük. Eğer istersek ikinci_metin‘de olan, ama ilk_metin‘de olmayan öğeleri de süzebiliriz. Mantığımız yine aynı:

ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

for s in ikinci_metin: #ikinci_metin'deki, 's' adını verdiğimiz bütün öğeler içinif not s in ilk_metin: #eğer 's' adlı bu öğe ilk_metin'de yoksa

print(s) #'s' adlı öğeyi ekrana bas

Bu da bize şu çıktıyı veriyor:

uıoryeuırueeeu