
Pythonda Karakter Dizileri yani string veri tipleri tek tırnak (‘ ‘) ya da çift tırnak (“ “) ile oluşturulur. ‘Hello World’ ile “Hello World” tanımlaması aynıdır. Ancak bazen karakter dizileri içerisinde tek tırnak karakterini karakter dizisinin bir elemanı gibi göstermek isteriz.
“I’m from Turkey” şeklinde tek tırnak karakterini tanımlayabilmek için mecburen çift tırnak kullanmamız gerekir çünkü ‘I’m from Turkey’ bu şekilde bir kullanım hata verecektir.
Birden Fazla Satırda String Tanımlama
3 tırnak ile birden fazla satırda string tanımlaması yapabilirsiniz. 3 tane tek tırnak ya da 3 tane çift tırnak kullanabilirsiniz.
Devamı...

Daha önce bahsettiğimiz gibi Javascript bir programlama dili ve çalıştırılabilmesi için bir Javascript derleyicisine ihtiyaç duyar. Yazdığımız bir Javascript kodunu çalıştırabilmek için ya bir tarayıcıya ihtiyacımız var, “çünkü Javascript derleyicisi tarayıcı içinde zaten mevcut” ya da nodejs derleyicine ihtiyacımız var.
Şu aşamada nodejs kullanmayacağız dolayısıyla her yazdığımız javascript kodunu çalıştırabilmek için bir html sayfasına ihtiyaç duyacağız.
Editörümüzde bir index.html dosyası oluşturup aşağıdaki html iskeletini ekleyelim.
Visual Studio code editöründe kolay bir şekilde html iskeleti oluşturmak için ünlem(!) işaretinden sonra 2 kere tab tuşuna tıklamanız gerekiyor.
Devamı...

Bir programlama dilini öğrenmenin en iyi yöntemi örnekler üzerinden kodları inceleyerek çalışmaktır. Python dilinde de aynı yöntemleri izleyerek kodlama deneyiminizi arttırabilirsiniz. Bu sayfa Python’un temel kavramlarına ve tkinter GUI arayüzüne ilişkin örnekler içerir. Çözüme bakmadan önce bu örnekleri kendi başınıza denemenizi öneririm.
Örnek 1: Ekranda “Merhaba Dünya” yazdıran Python Örneği
Devamı...

