DEV Community

Cover image for Python & Algoritma
Erkam Esen
Erkam Esen

Posted on

Python & Algoritma

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

Akış Diyagramı

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']
Enter fullscreen mode Exit fullscreen mode
*a, b = ["a", 2, True, 3.2, "c"]
# a = ['a', 2, True, 3.2]
# b = "c"
Enter fullscreen mode Exit fullscreen mode

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.

image

  • 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-else-flowchart

if koşul:
    statements block
elif koşul:
    statements block
else:
    statements block

Enter fullscreen mode Exit fullscreen mode

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ç
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

Ö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

12345 finally 1

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
Enter fullscreen mode Exit fullscreen mode

Döngüler

While Döngüsü

623c0c66fad507a80764a3f5_while-loop-flowchart

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.
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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ü

623c0c5447c67e81d4ac3f35_for-loop-flowchart

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ü
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode

"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,
Enter fullscreen mode Exit fullscreen mode

"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()
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

İ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.
Enter fullscreen mode Exit fullscreen mode

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)