Javascript Operatörler

Javascript Operatörleraritmetik operatörler, atama operatörleri, karşılaştırma operatörleri ve mantıksal operatörler olmak üzere 4 grup altında ele alabiliriz.

Aritmetik Operatörler

Javascript’ de matematiksel işlemleri yapmak için aritmetik operatörler kullanılır.

       
    x = 20; y = 5; sonuc
+ Toplama sonuc = x + y 25
- Çıkarma sonuc = x - y 15
* Çarpma sonuc = x * y; 100
/ Bölme sonuc = x / y; 4
% Mod Alma sonuc = y % x; 0
++ Arttırma sonuc = x++; 21
Eksiltme sonuc = x–; 19
** Üs alma sonuc = 2 ** 3; 8

Toplama Operatörü (+)

Devamı...

Javascript Değişkenler

Geçici olarak veri saklamak için oluşturduğumuz veri yapılarına değişken denir. Örneğin bir öğrencinin not ortalamasını hesaplamak istediğimizde hesaplama işlemine gelmeden önce öğrencinin notlarını geçici olarak bir yerde saklamamız gerekir.

Devamı...

Python Listelerin ve Demetlerin Metotları

Burada, geçen bölümde kaldığımız yerden devam edeceğiz listeleri anlatmaya. Ağırlıklı olarak bu bölümde listelerin metotlarından söz edeceğiz. ‘Metot’ kavramını karakter dizilerinden hatırlıyorsunuz. Karakter dizilerini anlatırken bol miktarda metot görmüştük.

Python’da bütün veri tipleri bize birtakım metotlar sunar. Bu metotlar yardımıyla, ilgili veri tipi üzerinde önemli değişiklikler veya sorgulamalar yapabiliyoruz.

Hatırlarsanız bir veri tipinin hangi metotlara sahip olduğunu görmek için dir() fonksiyonundan yararlanıyorduk. Listelerde de durum farklı değil. Dolayısıyla şu komut bize listelerin metotlarını sıralayacaktır:

Devamı...

Python Listeler ve Demetler

Bu bölüme gelene kadar yalnızca iki farklı veri tipi görmüştük. Bunlardan biri karakter dizileri, öteki ise sayılardı. Ancak tabii ki Python’daki veri tipleri yalnızca bu ikisiyle sınırlı değildir. Python’da karakter dizileri ve sayıların dışında, başka amaçlara hizmet eden, başka veri tipleri de vardır. İşte biz bu bölümde iki farklı veri tipi daha öğreneceğiz. Bu bölümde ele alacağımız veri tiplerinin adı ‘liste’ (list) ve ‘demet’ (tuple).

Bu bölümde birer veri tipi olarak listeler ve demetlerden söz etmenin yanısıra liste ve demetlerin metotlarından da bahsedeceğiz. Listelerle demetleri öğrendikten sonra Python’daki hareket imkanınızın bir hayli genişlediğine tanık olacaksınız.

Python programlama diline yeni başlayan biri, karakter dizilerini öğrendikten sonra bu dilde her şeyi karakter dizileri yardımıyla halledebileceğini zannedebilir. O yüzden yeni bir veri tipi ile karşılaştığında (örneğin listeler veya demetler), bu yeni veri tipi ona anlamsız ve gereksizmiş gibi görünebilir. Aslında daha önce de söylediğimiz gibi, bir programlama dilini yeni öğrenenlerin genel sorunudur bu. Öğrenci, bir programlama dilini oluşturan minik parçaları öğrenirken, öğrencinin zihni bu parçaların ne işine yarayacağı konusunda şüpheyle dolar. Sanki gereksiz şeylerle vakit kaybediyormuş gibi hissedebilir. En önemli ve en büyük programların, bu minik parçaların sistematik bir şekilde birleştirilmesiyle ortaya çıkacak olması öğrencinin kafasına yatmayabilir. Halbuki en karmaşık programların bile kaynak kodlarını incelediğinizde görecekleriniz karakter dizileri, listeler, demetler, sayılar ve buna benzer başka veri tiplerinden ibarettir. Nasıl en lezzetli yemekler birkaç basit malzemenin bir araya gelmesi ile ortaya çıkıyorsa, en abidevi programlar da ilk bakışta birbiriyle ilgisiz görünen çok basit parçaların incelikli bir şekilde birleştirilmesinden oluşur.