Algoritma analizi, algoritmanın yürütülmesi için gerekli kaynak miktarının belirlenmesidir. Belirli bir problemi çözen herhangi bir algoritmanın ihtiyaç duyduğu kaynaklar için teorik tahminler sağlar. Başka bir ifadeyle, algoritmanın performansı ve kaynak kullanımı konusunda yapılan teorik çalışmaların tümüne algoritma analizi denir.
Buradaki çalışmalar, herhangi bir programlama dilinden bağımsız bir şekilde yürütülür ki gerçek anlamda sadece algoritmanın kendisini analiz edip bilimsel bir yaklaşım benimseyebilelim.
Aslında belli bir makinede çalıştırılabilir algoritmaların performansı için dikkat etmemiz gereken kriterler arasında ‘programlama dili seçiminin’ yanı sıra birçok teknoloji detayı vardır ki bunlar; derleyici seçimi, kodu hangi hızda çalıştırdığımız, belleğin ne kadar hızlı olduğu ve hatta önbelleğe alma işleminin miktarı olarak sıralanabilir.
Bu kriterler, spesifik bir işlemin verimliliği açısından algoritmanın çalışma süresini tahmin etmek için önemli olsa da algoritmanın kendisini analiz etmek için gerekli temel kıstaslardan değildir. Bu kıstasları veya kriterleri ileride göreceğiz ancak öncesinde, algoritma analizine neden ihtiyaç duyduğumuzu açıklayalım.
Algoritma Analizine Neden İhtiyaç Duyarız?
Gerçekten Gerekli mi?
Nasıl ki günlük hayatta ‘vakit nakittir’ deyimi birçok alanda karşılığını buluyorsa, programlamada da durum böyledir. Büyük bir miktarda veriyi işlerken bunu olabildiğince hızlı yapmak isteriz. Buradaki hızlı ve yavaş kavramları, girdi boyutu ile doğrudan ilişkilidir. Örneğin 10 tane veriyi 1000 tane veriye göre çok daha hızlı sıralayabiliriz.
Ama bu, algoritmanın daha hızlı olması için daha az girdiye sahip olması gerektiği gibi saçma bir sonuç çıkarmamalı. Yani girdi miktarını örneklendirerek kıyas yaparız ve bir tahminde bulunuruz. Çünkü işlenmesi gereken veri miktarı çoğu zaman kesin olarak bildiğimiz bir şey değildir. İşte bu yüzden, emin olamadığımız sayıda veri girişi içeren bir algoritmayı tasarlamak veya tercih etmek için analize ihtiyaç duyarız.
Ek olarak, programlamada problem çözme kabiliyeti, yapılan işin kalitesi açısından çok önemlidir. Bir problemin çözümü için gelişigüzel mantıklar kurmak ya da aynı şekilde rastgele algoritma tercihi yapmak programın kalitesinden ödün vermek demektir. Evet, belirli bir problemi farklı algoritmalar ile pek tabii çözebiliriz ancak o probleme özel olan en uygun çözümü getirecek algoritmayı belirlemek, belki de problemi çözmekten çok daha önemlidir ve gereklidir.
Çünkü günün sonunda algoritma bir şekilde oluşur ve sorun çözülür ama her bakımdan maksimum performansı elde eden tek bir algoritma vardır.
İşte o algoritmayı bulmak, diğer algoritmalarla arasındaki farkları ve avantajları belirlemek veya kısaca kıyas yapmak için algoritma analizine ihtiyaç duyarız. Bazen de karşılaştırma yapmaktan ziyade sadece bir algoritmanın performansını ölçmek için analize ihtiyaç duyarız. Peki, algoritma analizinde kıyas yapmak veya performans ölçmek için gerekli kıstaslar nelerdir?
Algoritma verimliliğinde ya da performansında iki kriter vardır. Bunlar zaman(time) ve alan(space) kavramlarıdır. Aslında amacımız bu kavramlar ışığında aşağıdaki sorulara cevap aramak olacaktır.
- Zaman (time)
- Algoritma ne kadar hızlı performans gösteriyor?
- Algoritmanın çalışma zamanını ne etkiler?
- Algoritma için gerekli olan zaman nasıl tahmin edilebilir?
- Algoritma için gerekli olan zaman nasıl azaltılabilir?
- Alan (space)
- Hangi veri yapısı ne kadar yer kaplar?
- Ne tür veri yapıları kullanılabilir?
- Veri yapısı seçimi çalışma zamanını nasıl etkiler?
Bu noktada yürütme zamanı, zaman karmaşıklığı, alan maliyeti ve alan karmaşıklığı gibi kavramlar karşımıza çıkıyor. Algoritma analizinde daha çok yürütme zamanı ve zaman karmaşıklığı üzerinde yoğunlaşacağız ancak diğer kavramlara da bakmakta fayda var.
Alan Maliyeti Nedir? (Space Coast)
Algoritmanın işlevini yerine getirmesi için gereken bellek miktarına veya o bellek alanını veren bağıntıya alan maliyeti denir. Alan maliyeti program kodu, yığın ve veri için gerekli tüm alanları kapsar. S(n) şeklinde gösterilir.
Ek olarak, 4 bytelık tamsayı olan n elemanlı bir küme için alan maliyeti bağıntısı S(n)=4n şeklinde ifade edilmektedir.
Alan Karmaşıklığı Nedir? (Space Complexity)
Alan karmaşıklığı, bir algoritma veya işlemin girdi boyutuna göre çalıştırması gereken toplam bellek miktarını ölçer. Yani alan maliyetini ölçmek demektir diyebiliriz.
Baştaki analiz tanımında da söylediğimiz gibi, alan karmaşıklığı programlama dili, derleyici ve hatta algoritmayı çalıştıran makine gibi çeşitli faktörlere bağlıdır. Bu yüzden algoritmanın kendisini analiz ederken bu faktörleri dikkate almıyoruz. Ek olarak, ne yazık ki, algoritma verimliliğinde alan ve zaman iki ayrı kutup gibidir. Hızın artırılması çoğu zaman bellek tüketiminin artmasına neden olur, aynı şekilde bunun tersi de geçerli olabilir.
Alan karmaşıklığı analizi sonucunda;
“-bir tarafta, son derece hızlı olan ancak çok fazla bellek gerektiren merge sort algoritması, diğer tarafta, yavaş bir algoritma olan ama az bellek tüketen bubble sort algoritması, arasında ise diğer ikisine nazaran daha dengeli olan in-place heap algoritması bulunmaktadır.”
gibi çıkarımlar yapabiliriz.Bu ikilemlere sahip algoritmaların tercihinde, üzerinde çalışılan programın isterleri de göz önünde bulundurulabilir.
Yürütme Zamanı veya Çalışma Zamanı Nedir?
(Running Time)
Yürütme zamanı, ‘n’ boyutlu bir problemin algoritmasını çalıştırmak için gerekli olan zamana denir. Başka bir ifadeyle karşılaştırma, döngü çevirimi, aritmetik işlemler gibi algoritmanın işlevini yerine getirmesi için temel kabul edilen işlemlerin kaç kere yürütüldüğünü veren bir bağıntıdır.
Örneğin n elemanlı bir küme için yürütme zamanı T(n) şeklinde gösterilir. Ayrıca algoritmadaki eleman sayısı fazlalaştığında yürütme zamanı, birazdan göreceğimiz zaman karmaşıklığı olarak da adlandırılır. Aslında yapılan iş bakımından yürütme zamanı ile zaman karmaşıklığı benzer olsa da zaman karmaşıklığını yürütme zamanından ayıran çok önemli ayrıntılar var, ileride göreceğiz.
Çalışma süresi hesabında dikkat edeceğimiz temel hesap birimleri göz atalım.
- Programlama dilindeki deyimler
- Döngü sayıları
- Toplam işlem sayısı
- Dosyaya erişim sayısı
- Atama sayısı
Örnek olması açısından, aşağıdaki Python fonksiyonunun yürütme zamanını bulalım.
Devamı...

