Sorular ve daha fazlası için tıklayınız.
Python-ve-Algoritma
Algoritma
Algoritma Nedir ?
Problemlerin çözümünün mantıksal sıralamasıdır.Günlük hayatta yapacağımız işler için hazırladığımız planlar aslında algoritmanın günlük hayatta kullanıldığının ispatıdır.Tüm programlama dillerinin temeli algoritmadır.
Önemli algoritma türleri:
- Arama algoritmaları
- Bellek yönetimi algoritmaları
- Bilgisayar grafiği algoritmaları
- Birleşimsel algoritmalar
- Genetik algoritmalar
- Optimizasyon algoritmaları vb.
Akış Diyagramları
Algoritmanın belirli semboller yardımı ile görsel bir şekilde oluşturulmasında yardımcı olur. Programlamaya başlarken planlı hareket etmek ve uygulamanın karanlık yollarında kaybolmamak için önemlidir
Operatörler
İşlem Operatörleri
- Toplama operatörü: + (artı)
- Çarpma operatörü: * (yıldız)
- Çıkarma operatörü: – (eksi)
- Bölme operatörü: / (slash)
- Üs alma operatörü: ^ (caret)
- Mod operatörü: % (yüzde)
İşlem Önceliği
1) Parantez içleri
2) Üs alma işlemleri
3) Çarpma ve bölme işlemleri
4) Toplama ve çıkarma işlemleri
Karşılaştırma Operatörleri
- Eşit mi operatörü: == simgesi ile ifade edilir.
- Eşit değil mi operatörü: != simgesi ile ifade edilir.
- Küçüktür operatörü: < simgesi ile ifade edilir.
- Büyüktür operatörü: > simgesi ile ifade edilir.
- Küçük veya eşittir operatörü: <= simgesi ile ifade edilir.
- Büyük veya eşittir operatörü: >= simgesi ile ifade edilir.
Mantıksal Operatörler
- Ve(and) operatörü && simgesi ile ifade edilir.Python da "and" ile ifade edilir. True dönmesi için tüm durumların True olması gerekiyor.
- Veya(or) operatörü II simgesi ile ifade edilir.Python da "or" ile ifade edilir. True dönmesi için her hangi bir durumun True olması gerekiyor.
- Değil (not) operatörü ! simgesi ile ifade edilir.Python da "not" veya "!" ile ifade edilir. Durum True ise False, False ise True döndürüyor.
Python
Temel Veri Tipleri
integer, float, boolean, string, bytes
- int: 783, 0, -192, 0b019(binary), 0o0642(octal), 0xF3(hexa)
- float: 9.23, 0.0, -1.7e-6
- bool: True, False
- str: "DörtBeş", "21", "Ben\nErkam"
- bytes: b"toto\xfe\775"
☝️☝️ immutables
Container Veri Tipleri
Sıralı Diziler
hızlı index erişimi ve tekrarlanabilir değer
- list: [7, 8, 3, 4], ["z", 5, 0.3], ["eko"] [] -> Mutable
- tuple: (7, 8, 3, 4), 5, 0.3, "z", ("eko",) () -> Immutable
- str bytes: b"" -> Immutable ### Key Containers Hızlı anahtar erişimi ve her anahtar unique
- dictionary -> dict {"key":"value"} dict(a=2, b=0.3, c="sa") {}
- collection -> set {"key1", "key2"} {1, 9, 3, 0} set()
Değişken Tanımlama
Python programlarımızda bellekte geçici olarak veri saklamak için oluşturduğumuz alanlara değişken denir.Eşitliğin sağ tarafı değerimizi
sol tarafı ise değişkenimizin adını gösterir.
x=2
# 2 -> integer
a=b=c=0 -> 3 Farklı değşkene aynı değeri atamak
# 0 -> integer
y, z, r=0.2, -7.6, 0 - Çoklu değişken atama
# y=0.2, z=-7.6, r=0
a, b=b, a değişken swap leme
Dizi Açılımı
a, *b = seq
*a , b = seq
a, *b = ["a", 2, True, 3.2, "c"]
# a = "a"
# b = [2, True, 3.2, 'c']
*a, b = ["a", 2, True, 3.2, "c"]
# a = ['a', 2, True, 3.2]
# b = "c"
x += 1 <-> x = x + 1
x -= 2 <-> x = x - 2
x *= 3 <-> x = x * 3
x /= 4 <-> x = x / 4
x %= 5 <-> x = x % 5
x = None -> undefined
del x -> Değişkeni silme
Dönüşümler
type() ile elimizdeki verinin türünü öğrenebiliriz.
type("a") ->
type(13) ->
type(1.5) ->
type(False) ->
type(b"bc0ca") ->
type(None) ->
Şimdi veri tiplerinin kendi arasındaki dönüşümlerine göz atalım.
- int("15") -> 15
- int(16,86) -> 16 > Float kısmı kesiyor yuvarlama işlemi daima tabana oluyor.
- float(-44) -> -44.0
- round(23.12491204, 1) -> 23.1 > 2. parametre(virgülden sonrası) float kısmın basamak sayısını belirtmek için kullanılıyor.
- list("abc") -> ["a", "b", "c"]
- dict([(3, "three"), (1, "one")]) -> {1:"one", 3:"three"}
- set([one,two]) -> {"one", "two"}
- str(5) -> "5" --- --- --- ---
Dizilerde Slice ve Index
Dizideki ilk itemin indexi 0, son itemin indexi -1 dir.
- Dizideki item sayısı -> len(lst) = 5
Index
- lst[0] = 10
- lst[1] = 20
- lst[2] = 30
- lst[3] veya lst[-2] = 40
- lst[4] veya lst[-1] = 50
Slice
lst[başlangıçIndex:bitişIndex:Adım]
- lst[::] = [10, 20, 30, 40, 50]
- lst[:] = [10, 20, 30, 40, 50]
- lst [:-1] = [10, 20, 30, 40]
- lst[1:-1] = [20, 30, 40]
- lst[::2] = [10, 30, 50]
- lst[::-1] = [50, 40, 30, 20, 10]
- lst[::-2] = [50, 30, 10]
- lst[1:3] = [20,30]
- lst[-3:-1] = [30,40]
- lst[:3] = [10, 20 30]
- lst[3:] = [40, 50]
Koşullar
if koşul:
statements block
elif koşul:
statements block
else:
statements block
Eğer if bloğundaki koşul doğru ise blokda yazılan kodlar çalışacaktır.
Eğer if bloğundaki koşul doğru değil ise ve elif bloğu var ise elif bloğu çalışacaktır.
Eğer koşulların hiç biri gerçekleşmez ise else bloğu çalışacaktır.
yas=19
if yas<18:
print("Çocuk")
elif yas>65:
print("Yaşlı")
else:
print("Genç")
# Genç
Eğer koşulları etkili bir şekilde kullanmak istiyorsak hangi durumların True hangi durumların False döndüreceğini bilmemiz gerekiyor.
- bool(0) -> False
- bool(1) -> True
- bool(-152123213) -> True
- bool([]) -> False
- bool(["a", 2, False]) -> True
- bool({}) -> False
- bool({1, 3}) -> True
- bool(None) -> False
- bool(b"") -> False
- bool(b"x") -> True
- bool("") -> False
- bool("3") -> True
Örnek vermek gerekirse bir web sitesinden veri çekiceksiniz.Veriyi çekmeden önce verileri eklemek için bir liste oluşturalım.
veri_cek = []
programımızı çalıştırdığımızda koşul için şöyle bir if-else bloğu yazabiliriz.
if veri_cek:
# Veri çekilirse yapılacak işlemler.
else:
# Veri çekilmezse yapılacak işlemler.
Özetlemek gerekirse; eğer veri çekilip de listemize eklenirse listemiz True değer döndürecektir lakin siteden veri kalkmış olabilir veya HTML tag leri değişmiş olabilir böyle bir durumda veriyi çekemeyeceğimizden listemiz boş olacaktır bu sebeple bize False değer döndürecektir ve dolayısıyla else bloğu çalışacaktır.
Hata Yakalama
try:
Normal durumda çalışan blok
except <Hataismi>:
İsmi verilen hata gerçekleştiğinde çalışacak blok
""" EĞER İSİM VERİLMEZSE SADECE except: YAZILIRSA TÜM HATALARI YAKALAR"""
finally:
Hata olsa da olmasa da en son çalışacak blok
Döngüler
While Döngüsü
verilen koşul True olduğu sürece sonsuza kadar dönebilen döngülerdir.
while koşul:
# koşul True ise gerçekleşicek kod.
Loop Control
- Break -> Döngüyü durdur.
- continue -> Adımı atla.
s = 0
i = 1
while i <= 100:
s += i**2
i+=1
print("Toplam:", s)
# Toplam: 338350
Burda her adımda ilk olarak i nin karesini alıp s değişkeni ile topluyoruz ve s değişkenini güncelliyoruz.
Ardından her döngüde i değerini 1 arttırıyoruz. i 100 veya 100 den küçük olduğu sürece koşulumuz True döneceği için döngü devam ediyor.
i 101 olduğu an while döngüsünün kapısında bekleyen bodyguardlar tarafından hoop dur hemşerim nereye denilerek hor görülüyor ve içeri alınmıyor :)
For Döngüsü
for loopu verilen dizinin her elemanını döndüğü için koşula bağlı olmaktan ziyade item sayısı kadar döner.
for <variable> in dizi:
# kod bölümü
Listelerde for:
Listenin uzunluğu kadar bir döngü oluşturur ve değişkene teker teker listenin içindeki itemleri tanımlar.
isim_listesi = ["Erkam","Ensar","Furkan"]
for isim in isim_listesi:
print(isim)
# Erkam
# Ensar
# Furkan
Stringlerde for:
stringler de for döngüsü ile tüm karakterleri teker teker dolaşabiliriz.
kelime = "safranbolu çok güzel şehirdir."
count = 0
for harf in kelime:
if harf == "a":
count += 1
print(count)
# 2
range() ile for:
range() fonksiyonu bize girilen değere kadar (varsayılan olarak 0 dan başlayıp) verilen değere kadar olan sayıları kapsayan bir dizi oluşturur.
range(başlangıç, bitiş, adım)
meyveler = ["elma","armut","kivi","portakal","mandalina","greyfurt"]
for i in range(len(meyveler)):
if i%2 == 0:
print(meyveler[i])
# elma
# kivi
# mandalina
- list(range(5)) -> [0,1, 2, 3, 4]
- set(range(3, 7)) -> {3, 4, 5, 6, 7}
- tuple(range(2, 12, 3) -> (2, 5, 8, 11)
print() Parametreleri
Default olarak:
- sep=" "
- end = "\n"
- file = sys.stdout
"sep" parametresi virgül ile ayırıp display etmek için yazdığımız parametreleri varsayılan olarak aralarında birer boşluk(" ") bırakarak bize çıktısını veriyor.
Eğer farklı bir karakter harf vs. ile ayırmak istiyorsak bunu belirtmemiz yeterli.
print("elma","armut","kiraz","kivi")
# elma armut kiraz kivi
print("elma","armut","kiraz","kivi", sep="-")
# elma-armut-kiraz-kivi
"end" parametresi varsayılan olarak verilen parametreleri çıktı olarak verdikten sonra "\n" ile bir alt satıra geçer.Özellikle bunu looplarda print() kullandığımız zaman daha iyi anlayabiliriz.
for i in range(5):
print(i)
# 0
# 1
# 2
# 3
# 4
for i in range(5):
print(i, end=",")
# 0,1,2,3,4,
"file" parametresi bize çıktının nereye verileceğini gösterir varsayılan olarak kullandığımız IDE nin konsolu yani sys.stdout dur.Bir dosya açıp dilersek print() fonksiyonu ile çıktılarımızı oraya da verebiliriz.
f = open("deneme.txt", "w")
print("bu konsola değil txt dosyasına yazılacak", file=f)
f.close()
Fonksiyonlar
Diğer programlama dillerinde olduğu gibi pythonda da kendimizi belli bölümlerde defalarca tekrar etmek yerine fonksiyon yazıp hem kendimizi yormayız hem de kodun okunaklığı açısından güzel bir harekette bulunmuş oluruz. Fonksiyonu bir kere yazdıktan sonra istediimiz kadar çağırıp istediğimiz yerde def i kullandam sadece isimi ve parantez içini yazarak kullanabiliriz.
def keywordu ile başlayıp fonksiyonumuzun ismi ile devam ediyoruz. Parantez içine ise parametrelerimizi yazıyoruz.
def fonksiyonAdı(a, b, c):
"""Dökümantasyon"""
# Kodlarımızı buraya yazıyoruz.
return res
# res i burda bir result döndürüyoruz anlamında yazdım oraya her hangi bir şey gelebilir.
verilen 3 sayıyı toplayıp 2 ile çarpan fonksiyon:
def toplaVeCarp(sayi1, sayi2, sayi3):
toplam = sayi1 + sayi2 + sayi3
sonuc = toplam*2
return sonuc
print(toplaVeCarp(1,4,8)) veya a = toplaVeCarp(1,4,8) print(a)
# 13
İleri düzey fonksiyonlar
def (x, y, z, *args, a=3, b=5, **kwargs):
# *args -> tuple olarak gelecektir.
# ** kwargs -> dict olarak gelecektir.
# eşitlik verilenler default olarak verilen değerlerdir.
Genel Built-in Fonksiyonlar
lst1 = ["erik", "ayva", "vişne", "çilek"]
lst2 = [12, 2, 7, 21]
- len() -> Dizi içindeki eleman sayısını verir -> len(lst1) = 4
- min() -> Dizi içindeki en küçük elemanı verir eğer veri stringse karakter sayısına bakar -> min(lst1) = 2 & min(lst1) = "ayva"
- max() -> Dizi içindeki en büyük elemanı verir eğer veri stringse karakter sayısına bakar -> max(lst1) = 21 & max(lst1) = "çilek"
- sum() -> Eğer dizi içindeki elemanlar integer veya float ise hepsini toplar aksi halde hata döndürür. -> sum(lst2) = 42
- sorted() -> Dizi içindeki elemanları default olarak küçükten büyüğe göre sıralar. reversed=False parametresi True yapılırsa büyükten küçüğe göre sıralar -> sorted(lst2) = [2, 7, 12, 21] & sorted(lst2, reversed=True) = [21, 12, 7, 2]
- in dizi -> Eğer aradığımız değer listede varsa True, yoksa False döndürecektir. -> 3 in lst2 = False & 2 in lst2 = True
- zip() -> zip() ile birden fazla diziye indexlerine göre eşleyip tuple a çevirebiliriz. -> zip(lst1, lst2) = & list(zip(lst1, lst2)) = [('erik', 12), ('ayva', 2), ('vişne', 7), ('çilek', 21)]
Dictionary Metotları
- d[key] = value -> sözlüğe item eklemek > d[key] -> # value
- d.update(d2) -£ 2 sözlüğü birleştirmek
- d.keys() d.values() d.items() -> Sözlüğü iterable olarak döngüde kullanmak için kullanırız. keys() sadece keyleri verir, values() sadece keylere karşılık gelen değerleri verir, items() tuple şeklinde (key, value) çifti verir.
- d.pop(key, None) -> verilen keyi value ile birlikte siler.Default olarak 2. parametresi None dur.
- d.get(key, None) -> Keyi verilen değeri getirir. Default olarak None dur.
Küme Metotları
Operatorler:
- | -> union - 2 kümeyi birleştirir.
- & -> intersection - 2 kümenin kesişimini alır. - - -
- s.update(s2) -> 2 kümeyi birleştirir.
- s.add(key) -> Kümeye key ekler.
- s.discard(key) & a.remove(key) -> verilen keyi kümeden siler
- s.pop() -> ilk elemanı atar
Liste Metotları
- lst.append(value) -> verilen değeri listenin en sonuna ekler.
- lst.extend(dizi) -> verilen değerleri listenin en sonuna ekler.
- lst.insert(index, value) -> verilen indexe verilen value yu ekler.
- lst.remove(value) -> verilen değeri listden siler.
- lst.pop(index) -> indexi verilen değeri listeden atar. Varsayılan olarak en sonuncuyu atar.
- lst.sort & lst.reverse() -> listeyi sıralar / terse çevirir.
String Metotları
- s.startswith() -> string verilen parametre ile başlıyorsa True başlamıyorsa False döndürür.
- s.endswith() -> string verilen parametre ile bitiyorsa True bitmiyorsa False döndürür.
- s.count() -> verilen karakterin stringde ki sayısını döndürür.
- s.index() -> verilen karakterin bulunduğu ilk indexi döndürür.
- s.upper() -> Tüm harfleri büyük yapar.
- s.lower() -> Tüm harfleri küçük yapar.
- s.title() -> Tüm kelimelerin ilk harfini büyük yapar.
- s.capitalize() -> Yalnızca ilk kelimenin ilk harfini büyük yapar.
- s.strip() -> Sağ ve soldaki fazla boşlukları yok eder.
- s.lstrip() & s.rstrip() -> sol/sağ boşlukları yok eder.
- s.split() -> belirtilen karakterden stringi ayırıp listeye dönüştürür varsayılan olarak " " dur.
- s.join() -> parametre olarak liste alır. liste elemanlarını kullandığımız string ile araları doldurarark birleştirir.
- s.isalnum() -> String, en az bir karakterden oluşuyor ve tüm karakterler alfanümerik (harf veya rakam) değerlerden oluşuyorsa, “TRUE” değeri üretir.
- s.isalpha() -> String, en az bir karakterden oluşuyor ve tüm karakterler alfabetik (harf) değerlerden oluşuyorsa, “TRUE” değeri üretir.
- s.isdecimal() -> String, en az bir karakterden oluşuyor ve tüm karakterler ondalık değerlerden oluşuyorsa, “TRUE” değeri üretir.
- s.isdigit() -> String, en az bir karakterden oluşuyor ve tüm karakterler rakamlardan oluşuyorsa, “TRUE” değeri üretir.
Top comments (0)