Algoritmik düşünme sorularını çözmek için kodu en sona bırakan dört aşamalı bir sıra izleyebilirsin. Önce girdiyi ve beklenen çıktıyı yazarsın, sonra örnekleri küçük parçalara bölersin. Ardından parçalarda tekrar eden kuralı bulur, çözümü sözde kodla sınar ve ancak ondan sonra Python'a dökersin. Bu yazıda örnek olarak "listedeki en büyük sayıyı bul" sorusunu bu dört aşamadan geçireceğiz.
1. Aşama: Önce Girdi ve Çıktıyı Kendi Cümlenle Yaz
Algoritmik düşünme, kod yazmadan önce girdiyi, işlemi ve çıktıyı görünür hâle getirmektir. İlk aşama bunun en küçük parçasıdır: soruyu okuyup girdi ile çıktıyı kendi cümlenle yazarsın.
Şu soruyu ele alalım: "Listedeki en büyük sayıyı bul." Kısa görünür ama birden fazla yoruma açıktır:
- İstenen şey değerin kendisi mi, yoksa o değerin listedeki sırası (indeksi) mi?
- Liste boş olabilir mi? Boşsa ne döndürülecek?
- Sayılar negatif olabilir mi? Aynı değer birden fazla kez geçebilir mi?
Bu belirsizlikleri yazarak kapattığında soru şu hâle gelir:
Girdi : tamsayı listesi
Çıktı : en büyük değerin kendisi
Koşul : en büyük = listedeki diğer tüm değerlerden küçük olmayan değer
Boş liste : çıktı yok (None)
Dört satırlık bu not, kodun ilk satırından önce hangi sorunun çözüleceğini sabitler. Sonradan "ben indeksi mi döndürmeliydim?" diye dönüp düzeltme yapmak zorunda kalmazsın.
Soru metnindeki koşul ifadeleri de bu ayrıştırmanın malzemesidir. "En büyük" ve "en az" bir karşılaştırma ölçütü verir. "Her biri" bütün elemanların koşulu sağlaması gerektiğini söyler. "Hiçbiri" ise hiçbir elemanın koşulu sağlamamasını ister. Örneğin "listede 3'ten büyük kaç sayı var?" sorusunda girdi bir liste, koşul "3'ten büyük olmak", çıktı ise bir sayıdır, yani bir sayaç değeridir.
Bu aşamayı bitirmeden önce kendine şunları sor:
- Girdinin türü ve boyutu nedir (liste mi, tek sayı mı, metin mi; kaç eleman)?
- Çıktı bir değer mi, bir sıra mı, yoksa bir mesaj mı?
- Soruda boş girdi ya da eşit değerler hakkında bir şey söyleniyor mu? Söylenmiyorsa varsayımını yazdın mı?
2. Aşama: Örnekleri Küçük Parçalara Ayır