Problem: Madhav Riya’nın Doğum Günü Partisine gider. O bir inek olduğundan, bu yüzden hangi hediye hoşuna gideceği konusunda hiçbir fikri yoktur. Bu yüzden bir dizi tamsayıyı yanına alır. Dizi belirli bir düzene uyar. Dizinin ilk elemanı 1’dir. Dizinin ikinci elemanı 6 dır.
Dizinin diğer elemanları, kendisinden önce ve sonra gelen sayıların aritmetik ortalamasının iki eksiği olarak belirleniyordu. Açıkça görüleceği gibi, Riya bu fikrin aptalca olduğunu düşündü ve bu yüzden Madhav’ı cezalandırmak istedi. Madhav’ın bu utanç verici durumdan kaçmasına yardım et.
Girdi
- Girdi, T, Test Durumlarının sayısı ile başlar. (Kaç N gönderileceği)
- Sonraki T satırda tamsayı N ler verilir.
Çıktı
Her test durumu için, dizinin N’inci üyesini bir tamsayı çıktısı olarak verin. Cevap çok büyük olabileceğinden, sonucu 10 ^ 9 + 7’e göre modulo alarak çıktı verin.
Kısıtlamalar:
- 1 ≤ T ≤ 10^5
- 1 ≤ N ≤ 10^18
Örnek Giriş
Devamı...
Bir fotoğraf, video veya bilgisayara bağlı bir kameradan alınan görüntü üzerindeki yüzleri algılayan ve bilgisayarımızda kayıtlı kişilere ait fotoğrafları kullanarak, algıladığı yüzlerin bu veritabanında olanları tanıyarak, altına kişi adlarını yazan bir program oluşturmaya çalışalım.
Programın tam verimli çalışabilmesi için, veritabanında yer alan fotoğrafların elden geldiğince kaliteli ve çok miktarda olması tercih edilmelidir. OpenCV dışında daha kesin ve güvenilir sonuçlar alan kütüphanelerde kullanılabilir.
Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:
- Opencv-python kütüphanesi
Görüş algılama için kullanılan bir kütüphanedir.
Devamı...

