Uploaded by pdrpresidente

Python Programlama: Veri Tipleri, Döngüler, Fonksiyonlar

advertisement
Algoritma ve Bilgisayar Programlama I (Python)
(Çeşitli Konular-II)
str, int , float ve list fonksiyonları bir veri tipini diğerine
dönüştürür.
str fonksiyonu herhangi değeri string yani karakter
dizesine dönüştürür.
int ve float fonksiyonları herhangi bir değeri tam sayı ve
ondalıklı sayıya dönüştürür.
list fonksiyonu, karakter dizelerini (strings) ya da
diğer veri türlerini listeye çevirir.
Example-1’de str fonksiyonu tam sayı (integer)
türündeki veri türlerini karakter dizesine
çevirdikten sonra sıralamasını ters çevirip aynı
sayı olup olmadığını kontrol eden bu sayıları
ekrana yazdıran program kodunu göstermektedir.
Burada str fonksiyonu tam sayıyı karakter dizesine
çevirip karakterler üzerinde işlem yapmaya izin
veriyor.
Example-2’de kişinin doğum tarihinden yaşını
bulan kod yapısı görülmektedir. Burada önemli
olan int fonksiyonu ile birthday değişkeni içindeki
son 4 karakteri tam sayıya çeviren ve
günümüzdeki yıldan çıkararak (2010-year) yaşını
hesaplayan kod yapısı mantığıdır.
Example-3’de 47 gibi bir tam sayının rakamları
toplamı önce str fonksiyonu ile karakter dizesine
çevrilmiş daha sonra ilgili basamakları tekrardan
int fonksiyonu tam sayıya çevrildikten sonra ayrı
ayrı toplanmıştır. 47 sayısının rakamları toplamı 11
olarak bulunmuştur.
Example-4’de ondalıklı bir sayının tam ve
ondalıklı kısmını bulmak için int fonksiyonu
kullanılmıştır. ipart değişkeni tam sayı kısmını
saklarken, dpart değişkeni ondalıklı kısmı
saklamaktadır.
Python’da değişkenler True ve False olmak üzere
iki farklı Boolean (Lojiksel-Mantıksal) türünde
değer alabilir. Yandaki kısa örnekte görüldüğü
gibi değişken içindeki değerin True ya da False
olması durumu if yada while koşul yapısı ile
kontrol edilmiştir.
Kısaltmalar (Shortcuts), counter (sayıcı) değişken
işlemlerinde
sıklıkla
kullanılır.
Mesela
count=count+1 ifadesi count+=1 ifadesine eşittir.
Farklı değişkenlere aynı değeri atamak için soldaki
örnek kod yapısı kullanılabilir.
Sağdaki örnek kod yapıları içinde diğer kısaltma
işlemleri görülmektedir. Mesela liste içindeki değerleri
ayrı ayrı değişkenlere atamak yerine tek seferde
bütün bir liste içindeki değerleri x,y ve z gibi farklı
değişkenlere atayabiliriz.
Bununla beraber mantıksal koşul ifadelerinde ve
karşılaştırma içeren ifadelerde de kısaltmalar
kullanılır.
İç İçe döngüler (nested loops) programlama
da oldukça sık kullanılan kod yapılarıdır.
Yandaki Example-2 örneğinde görüldüğü
gibi (2x+3y==4 and x-y==7) eşitliklerinin
sağlandığı noktada birinci dereceden iki
bilinmeyenli
denklem
çözümü
gerçekleşecektir.
Example-3’de Pisagor teoremi (Pythagorean
theorem) için 1-100 arasındaki değerler
arasındaki bütün x, y ve z değerleri elde
ediliyor.
(Sözlükler)
Dictionaries (Sözlükler), listelerin özel bir
versiyonudur. Mesela yandaki örnekte görüldüğü
gibi days isimli liste aylara ait farklı günleri
tutarken, days isimli dictionary hem senenin
aylara ait isimlerini ayrıca o ayların içindeki
günleri beraber saklayabilir. Örnek olarak
days[‘January’] ile o aya ait kaç gün olduğunu
görüntüleyebiliriz.
Bir dictionary oluşturmak için {} süslü parantez
kullanılır. Daha sonra içine girilen her bilgi ikili çiftler
(pair) halinde saklanır. İlk girilen tek tırnak içine
yazılan ifadeye anahtar (key) denirken, ikinci ifadeye
değer (value) denilmektedir. Yani d[‘A’] kodu size 100
değerini verirken, d[‘B’] kodu size 200 değerini verir.
Dictionary içinde bir değeri değiştirmek için
d[‘A’]=400 kullanılabilir. Hatta d[‘C’]=500 ile
yeni bir anahtar ve değer çifti de eklenebilir.
Listelerde var olan indeks dışında bir değer
girmek ise imkansızdır. Bu açıdan dictionary’nin
listelere göre avantajı söz konusudur. Bununla
beraber dictionary içinden veri silmek için del
d[‘A’] kullanılabilir.
Boş liste oluşturmak için d={} yazılabilir.
Example-1’de dictionary, gerçek bir sözlük gibi
kullanılabilir. Örnekte hayvan isimleri anahtar
(key) olarak ve onlara ait açıklamalar string
(karakter) olarak verilmiştir.
Example-2’de roman rakamları ve onlara ait
sayısal değerler görülmektedir.
Example-4’de bir kart destesi (deck)
dictionary
ile
oluşturulmuş.
shuffle
fonksiyonu ile bu kart destesi karıştırılıyor.
Daha sonra istenen bir kart deck[0] ile elde
edilebilir.
dictionary içindeki verileri başka bir
dictionary’e kopyalamak için copy yöntemi
kullanılır.
Bir dictionary içindeki veriyi kontrol
etmek için in ya da not in operatörü
kullanılır. Mesela d[‘C’] ifadesi
sonucunda
bir
cevap
geriye
dönmeyecektir çünkü C anahtar
kelimesi dictionary içinde yoktur.
dictionary
içindeki
anahtar
ve
anahtarlara ait değerleri görüntülemek
için for döngüsü kullanılabilir.
Bir dictionary içindeki verilerin
hangisinin içinde 100 değerine
sahip olan anahtarları bulmak
için yandaki kod yapısı kullanılır.
Fonksiyonlar (functions), programlamada
oldukça önemlidir. Functions özellikle
büyük kod programlamalarının kolay
okunmasını ve yazılmasını sağlamak için
sürekli yapılan işlemlerin farklı bir kod
bloğu içinde çalışmasını sağlar. Böylece
her seferinde ilgili kod yapısı tekrar tekrar
yazılmak zorunda kalınmaz. Sadece ilgili
işlem yapılması gerekiyorsa function
çağrılır.
Fonksiyon oluşturmak için def ve fonksiyon
ismi: ifadesi kullanılır.
Daha sonra fonksiyon altında çalışması istenen
kod yapısı yazılır. Tanımlanan fonksiyon
programın herhangi bir yerinde çağrılabilir.
Mesela yandaki basit örnekte önceden
tanımlanan print_hello fonksiyonu içinde hello
yazan program kodu görülmektedir. Ana
programın herhangi bir yerinde bu fonksiyon
çağrıldığı zaman (print_hello()) ilgili fonksiyon
içindeki kod yapısı çalışır.
Yandaki tanımlanan fonksiyon örneğinde ekrana
* karakteri ile kare bir şekil çizilmiştir.
Fonksiyon içinde tanımlanan ifadelere argüman
(argument) denilmektedir. Böylece ilgili fonksiyon
içine gönderilen değer ile ilgili işlem
yapılmaktadır. Mesela yandaki örnekte n değeri 3
aldığında ekrana 3 defa Hello yazarken, n=5
olduğunda ekrana 5 defa Hello yazılmaktadır.
Fonksiyon içine
gönderilebilir:
çok
sayıda
argüman
Bir fonksiyon içinden geriye değer
döndermek için return ifadesi kullanılır.
Yandaki örnekte convert içine gönderilen
Celsius cinsi sıcaklık değeri Fahrenheit’a
çevrildikten sonra tekrardan return ile
hesaplanan değer fonksiyon dışına geri
gönderilir. Böylece hesaplanan değer ilgili kod
yapısında ekrana yazdırılmış olur.
Example-2’de derece
fonksiyon gösterilmiştir.
cinsinden
çalışan
Example-3’de
birinci
dereceden
2
bilinmeyenli denklemlerin çözümü için
oluşturulan fonksiyon gösterilmiştir. Sonuçlar
ise return ifadesi ile bir liste halinde [x,y]
olarak geri dönderilmiştir.
Example-4’de bir fonksiyonun içindeki kod
yapısında return ifadesi fonksiyondan erken
çıkmak için kullanılmış:
Default argüman değeri, kullanıcının değer
girmediği zamanlarda değer alan ve kullanan
bir fonksiyon ifadesidir. Mesela yanda görülen
kod yapısında kullanıcı eğer 5 değerini girerse
fonksiyonu çağırırken n=5 değerini alır. Eğer
girmezse n=1 değerini alır.
Bir değişken (variable), bir fonksiyon içinde
tanımlandığında, bu fonksiyon için yereldir
(local), yani aslında o fonksiyon dışında
mevcut değildir. Bu şekilde her fonksiyon
kendi değişkenlerini tanımlayabilir ve bu
değişken adlarının başka fonksiyonlarda
kullanılıp
kullanılmadığı
konusunda
endişelenmenize gerek kalmaz. i değişkeni
local bir değişkendir yandaki örnek kod içinde.
Öte yandan, bazen aslında aynı değişkenin
birden çok fonksiyonun içinde kullanılabilir
olmasını istersiniz. Böyle bir değişkene global
değişken
denir.
Global
değişkeni
tanımlamanız gerekmektedir.
Yandaki ve yukardaki örnekte global olarak
tanımlanan
time_left
değişkeni
görülmektedir. Bu değişken için ilk değer 30
olurken daha sonra 0 değerini almıştır.
Görüldüğü gibi print_time() fonksiyonu içine
herhangi bir argüman gönderilmiyor.
Python, nesne yönelimli bir programlama (objectoriented programming) dilidir ve aslında zaten birçok
nesne yönelimli kavramı kullanıyoruz. Anahtar kavram,
bir nesnenin olgusudur. Bir nesne iki şeyden oluşur:
veriler ve bu verilerle çalışan işlevler (yöntemler adı
verilir). Örnek olarak, Python'daki dizeler nesnelerdir.
Dize nesnesinin verileri, bu dizeyi oluşturan gerçek
karakterlerdir. Yöntemler, düşürme, değiştirme ve
bölme gibi şeylerdir. Python'da her şey bir nesnedir.
Bu, yalnızca dizeleri ve listeleri değil, aynı zamanda
tam sayıları, kayan sayıları ve hatta işlevleri de içerir.
Sınıf, nesneler için bir şablondur. Tüm nesnenin
yöntemlerinin kodunu içerir.
Bir sınıf oluşturmak için class ifadesini kullanırız. Sınıf
isimleri genellikle büyük harfle başlar.
Çoğu sınıfın __init__ adında bir yöntemi vardır. Alt
çizgiler, bunun özel bir yöntem olduğunu
göstermektedir. Kurucu/Yapıcı (constructor) olarak
adlandırılır ve birisi sınıfınızdan yeni bir nesne
(object) oluşturduğunda otomatik olarak çağrılır.
Yapıcı genellikle sınıfın değişkenlerini (class variable)
ayarlamak için kullanılır. Yukarıdaki programda,
kurucu a ve b olmak üzere iki değer alır ve a ve b
sınıf değişkenlerini bu değerlere atar.
Sınıftan yeni bir nesne oluşturmak için, kurucuya göndermek istediğiniz Sınıfınızdaki her yöntemin ilk argümanı, self adı
herhangi bir değerle birlikte sınıf adını çağırırsınız. Genellikle onu bir verilen
özel
bir
değişkendir.
Sınıfınızın
değişken adına atamak isteyeceksiniz. e = Example (8,6) işleminin değişkenlerinden veya yöntemlerinden birine her
yaptığı da budur.
gönderme yaptığında, onlardan önce kendisi
gelmelidir. self’in amacı, sınıfınızın değişkenlerini ve
Nesnenin yöntemlerini kullanmak için, e.add () 'da olduğu gibi nokta yöntemlerini programdaki diğer değişkenlerden ve
operatörünü kullanırız.
işlevlerden ayırmaktır.
Nesne yönelimli programlamada,
başka bir sınıftan inşa edilen bir sınıf
oluşturabileceğiniz
kalıtım
(inheritance) adı verilen bir kavram
vardır. Bunu yaptığınızda, yeni sınıf,
miras
aldığı
sınıfın
tüm
değişkenlerini ve yöntemlerini alır
(temel sınıf olarak adlandırılır).
Ardından, temel sınıfta bulunmayan
ek değişkenleri ve yöntemleri
tanımlayabilir ve ayrıca temel sınıfın
bazı yöntemlerini geçersiz kılabilir.
Yani, onları kendi amaçlarına uyacak
şekilde yeniden yazabilir.
Dışardan erişilemeyen class
içindeki
değişkene
_hiddenvariable diyorlar. Yani
saklı değişken anlamına geliyor.
(Çeşitli Konular 3)
L bir liste (list) ve s bir karakter dizesi
(string) ise, bu durumda L [0] listenin
ilk öğesini ve s [0] dizenin ilk öğesini
verir. Listenin ilk elemanını 3 olarak
değiştirmek istersek, L [0] = 3
yapacaktır. Ancak bir dizeyi (string) bu
şekilde değiştiremeyiz (immutable).
Nedeni, Python'un listeleri ve dizeleri
nasıl ele aldığı ile ilgilidir. Listelerin
(ve
sözlüklerin
(dictionary))
değiştirilebilir
(mutable)
olduğu
söylenir,
bu
da
içeriklerinin
değişebileceği anlamına gelir. Öte
yandan dizeler değişmezdir, yani
değiştirilemezler. Dizelerin değişmez
olmasının nedeni kısmen performans
içindir (değişmez nesneler daha
hızlıdır) ve kısmen de dizelerin sayılar
gibi temel olduğu düşünüldüğü
içindir.
Yandaki 2 örnekte string ve list içine
atanan değerin sırasıyla orijinal veriyi
değiştirmeyen ve değiştiren yapıları
olduğunu görüyoruz:
copy=L[:] ifadesi ile liste içindeki değerler
bir başka listeye bu şekilde kopyalanabilir.
Böylece orijinal veri içindeki değerler
değişmez.
Tuple bir çeşit değişmeyen (immutable) listedir.
Listeler gibi [ ] köşeli parantez yerine ( ) normal
parantez kullanılır. len, count ve index gibi
yöntemleri kullanabilir fakat içerik immutable
olduğundan sort ve reverse gibi yöntemleri
kullanmaz.
Tuble’lerin olmasının bir nedeni, bazı durumlarda
değişmez bir liste türü isteyebilmenizdir. Örneğin,
listeler sözlüklerde anahtar görevi göremez çünkü
listelerin değerleri değişebilir ve Python’da
sözlüklerin (dictionary) takip edilmesi bir kabus
olur. Tuples, ancak, sözlüklerde anahtar görevi
görebilir. Öğrenci ekiplerine not verme örneği
gibi:
Bir listeyi ya da bir string’i tuple’ye çevirmek için
tuple() fonksiyonu kullanılır:
Kaynaklar:
• https://pythondunyasi.com/python-kutuphaneleri/
• https://tr.wikipedia.org/wiki/Python_(programlama_dili)
• https://www.geeksforgeeks.org
• https://www.programiz.com
• https://www.w3schools.com
• https://www.tutorialspoint.com
Download