Girdi ve çıktı netleşince küçük bir örneği elle çözersin. Girdi olarak [4, 9, 2, 7] alalım; beklenen çıktı 9'dur. Listeye bütün olarak bakıp "gözüm 9'u görüyor" demek yerine elemanlara tek tek bak ve her adımda aklında tuttuğun tek bilgiyi not et: şu ana kadarki en büyük değer.
| Adım | Bakılan eleman | Şu ana kadarki en büyük | Durum açıklaması |
|---|---|---|---|
| 1 | 4 | 4 | Daha önce eleman yok, ilk eleman başlangıç değeri olur. |
| 2 | 9 | 9 | 9, 4'ten büyük; en büyük değer güncellenir. |
| 3 | 2 | 9 | 2, 9'dan küçük; en büyük değer değişmez. |
| 4 | 7 | 9 | 7, 9'dan küçük; değişmez. Liste bitti, çıktı 9. |
Parçalamanın işe yaramasının nedeni, büyük sorunun her adımda tek bir elemana bakma sorusuna inmesidir. "Dört sayının en büyüğü hangisi?" sorusu, "bu eleman, elimdeki en büyük değerden büyük mü?" sorusunun tekrarına dönüşür. Tabloda her adımda değişen şeyin bakılan eleman, bazı adımlarda değişen şeyin ise en büyük değer olduğunu görürsün. Değişmeyen şey, her adımda aynı soruyu sormandır.
Bu örnekte 9 ikinci sırada çıktı. En büyük değerin başta, ortada ya da sonda olduğu başka küçük örnekleri de aynı tabloyla dene. Böylece kuralın konumdan bağımsız çalıştığını görürsün.
Bu aşamanın kontrol soruları:
- Örneği elle çözerken hangi bilgiyi aklında tutuyorsun?
- Her adımda değişen ve değişmeyen şey nedir?
- Örneğin ilk adımı, listenin kaç elemanı olursa olsun aynı şekilde yazılabilir mi?
3. Aşama: Tekrar Eden Kuralı Bul ve Koşulu Yaz
Bir grup arkadaşın boylarına tek tek baktığını düşün. Hepsini aynı anda aklında tutmazsın. Her kişide tek bir bilgiyi güncel tutarsın: "Şimdiye kadar gördüğüm en uzun kişi kim?" Yeni biri daha uzunsa bu bilgiyi değiştirirsin, değilse olduğu gibi bırakırsın. Son kişiye bakıp bitirdiğinde elindeki bilgi cevaptır.
Aynı anlatımı sayı listesine uyarlayınca şu adımlar çıkar:
- İlk elemanı şimdilik en büyük kabul et.
- Sıradaki elemana bak.
- Bu eleman en büyükten daha büyükse en büyüğü onunla güncelle.
- Liste bitene kadar 2. ve 3. adımları tekrarla.
- En büyüğü çıktı olarak ver.
Bu listede üç temel kavram saklı. 2. ve 3. adımların listenin her elemanı için yinelenmesi tekrardır, yani döngü. "Daha büyükse" kısmı bir koşuldur, yani karşılaştırma. Adımlar boyunca değeri değişen "en büyük" bilgisi ise durumdur, yani bir değişkenin tuttuğu değer. Bir algoritma sorusunda bu üçlüyü ayırt edebiliyorsan çözümün iskeleti hazır demektir.
Kontrol soruları
- Hangi adımlar listenin her elemanı için tekrar ediyor?
- En büyük değerin güncellenmesi hangi koşula bağlı?
- Tekrar ne zaman duruyor?
4. Aşama: Sözde Kodla Sına, Sonra Python'a Dök