Bir fotoğraftaki yüzleri ve gözleri tespit edip işaretleyen bir program oluşturmaya çalışalım. Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:
- Opencv-python kütüphanesi
Görüş algılama için kullanılan bir kütüphanedir.
Devamı...
Bir videoaki yüzleri tespit edip işaretleyen bir program oluşturmaya çalışalım. Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:
- Opencv-python kütüphanesi
Görüş algılama için kullanılan bir kütüphanedir.
Devamı...
Excel ile ilgili dosya oluşturma, sayfa oluşturma, dosyaya veri yazma, verileri okuma ve kaydetme işlemleri için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneyi kullanacağız:
Openpyxl kütüphanesi
Openpyxl Excel 2010 xlsx/xlsm/xltx/xltm dosyaları ile ilgili işlemleri gerçekleştiren bir Python kütüphanesidir.
Devamı...
Bilgisayara bağlı bir kameradan alınan görüntü üzerindeki yüzleri tespit edip işaretleyen bir program oluşturmaya çalışalım. Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:
- Opencv-python kütüphanesi
Görüş algılama için kullanılan bir kütüphanedir.
Devamı...

Python’da değişken farklı türdeki verileri yerleştirmek için kullanılan bellek bölgesidir. Python’da bir değişkene ilk değer atanırken değişken adından önce herhangi bir veri türü tanımlaması yapılmaz. Değişkene atanan değerin veri türüne bağlı olarak, değişkenin veri türü otomatik olarak belirlenir.
Bir değişken oluşturmak için, değişken adını tanımlamak ve tanımlarken değişkene değişkenin veri türünü belirleyecek olan bir veri atamak gerekir. Belirli bir veri türünden değişken tanımladıktan sonra, aynı değişkene farklı veri türünden bir değer atadığımızda, değişken veri türü otomatik olarak yeni atanan verinin türüne dönüşür.
Değişken adı aşağıdaki kurallara uygun olarak verilmelidir:
- Sadece harf, rakam ve alt çizgi karakteri (_) kullanılabilir.
- İlk karakteri rakam olamaz.
- Büyük ve küçük harfler farklı kabul edilir (Deg ve deg ifadeleri farklıdır).
Değişken tanımlama işlemini bir örnek üzerinde incelemeye çalışalım:
Örnek
Devamı...

Tuple, birden fazla değerin yer aldığı bir yapıdır. Tuple içindeki verilerin aynı veri türünden olması gerekli değildir. Elemanlarda değişiklik yapılamaz. Tuple oluşturmak için parantezler (( )) veya tuple() fonksiyonu kullanılır. Türkçe çokuz diyebiliriz.
Devamı...

Python’da, bir kod satırının başındaki boşluklar (indentation) bir kod bloğunu belirtmek için girinti kullanılır. Diğer programlama dillerinde bu boşluklar kodların daha düzenli bir şekilde yazılması ve kolayca anlaşılması için kullanılır. Python’da kod satır başındaki boşluklar programın yapısını belirlediğinden, düzgün kullanılmadığı takdirde program hata verir.
Bir kod bloğu içinde yer alan tüm satırların başındaki boşluklar aynı olmalıdır.
Örnek
Devamı...

Karakter dizisi sabitleri tırnak işaretleri arasına yerleştirilen karakter dizileri ile oluşturulur. Tek tırnak (‘ ‘) veya çift tırnak (“ “) işaretleri kullanılabilir. Bir karakter dizisi sabitini doğrudan veya bir değişkene atadıktan sonra ekrana yazabiliriz.
Şimdi, bu özellikleri bir örnek üzerinde incelemeye çalışalım:
Örnek
Devamı...
Küme, birden fazla değerin yer aldığı bir yapıdır. Küme içindeki verilerin aynı veri türünden olması gerekli değildir. Elemanlar düzenli değildir ve elemanlarda değişiklik yapılamaz. Küme oluşturmak için parantezler ({ }) veya set() fonksiyonu kullanılır.
Devamı...
Ses kaydetme programı (pyaudio ve wave kütüphaneleri ile)
Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:
Tüm işletim sistemlerinde çalışan ses giriş/çıkış akışı kütüphanesidir. Ses ile ilgili işlemlerde kullanılır.
Bu kütüphanenin doğrudan “pip install pyaudio” komutu ile kurulmasında herhangi bir sorun yaşandığında kurulumu gerçekleştirmek için, Christoph Gohlke tarafından Python paketleri için resmi olmayan Windows işletim sistemi dosyalarını içeren web sitesine ait buradaki bağlantıdan bilgisayarımızın işletim sistemine göre indirdiğimiz aşağıdaki dosyalardan birisini, sanal ortamın altındaki Scripts dizini altına kopyalayarak kullanıyoruz:
Devamı...

