Döngüler Bölüm 2 | for

for döngüsünü anlamak için bir önceki blogda ele aldığımız 'while' döngüsünü iyice anlamak zorundasınız; orada çok kritik bilgiler verdim. Şimdi, başlayalım.

for döngüsü, while gibi bir döngüdür ancak biraz daha fazla özelliğe ve daha farklı bir syntax yapısına sahiptir. İlk önce syntax yapısını görelim.

Burada, for (for: için) anahtar kelimesini girdikten sonra bir değişken tanımlıyoruz. Bir değişkenin nasıl tanımlanması gerektiğini zaten biliyorsunuz. Ancak for yapısında değişken olarak genellikle 'i' veya 'j' kullanılır. Bu noktada siz istediğinizi kullanabilirsiniz ancak o for döngüsü, zaten tanımlı olan spesifik bir iş yapıyorsa temsil ettiği şeye göre isimlendirmeniz daha uygun olacaktır. Bu dediğimi ileride daha iyi anlayacaksınız.

Değişkeni de tanımladıktan sonra 'in' anahtar kelimesini veriyoruz. 'in' kelimesinin anlamı 'içinde' şeklindedir. Bunu yaptıktan hemen sonra da fonksiyon veya az önce bahsettiğim, zaten tanımlı olan bir değişkeni veriyoruz. Son olarak iki nokta üst üste ifademizi koyuyor ve devamını getiriyorsunuz.

Örneğin; 'for i in sayilar:' şeklinde bir kodumuz olduğunu varsayalım. Bu noktada bunun Türkçe hâli şöyle olacaktır: "sayilar içinde i için yap". Bu ilk okuyuşta anlamsız gelebilir.

Matematikte bir denklem içerisinde bilinmeyenler varsa bazı durumlarda bu bilinmeyenlere değer veririz. Bu noktada daha resmi bir matematik dili ile şunu deriz: "x, 1 için y denklemi; x, 2 için y denklemi...". Buradaki x ifadesi değişken olurken verdiğimiz sayılar, değişken değeridir. Buradaki 'for i in sayilar:' deyişimizin mantığı aslında bununla aynıdır. "i için sayilar denklemi" derken aslında bunu kastederiz.

Burada çok dikkatli olmanız gereken bir husus var: "for içerisinde fonksiyon kullanacaksanız parantez açmanız gerekir. Ancak zaten tanımlı bir değişkeni kullanacaksanız parantez kullanamazsınız. Örneğin: 'range():', 'sayilar:' şeklinde."

range yapısına geleceğiz ama önce bahsettiğim önceden tanımlı ifadelere bakalım.

numbers adında bir listemiz mevcut. Listelerin ne olduğunu bilmenize şimdilik gerek yok sadece söyleyeceklerime odaklanın.

for i in numbers: dediğimizde, i değişkenini, numbers isimli değişkenin tuttuğu değerlerde gezdiriyor ve işlem yapıyoruz. Buradaki i değişkeninin değeri ilk önce 1, sonra 2, sonra 3 ve en son 7 olacak şekilde değişiyor ve her değişim sırasında print(i) fonksiyonu çalışıyor yani ekrana bunları yazdırıyoruz.

Oradaki 'i' mantığı aslında bu şekilde. Normal bir değişken atadığımızda bunu ekrana şöyle yazdırıyoruz: 'print(degisken)'. Aynı şey burası için de geçerlidir. i değişkeni, kendisine verilen numbers değişkeninin tuttuğu değerleri teker teker ziyaret edip onları kendi değeri haline getiriyor. Bunu her yaptığında da bunları print(i) sayesinde ekrana yazdırıyor. İsterseniz i yerine başka bir şey yazalım.

Gördüğünüz gibi biraz önce i = 1, i = 2 ... i = 7 olan yapı, bu defa cyberworm = 1, cyberworm = 2 ... cyberworm = 7 olarak gerçekleşti. Bunu string ifadelere de uygulayabiliriz, bakalım.

Bu sefer de 'name değişkeninin içinde gez' dedik ve i değişkeni, name değişkenindeki her karakteri kendi değeri hâline getirdi ve bunları teker teker yazdırdı.

Şimdi, range fonksiyonuna bakalım.

Range kelimesi İngilizce'den gelir ve anlamı 'aralık' şeklindedir. Önce kullanımına bakalım, sonra açıklayalım.

Dikkat edelim; range ifadesi de print ve input gibi bir fonksiyondur. Dolayısıyla sonuna bir parantez açıp kapatıyoruz. Onun dışında syntax yapısı diğer for döngüsü ile aynıdır. Burada range; biri başlangıç değeri, diğeri ise bitiş değeri olmak üzere iki değer alacaktır. Bir önceki blogda while ile yaptığımız işin aynısını for ile yaptık ancak burada ufak bir farklılık var. range fonksiyonu aslında, 'başlangıç, bitiş' şeklinde değer almaz; 'başlangıç, bitiş - 1' yani 'n, n-1' şeklinde değer alır. Kısacası bitiş değerinin bir eksiğine kadar yol gider.

range ifadesinin bir 'aralık' ifade ettiğini söylemiştim. O zaman verdiğimiz bu iki değer, bir aralığı ifade edecektir. Biz burada bu sayıları yazdırdık ancak istediğimiz şeyi yazdırabiliriz ya da istediğimiz işlemleri yapabiliriz. Bunu söylememin sebebi, yaygın bir yanlış anlaşılmanın var olmasıdır. range fonksiyonuna verdiğimiz değerler, sayı olarak değil; '-e kadar' olarak gerçekleşir. Ne demek istiyorum?

Yeni başladığını gördüğüm birçok kişi, eğitmenlerin her zaman verdiği 'print(i)' örneği yüzünden buradaki range fonksiyonunun sadece sayı ürettiğini ve bizim de bunları yazdırdığımızı sanıyor. Ancak dediğim gibi; durum, 'sayı değil -e kadar'. Burada söylenen şey de şudur: "i değişkeni 1'den başlasın, 20'ye ulaşana kadar ekrana 'cyber worm' yazdırsın" şeklindedir.

Çok ufak bir uygulama yapalım istiyorum. Kullanıcıya, evinde kaç kişi yaşadığını soralım ve bu kişileri yazmasını isteyelim.

familyMembers yani aileUyeleri adında bir değişken atadım ve bunu, input sayesinde kullanıcıdan alacağım. Sonrasında açtığım for döngüsünde range içerisine, kişi bana hangi sayıyı verirse onu dahil ettim. Yani kullanıcı, "Evinizde kaç kişi yaşıyor? > " sorusuna 4 derse for döngüsü arka planda şuna dönüşecektir: 'for i in range(0, 4)'.

Hemen sonrasında aile üyelerinin adını soruyorum. Burada bu soru, 4 defa tekrarlanacaktır çünkü evde 4 kişi yaşadığını belirttim ve bu sayı range içerisine tanımlandığı için bana o kadar soru soracaktır.

Gördüğünüz üzere 'kaç kişi yaşıyor?' sorusuna 4 dediğim için bana 4 defa soru sordu. Eğer bu değer için ben 20 girseydim 20 defa soracaktı. Çünkü arka planda 'for i in range(0, familyMembers)' ifadesi yerine artık 'for i in range(0, 20)' gelmiş olacaktı.

Lütfen bu konuyla alakalı pratiklerinizi eksik etmeyin, verdiğim kodları değiştirerek sonuçları değerlendirin.


Yayınlanma Tarihi: 2022-10-27 17:16:56

Son Düzenleme Tarihi: 2022-10-29 21:29:31