Kod yazmadan önce çözümü programlama diline yakın, ama sözdizimi kaygısı olmayan kısa bir metne çevir. Bu metin sözde koddur:
1. Liste boşsa sonuç yok, bitir.
2. en_buyuk, listenin ilk elemanına eşit olsun.
3. Listedeki her sayı için: sayı en_buyuk'ten büyükse en_buyuk sayı olsun.
4. en_buyuk'u ver.
Şimdi bunu 2. aşamadaki [4, 9, 2, 7] örneği üzerinde elle sına. en_buyuk başlangıçta 4 olur. 4 kendisinden büyük değildir, değişiklik olmaz. 9, 4'ten büyüktür ve en_buyuk 9 olur. 2 ve 7, 9'dan büyük değildir. Sonuç 9 çıkar ve beklediğin çıktıyla aynıdır. Elle izleme sonucu tutmuyorsa kodu yazmadan sözde kodu düzeltmen gerekir.
Sözde kod sınavı geçtiğine göre Python'a dökebilirsin:
def en_buyuk(sayilar):
if len(sayilar) == 0:
return None
en_buyuk_sayi = sayilar[0]
for sayi in sayilar:
if sayi > en_buyuk_sayi:
en_buyuk_sayi = sayi
return en_buyuk_sayi
print(en_buyuk([4, 9, 2, 7]))
print(en_buyuk([]))
Beklenen çıktı:
9
None
Satır satır eşleştirme
if len(sayilar) == 0: return Nonesözde kodun 1. satırıdır. Boş listede bakacak eleman olmadığı için "sonuç yok" anlamına gelenNonedöner.en_buyuk_sayi = sayilar[0]2. satırdır: durumun başlangıç değeri.for sayi in sayilar:3. satırın "her sayı için" kısmıdır: tekrar. Döngü ilk elemanı da kontrol eder. 4, kendisinden büyük olmadığı için bu zararsızdır.if sayi > en_buyuk_sayi:koşuldur. Altındaki atama durumu günceller.return en_buyuk_sayi4. satırdır: çıktıyı verir.
Kod, ilk üç aşamanın yazıya dökülmüş hâlidir. Girdi ve çıktıyı belirledin, örneği parçaladın, kuralı buldun. Kod yalnızca bunların Python'daki karşılığıdır. Çözüm kodla başlamaz, kodla bitirilir.
Kontrol soruları
- Sözde kodun her satırı kodda bir karşılığa sahip mi?
- Elle izlediğin sonuç ile kodun çıktısı aynı mı?
- Kodda hangi satır koşulu temsil ediyor?
Sınır Durumları: Boş Liste, Tek Eleman, Negatif Sayılar ve Eşit Değerler
Sözde kod örneğinde çalışsa bile, uç girdilerde kırılabilir. Bu yüzden çözümü yazdıktan sonra dört durumu tek tek denemek gerekir. Bu tarama, ilk aşamada yazdığın girdi ve çıktı cümlesine geri döner. Her sınır durumunun cevabı o cümlede zaten yazılı olmalıdır.
def en_buyuk(sayilar):
if len(sayilar) == 0:
return None
enbuyuk = sayilar[0]
for sayi in sayilar[1:]:
if sayi > enbuyuk:
enbuyuk = sayi
return enbuyuk
Boş liste
Liste boşsa sayilar[0] ifadesi IndexError hatası verir. Girdi ve çıktı cümlene "liste boşsa None döndür" kuralını yazdıysan koddaki ilk if bloğu bu kuralın doğrudan karşılığıdır. Kuralı baştan yazmadıysan, bu durumda ne döndüreceğine şimdi karar vermen gerekir.
Tek eleman
Listede tek eleman varsa sayilar[1:] boş bir dilim olur ve döngü hiç çalışmaz. Karşılaştırma yapılmaz, başlangıç değeri olarak alınan elemanın kendisi döner. Yani [5] için sonuç 5'tir.
Negatif sayılar
Başlangıç değerini 0 seçmek yaygın bir hatadır. [-3, -8, -1] listesinde hiçbir sayı 0'dan büyük olmadığı için değer hiç güncellenmez ve fonksiyon listede olmayan bir sayı olan 0'ı döndürür. İlk elemanı başlangıç yapmak bu sorunu ortadan kaldırır. Başlangıç değeri her zaman listenin gerçek bir elemanıdır, sonuç da listenin dışına çıkamaz.
Eşit değerler
[4, 4, 2] listesinde en büyük değer 4'tür. Burada yalnızca değer istendiği için iki 4'ün hangisinin seçildiği sonucu değiştirmez. Aynı soruda en büyük değerin indeksi istenseydi ilk mi son mu döndürüleceği belirsiz kalırdı ve bunu girdi-çıktı cümlesinde baştan netleştirmek gerekirdi. Bu belirsizlik koddaki karşılaştırmayı da etkiler: > ilk eşiti, >= sonuncuyu seçtirir.
Dört durumu şu çağrılarla sınayabilirsin:
print(en_buyuk([]))
print(en_buyuk([5]))
print(en_buyuk([-3, -8, -1]))
print(en_buyuk([4, 4, 2]))
Beklenen çıktı sırasıyla None, 5, -1 ve 4 olur. Dört satırdan biri farklı çıkarsa hatanın hangi varsayımdan geldiğini bulmak kolaylaşır. Bu tür düşünme becerisi bir dile bağlı değildir ve farklı biçimlerde ölçülebilir. Kendi düzeyini görmek için ücretsiz bilgi testleri merkezindeki seviye testlerini deneyebilirsin.
Sınavda Dört Aşamayı Kısa Sürede Uygulama Kontrol Listesi
Sınavda süre kısıtlıdır, bu yüzden yöntemi kısaltılmış hâliyle uygulayabilirsin. Kâğıda kod yazmadan önce şu maddeleri sırayla kontrol et:
- Girdi ve çıktıyı tek cümleyle yazdın mı? Boş girdide ne döneceğini de ekledin mi?
- Küçük bir örneği elle çözdün mü? Adımları not ettin mi?
- Tekrar eden kuralı tek cümleyle ifade edebiliyor musun? Cümle "her elemanı şuna göre karşılaştır" gibi bir kalıba oturuyorsa kural hazırdır.
- Sözde kodu yazdığın örnek üzerinde satır satır izledin mi?
- Dört sınır durumunu taradın mı: boş liste, tek eleman, negatif sayılar, eşit değerler?
- Soru değiştiyse çerçeveyi yeniden kurdun mu? En küçük değerde karşılaştırma yönü tersine döner. Toplamda başlangıç değeri 0 olur ve boş listede sonuç 0'dır.
Çözümünü sınamak için dilden bağımsız Algoritmik Düşünme Testindeki soruları bu dört aşamayla çözmeyi deneyebilirsin. Önce girdi ve çıktıyı yazıp sonra çözmek, aynı sorunun farklı bir bakışla ele alınmasını sağlar.
Dört aşama her yeni soruda aynı sırayla tekrarlanır: önce ne istendiğini yaz, sonra örneği böl, kuralı bul, kodu sına.