Bir sanal ortamı oluşturup aktif hale getirdikten sonra, Python ortamında çalışan paket programları yükleyebiliriz. Python ortamında yüklenebilecek paket programların listesi (Python Package Index) adresinde yer almaktadır. Python kurulumunu yaptığımızda bazı paket programlar otomatik olarak yüklenir. Bunlardan birisi de paket program yüklememizi sağlayan pip kütüphanesidir. Aşağıdaki komutları sırasıyla çalıştırdığımızda, env01 sanal ortamındaki script dizinine geçip, pip paketine ait komut ve seçenekleri görebiliriz:
Devamı...
Python’da işlemciler ile değişkenler ve sabitler üzerinde işlem yapılır. Python’da, aşağıda gösterilen 7 kategori içinde sınıflandırılan toplam 27 adet işlemci kullanılır.
- Aritmetik işlemciler: + - * / % ** //
- Atama işlemcisi: =
- Karşılaştırma işlemcileri: == != > < >= <=
- Mantıksal işlemciler: and or not
- Tanımlama işlemcileri: is, is not
- Üyelik işlemcileri: in, not in
- Bit işlemcileri: & | ^ ~ << >>
Ayrıca, aritmetik işlemciler ile bit işlemcilerinin 5 tanesi (~ hariç) atama işlemcisi ile kullanılarak 12 adet ek işlemci oluşturulur.
Aritmetik işlemciler
| Değişken sembolü |
Değişken adı |
Açıklama |
| + |
Toplama |
Değişken ve sabitlerle toplama işlemi yapar. |
| - |
Çıkarma |
Değişken ve sabitlerle çıkarma işlemi yapar. |
| * |
Çarpma |
Değişken ve sabitlerle çarpma işlemi yapar. |
| / |
Bölme |
Değişken ve sabitlerle bölme işlemi yapar. |
| % |
Kalan (Modulus) işlemcisi |
Bölme işleminde kalan değeri verir. |
| // |
Bölüm işlemcisi |
Bölme işleminde sonucun sadece tamsayı kısmını verir. |
| ** |
Üs alma işlemcisi |
Bir sayının üs değerini alma |
Şimdi, aritmetik işlemcilerin kullanılmasını bir örnek üzerinde incelemeye çalışalım:
Örnek
Devamı...

Python’da int, float ve complex olmak üzere üç farklı sayı verisi kullanılmaktadır. Ayrıca, 0 ve 1 değeri alabilen bool verisi de bu kapsamda değerlendirilebilir. Bir değişkene sayısal bir sabit değer atadığımızda, değişken veri türü tanımlanarak oluşturulur.
Şimdi, değişkenlere sabit sayısal değerler atayarak, sayısal değişkenlerin tanımlanmasını bir örnek üzerinde incelemeye çalışalım:
Örnek
Devamı...

Python’da, tek bir işlem satırını veya kod bloğunu bir defadan fazla çalıştırmak için tekrar yazmak yerine, döngü kavramını kullanabiliriz. Bir veya birden fazla işlem satırını, bir koşula bağlı olarak, belirli sayıda veya bir koşul sağlandığı sürece tekrarlayarak çalıştıran kalıplara döngü adı verilir. Döngüleri kullanarak liste, tuple, küme, sözlük veya bir karakter dizisinin elemanlarına birer birer erişim sağlayabiliriz.
Python’da, for ve while olmak üzere 2 farklı döngü kullanılmaktadır.
Bir döngü yapısında döngü içinde yer alan işlem satırları for veya while döngü satırının başlangıç sütunundan en az bir karakter ileriden başlamalıdır.
for döngüsü
Devamı...