O halde bu noktada, Python programlama diline yeni başlayan hemen herkesin sorduğu o soruyu soralım kendimize: ‘Neden farklı veri tipleri var? Bu veri tiplerinin hepsine gerçekten ihtiyacım olacak mı?’

Bu soruyu başka bir soruyla cevaplamaya çalışalım: ‘Acaba neden farklı giysi tipleri var? Neden kot pantolon, kumaş pantolon, tişört, gömlek ve buna benzer ayrımlara ihtiyaç duyuyoruz?’ Bu sorunun cevabı çok basit: ‘Çünkü farklı durumlara farklı giysi türleri uygundur!’

Örneğin ev taşıyacaksanız, herhalde kumaş pantolon ve gömlek giymezsiniz üzerinize. Buna benzer bir şekilde iş görüşmesine giderken de kot pantolon ve tişört doğru bir tercih olmayabilir. İşte buna benzer sebeplerden, programlama dillerinde de belli durumlarda belli veri tiplerini kullanmanız gerekir. Örneğin bir durumda karakter dizilerini kullanmak uygunken, başka bir durumda listeleri veya demetleri kullanmak daha mantıklı olabilir. Zira her veri tipinin kendine has güçlü ve zayıf yanları vardır. Veri tiplerini ve bunların ayrıntılarını öğrendikçe, hangi veri tipinin hangi sorun için daha kullanışlı olduğunu kestirebilecek duruma geleceğinizden hiç kuşkunuz olmasın.

Biz bu bölümde listeleri ve demetleri olabildiğince ayrıntılı bir şekilde inceleyeceğiz. O yüzden bu veri tiplerini incelerken konuyu birkaç farklı bölüme ayıracağız.

Listeleri ve demetleri incelemeye listelerden başlayalım…

Listeler

Giriş bölümünde de değindiğimiz gibi, listeler Python’daki veri tiplerinden biridir. Tıpkı karakter dizileri ve sayılar gibi…

Liste Tanımlamak

Listeleri tanımaya, bu veri tipini nasıl tanımlayacağımızı öğrenerek başlayalım.

Hatırlarsanız bir karakter dizisi tanımlayabilmek için şöyle bir yol izliyorduk:

Devamı...

Python Lambda Fonksiyonu

Pythonda lambda fonksiyonu nasıl tanımlanır ve hangi amaçla kullanılır? Map ve Filter metodu lambda fonksiyonlarında nasıl kullanılır?

Pythonda Lambda Fonksiyonu

Pythonda isimsiz olarak tanımladığımız fonksiyonlara lambda fonksiyonları denir.

İlk olarak lambda fonksiyonları nasıl tanımlanır öğrenelim sonrasında neden python lambda fonksiyonlarına ihtiyaç duyarız görelim.

Lambda Fonksiyonu Tanımlama

Square isminde normal bir fonksiyon tanımlayalım.

Devamı...

Python Karakter Dizileri Strings ve Metotları

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ı...

Javascript Nasıl Yazılır?

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ı...

Python Basit Kod Örnekleri

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 Nedir? Zaman Karmaşıklığı ve Big O Notasyonu

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?

Algoritmanın Performans Kriterleri 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ı...

Riya'nın Doğum Günü Sorusu Algoritması

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ı...

Python Yüz Algılama ve Tanıma Programı

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ı...

Python Fotoğraf Üzerinde Yüz Algılama Programı

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ı...

Python Video Üzerinde Yüz Algılama Programı

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ı...

Python Kameradan Yüz Tanıma Programı

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 Değişkenler

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ı...

Python Tuples

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 Yazım kuralları

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ı...

Python Karakter dizileri

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ı...