Python’da Döngüler

Hatırlarsanız geçen bölümlerden birinde basit bir hesap makinesi yapmıştık. Ancak dikkat ettiyseniz, o hesap makinesi programında toplama, çıkarma, çarpma veya bölme işlemlerinden birini seçip, daha sonra o seçtiğimiz işlemi bitirdiğimizde program kapanıyor, başka bir işlem yapmak istediğimizde ise programı yeniden başlatmamız gerekiyordu. Aynı şekilde kullanıcı adı ve parola soran bir program yazsak, şu anki bilgilerimizle her defasında programı yeniden başlatmak zorunda kalırız. Yani kullanıcı adı ve parola yanlış girildiğinde bu kullanıcı adı ve parolayı tekrar tekrar soramayız; programı yeniden başlatmamız gerekir. İşte bu bölümde Python’da yazdığımız kodları sürekli hale getirmeyi, tekrar tekrar döndürmeyi öğreneceğiz.

Kodlarımızı sürekli döndürmemizi sağlamada bize yardımcı olacak parçacıklara Python’da döngü (İngilizce: Loop) adı veriliyor. Bu bölümde iki tane döngüden bahsedeceğiz: while ve for döngüleri. Ayrıca bu bölümde döngüler dışında break ve continue deyimleri ile range() ve len() fonksiyonlarına da değineceğiz. Böylece ilerleyen bölümlerde işleyeceğimiz daha karmaşık konuları biraz daha kolay anlamamızı sağlayacak temeli edineceğiz. İsterseniz lafı daha fazla uzatmadan yola koyulalım ve ilk olarak while döngüsüyle işe başlayalım...

while Döngüsü

Yazdığımız kodları tekrar tekrar döndürmemizi sağlayan, programımıza bir süreklilik katan öğelere döngü adı verilir. while döngüsü, yukarıda verilen tanıma tam olarak uyar. Yani yazdığımız bir programdaki kodların tamamı işletilince programın kapanmasına engel olur ve kod dizisinin en başa dönmesini sağlar. Ne demek istediğimizi anlatmanın en iyi yolu bununla ilgili bir örnek vermek olacaktır. O halde şu küçücük örneği bir inceleyelim bakalım:

#!/usr/bin/ env python
#-*- coding: utf-8 -*-

a = 0
a = a + 1

print a

Bu minicik kodun yaptığı iş, birinci satırda a değişkeninin değerine bakıp ikinci satırda bu değere 1 eklemek, üçüncü satırda da bu yeni değeri ekrana yazdırmaktır. Dolayısıyla bu kod parçasının vereceği çıktı da 1 olacaktır. Bu çıktıyı verdikten sonra ise program sona erecektir.

Bu arada ufak bir ipucu verelim size. Python yukarıda gördüğünüz a = a + 1 satırını şu şekilde yazmanıza da izin verir:

a += 1

Eğer a = a - 1 gibi bir şey yazmış olsaydık, bunu da şu şekilde kısaltabilirdik:

a -= 1

a = a * 2 veya a = a / 2 gibi ifadeler de şöyle kısaltılabilir:

a *= 2

ve:

a /= 2

Bu kısaltmalar son derece önemlidir, çünkü yazdığınız Python programlarının performansını artırıcı etkileri vardır. O yüzden kodlarınızda mümkün olduğunca bu kısaltmaları kullanmaya çalışın.

Şimdi yukarıdaki koda bazı eklemeler yapalım:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

a = 0

while a < 100:
    a += 1
    print a

Bu kodu çalıştırdığımızda, 1’den 100’e kadar olan sayıların ekrana yazdırıldığını görürüz.

Konuyu anlayabilmek için şimdi de satırları teker teker inceleyelim:

İlk satırda, 0 değerine sahip bir a değişkeni tanımladık.

İkinci ve üçüncü satırlarda, “a değişkeninin değeri 100 sayısından küçük olduğu müddetçe a değişkeninin değerine 1 ekle,” cümlesini Pythonca’ya çevirdik.

Son satırda ise, bu yeni a değerini ekrana yazdırdık.

İşte bu noktada while döngüsünün faziletlerini görüyoruz. Bu döngü sayesinde programımız son satıra her gelişinde başa dönüyor. Yani:

  • a değişkeninin değerini kontrol ediyor,
  • a değerinin 0 olduğunu görüyor,
  • a değerinin 100’den küçük olduğunu idrak ediyor,
  • a değerine 1 ekliyor (0 + 1 = 1),
  • Bu değeri ekrana yazdırıyor (1),
  • Başa dönüp tekrar a değişkeninin değerini kontrol ediyor,
  • a değerinin şu anda 1 olduğunu görüyor,
  • a değerinin hâlâ 100’den küçük olduğunu anlıyor,
  • a değerine 1 ekliyor (1 + 1 = 2),
  • Bu değeri ekrana yazdırıyor (2),
  • Bu işlemi 99 sayısına ulaşana dek tekrarlıyor ve en sonunda bu sayıya da 1 ekleyerek vuslata eriyor.

Gördüğünüz gibi, while döngüsünü anlamak ve kullanmak hiç de zor değil. İsterseniz alıştırma olması bakımından bir örnek daha verelim:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

a = 1

kullanici_adi = "ahmet_hamdi"
parola = "Saatleri_Ayarlama_Enstitüsü"

while a == 1:
    kull_ad = raw_input("Kullanıcı adı: ")
    par = raw_input("Parola: ")

    if kull_ad == kullanici_adi and par == parola:
        print "Programa hoşgeldiniz!"
        a = 2

    elif not kull_ad or not par:
        print "Bu alanları boş bırakamazsınız!"

    else:
        print "Kullanıcı adı veya parolanız hatalı."

Burada öncelikle değeri 1 olan a adlı bir değişken tanımladık. Bu değişkenin değeri 1 olduğu müddetçe programımız çalışmaya devam edecek.

Bir sonraki satırda kullanici_adi ve parola adlı iki değişken daha tanımlıyoruz. Eğer kullanıcı, bu değişkenlerin değerini doğru girerse sisteme giriş yapabilecek.

Daha sonra da while döngümüzü tanımlıyoruz. Burada yaptığımız şeye dikkat edin. while a == 1 ifadesi ile Python’a şunu söylemiş oluyoruz:

a değişkeninin değeri 1 olduğu müddetçe aşağıdaki kodları çalıştırmaya devam et!

Bu satırın ardından normal bir şekilde raw_input() fonksiyonlarımız yardımıyla kullanıcıdan kullanıcı adı ve parola bilgilerini istiyoruz.

Ardından gelen if deyimini nasıl yazdığımıza dikkat edin. Burada şöyle bir şey demiş olduk:

Eğer kull_ad değişkeninin değeri kullanici_adi değişkeninin değeriyle VE par değişkeninin değeri parola değişkeninin değeriyle aynıysa...

Buradaki and (VE) işlecinin görevini biliyorsunuz. Bu sayede kullanıcının hem kullanıcı adı hem de parola bilgisini doğru girmesini isteyebiliyoruz.

Bu arada, buradaki if bloğunun içinde görünen a = 2 ifadesi de çok önemli. Bu ifade ile, en başta belirlediğimiz a değişkeninin 1 olan değerini 2‘ye getiriyoruz. Böylece a değişkeninin değeri artık 1 olmamış oluyor. Böylece kullanıcımız kullanıcı adı ve parola bilgilerini doğru girdiğinde while döngüsü sona eriyor. Eğer burada a değişkeninin değerini 1 dışında bir değere ayarlamazsak, kullanıcı adı ve parola doğru girildiği halde programımız kullanıcı adı ve parola sormaya devam edecektir.

Sonraki satırda gördüğümüz elif bloğunda ise kullanıcı adı ve parola alanlarının boş bırakılıp bırakılmadığını denetliyoruz. Eğer kullanıcımız, kullanıcı adı VEYA (or) parola bilgilerinden herhangi birini boş bırakırsa kendisine Bu alanları boş bırakamazsınız! uyarısı gösteriyoruz.

else bloğunda ise kullanıcı adı ve parolanın yanlış girilmesi halinde kullanıcıya nasıl bir uyarı göstereceğimizi belirliyoruz.

Yukarıdaki kodlar istediğimiz işlemi rahatlıkla yerine getirmemizi sağlar. Bu açıdan yukarıdaki kodlar tamamen doğru ve geçerli bir Python programıdır. Ancak eğer istersek yukarıdaki kodları biraz sadeleştirme ve profesyonel bir görünüm kazandırma imkanına da sahibiz.

Şu kodlara bir bakın:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

kullanici_adi = "ahmet_hamdi"
parola = "Saatleri_Ayarlama_Enstitüsü"

while True:
    kull_ad = raw_input("Kullanıcı adı: ")
    par = raw_input("Parola: ")

    if kull_ad == kullanici_adi and par == parola:
        print "Programa hoşgeldiniz!"
        quit()

    elif not kull_ad or not par:
        print "Bu alanları boş bırakamazsınız!"

    else:
        print "Kullanıcı adı veya parolanız hatalı."

Burada önceki kodlara göre bazı farklılıklar dikkatimizi çekiyor. Mesela önceki kodlarda yer alan a değişkenini burada artık kullanmıyoruz. Çünkü bu değişkene ihtiyacımız kalmadı. Bunun yerine while döngümüzü şu şekilde yazdık:

while True:

Hatırlarsanız geçen bölümde Bool değerleri incelerken True kelimesinin “doğru” anlamına geldiğini söylemiştik. Dolayısıyla burada gördüğümüz while True ifadesi şu anlama geliyor:

Doğru olduğu müddetçe aşağıdaki kodları çalıştırmaya devam et!

Peki ne doğru olduğu müddetçe? Neyin doğru olduğunu açıkça belirtmediğimiz için Python burada her şeyi doğru kabul ediyor. Yani bir nevi, “aksi belirtilmediği sürece aşağıdaki komutları çalıştırmaya devam et!” emrini yerine getiriyor.

Bunun dışında farklı olarak ilk if bloğu içindeki a = 2 satırını da kaldırdık. Programın en başındaki a değişkenini kaldırdığımız için artık bu satıra da ihtiyacımız yok. Onun yerine, quit() adlı bir fonksiyon kullanıyoruz. Siz bu fonksiyonu ilk derslerimizden hatırlıyor olmalısınız. Bu fonksiyon Python’un etkileşimli kabuğundan çıkmamızı sağlıyordu...

while döngüsünü yeni öğrenenlerin en sık yaptığı hatalardan biri, döngüyü sona erdirecek bir koşul belirtmeyi unutmaktır.

Şu örneğe bir bakalım:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

soru = raw_input("Python mu Ruby mi?")

while soru != "Python":
    print "Yanlış cevap!"

Dikkat ederseniz burada da işleçlerimizden birini kullandık. Kullandığımız işleç “eşit değildir” anlamına gelen ”!=” işleci. Ancak burada döngüyü sona erdirecek bir koşul belirlemedik...

Bu programı çalıştırdığımızda sorulan soruya Python cevabı vermezsek, program biz müdahale edene kadar ekrana Yanlış cevap! çıktısını vermeye devam edecek, yani sonsuz bir döngüye girecektir. Çünkü biz Python’a şu komutu vermiş olduk bu kodla:

soru değişkeninin cevabı Python olmadığı müddetçe ekrana ‘Yanlış cevap!’ çıktısını vermeye devam et!

Eğer bu programı durdurmak istiyorsak CTRL+C tuşlarına basmamız gerekir.

Yukarıdaki kodların işletilişini sınırlamak için şöyle bir şey yazabiliriz:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

olcut = 0

soru = raw_input("Python mu Ruby mi?")

while olcut <= 10:
    olcut += 1
    if soru != "Python":
        print "Yanlış cevap!"

Bu kodlar sayesinde, eğer kullanıcının verdiği cevap “Python” değilse, ekrana on kez “Yanlış cevap!” çıktısı verilecektir. Bu kodlar içindeki en önemli satır olcut += 1‘dir. Çünkü bu kod, while döngüsünün her başa dönüşünde olcut değişkeninin değerini 1 artırarak 10’a yaklaştırıyor. Eğer bu satırı yazmazsak, olcut değişkeninin değeri her zaman 0 olmaya devam edecek, bu nedenle de döngümüz sürekli çalışmaya devam edecektir.

Şimdilik while döngüsüne ara verip bu konuda incelememiz gereken ikinci döngümüze geçiyoruz.

for Döngüsü

Python’da en sık kullanılan döngü for döngüsüdür desek abartmış olmayız. Siz de kendi yazdığınız programlarda bu döngüyü bolca kullanacaksınız.

for döngüsünün görevi bir dizi içindeki öğelerin üzerinden tek tek geçmektir. Bu tanım biraz kafa karıştırıcı gelmiş olabilir. O yüzden isterseniz ne demek istediğimizi basit bir örnek üzerinde anlatalım:

>>> for harf in "istihza":
...     print harf
...
i
s
t
i
h
z
a

“istihza” bir karakter dizisidir. for döngüsü, bu dizi içindeki öğelerin üzerinden tek tek geçmemizi sağlıyor. Burada yaptığımız şey şu:

  1. Öncelikle “istihza” karakter dizisinin her bir öğesine “harf” adı veriyoruz. (for harf in "istihza")
  2. Daha sonra da bu harf değişkenlerini tek tek ekrana yazdırıyoruz. (print harf)

for döngüsü bazı durumlarda while döngüsü ile benzer bir işlevi yerine getirir. Mesela yukarıda while döngüsünü anlatırken yazdığımız şu kodu hatırlıyorsunuz:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

a = 0

while a < 100:
    a += 1
    print a

Bu kod yardımıyla ekrana 1’den 100’e kadar olan sayıları yazdırabiliyorduk. Aynı işlemi daha basit bir şekilde for döngüsü (ve range() fonksiyonu) yardımıyla da yapabiliriz:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

for i in range(1, 100):
    print i

Ben burada değişken adı olarak “i” harfini kullandım, siz isterseniz başka bir harf veya kelime de kullanabilirsiniz.

Yukarıdaki Pythonca kod Türkçe’de aşağı yukarı şu anlama gelir: “1- 100 aralığındaki sayıların her birine i adını verdikten sonra ekrana i’nin değerini yazdır!

Dediğimiz gibi, for döngüsü, bir dizi içinde bulunan bütün öğelerin üzerinden tek tek geçilmesini sağlar. Yukarıdaki örnekte de bu döngü 1-100 aralığındaki sayıların her biri üzerinden tek tek geçiyor ve bu öğelerin her birini sırayla “i” olarak adlandırıyor.

for döngüsünün bu özelliğinden yararlanarak bazı ilginç şeyler yapabilirsiniz. Mesela 1-100 arasındaki çift sayıları listelemek istiyor olabilirsiniz:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

for i in range(1, 100):
    if i % 2 == 0:
        print i

Burada yaptığımız şey aslında çok basit. Yukarıdaki kodları Türkçe’ye şöyle çevirebiliriz:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

1-100 aralığındaki sayılara i dersek:
    bu i'ler içinde 2'ye tam bölünenleri:
        ekrana bas!

Aynı şekilde tek sayıları listelemek de mümkün:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

for i in range(1, 100):
    if i % 2 == 1:
        print i

“Eğer bir sayı ikiye bölündüğünde kalan 1 ise o sayı tektir,” kuralından yararlanarak 1-100 arası sayıları süzgeçten geçiriyoruz.

Böylelikle Python’da while ve for döngülerini de öğrenmiş olduk. Bu arada dikkat ettiyseniz, for döngüsü için verdiğimiz ilk örnekte döngü içinde yeni bir fonksiyon kullandık. İsterseniz bu vesileyle biraz da hem döngülerde hem koşullu ifadelerde hem de başka yerlerde karşımıza çıkabilecek faydalı fonksiyonlara ve ifadelere değinelim:

range() fonksiyonu

Önceki bölümde bu fonksiyonla ilgili epey örnek yaptığımız için, artık bu fonksiyonun yabancısı sayılmayız. Bu fonksiyonun ne işe yaradığını gayet iyi biliyoruz. Bu fonksiyon Python’da sayı aralıklarını belirtmemizi sağlar. Zaten İngilizce’de de bu kelime “aralık” anlamına gelir. Mesela:

print range(100)

komutu 0 ile 100 arasındaki sayıları yazdırmamızı sağlar. Dediğimiz gibi, bu range() fonksiyonunu bir önceki bölümde birkaç örnekte kullanmıştık.

Başka bir örnek daha verelim:

print range(100, 200)

komutu 100 ile 200 arasındaki sayıları döker.

Bir örnek daha:

print range(1, 100, 2)

Bu komut ise 1 ile 100 arasındaki sayıları 2’şer 2’şer atlayarak yazdırmamızı sağlar.

Şu ise 100’den 1’e kadar olan sayıları tersten sıralar:

print range(100, 1, -1)

Hemen for döngüsüyle range() fonksiyonunun birlikte kullanıldığı bir örnek verip başka bir fonksiyonu anlatmaya başlayalım:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

for sarki in range (1, 15):
    print sarki, "mumdur"

len() fonksiyonu

Bu fonksiyon, karakter dizilerinin uzunluğunu gösterir. Mesela:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

a = "Afyonkarahisar"
print len(a)

Bu kod, Afyonkarahisar karakter dizisi içindeki harflerin sayısını ekrana dökecektir.

Bu fonksiyonu nerelerde kullanabiliriz? Mesela yazdığınız bir programa kullanıcıların giriş yapabilmesi için parola belirlemelerini istiyorsunuz. Seçilecek parolaların uzunluğunu sınırlamak istiyorsanız bu fonksiyondan yararlanabilirsiniz. Hemen örnek bir kod yazalım:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

a = raw_input("Lütfen bir parola belirleyin: ")

if len(a) >= 6:
    print "Parola 5 karakteri geçmemeli!"

else:
    print "Parolanız etkinleştirilmiştir."

len() fonksiyonunu yalnızca karakter dizileri ile birlikte kullandığımıza dikkat edin. İlerde bu fonksiyonu başka veri tipleri ile birlikte kullanmayı da öğreneceğiz. Ancak henüz o veri tiplerini görmedik. Dolayısıyla şimdilik bu fonksiyonun karakter dizileriyle birlikte kullanılabildiğini, ama sayılarla birlikte kullanılamadığını bilmemiz yeterli olacaktır. Yani şöyle bir örnek bizi hüsrana uğratır:

>>> sayi = 123456
>>> len(sayi)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Burada gördüğümüz hata mesajı bize, tamsayı veri tipinin len() fonksiyonu ile birlikte kullanılamayacağını söylüyor. Ama şöyle yaparsak olur:

>>> kardiz = "123456"
>>> len(kardiz)

6

123456 sayısını tırnak içine alarak bunu bir karakter dizisi haline getirdiğimiz için len() fonksiyonu görevini yerine getirecektir.

break deyimi

break deyimi döngü içinde bir noktada programı sona erdirmek gerektiği zaman kullanılır. Aşağıdaki örnek break deyiminin ne işe yaradığını açıkça gösteriyor:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

kullanici_adi = "kullanici"
parola = "parola"

while True:
    soru1 = raw_input("Kullanıcı adı: ")
    soru2 = raw_input("Parola: ")

    if soru1 == kullanici_adi and soru2 == parola:
        print "Kullanıcı adı ve parolanız onaylandı."
        break

    else:
        print "Kullanıcı adınız veya parolanız yanlış."
        print "Lütfen tekrar deneyiniz!"

Bu programda break deyimi yardımıyla, kullanıcı adı ve parola doğru girildiğinde parola sorma işleminin durdurulması sağlanıyor. Yukarıdaki kodlar arasında, dikkat ederseniz, daha önce bahsettiğimiz işleçlerden birini daha kullandık. Kullandığımız bu işleç, “ve” anlamına gelen and işleci. Bu işlecin geçtiği satıra tekrar bakalım:

if soru1 == kullanici_adi and soru2 == parola:
    print "Kullanıcı adı ve parolanız onaylandı."

Burada şu Türkçe ifadeyi Python’caya çevirmiş olduk: “Eğer soru1 değişkeninin değeri kullanici_adi değişkeniyle; soru2 değişkeninin değeri de parola değişkeniyle aynı ise ekrana ‘Kullanıcı adı ve parolanız onaylandı,’ cümlesini yazdır!

Burada dikkat edilmesi gereken nokta şu: and işlecinin birbirine bağladığı soru1 ve soru2 değişkenlerinin ancak ikisi birden doğruysa o bahsedilen cümle ekrana yazdırılacaktır. Yani kullanıcı adı ve paroladan biri yanlışsa if deyiminin gerektirdiği koşul yerine gelmemiş olacaktır. Okulda mantık dersi almış olanlar bu and işlecini yakından tanıyor olmalılar. and işlecinin karşıtı or işlecidir. Bu işleç Türkçe’de “veya” anlamına gelir. Buna göre, “a veya b doğru ise” dediğiniz zaman, bu a veya b ifadelerinden birinin doğru olması yetecektir. Şayet “a ve b doğru ise” derseniz, burada hem a hem de b doğru olmalıdır.

continue deyimi

Bu deyim ise döngü içinde kendisinden sonra gelen her şeyin es geçilip döngünün en başına dönülmesini sağlar. Çok bilindik bir örnek verelim:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

while True:
    s = raw_input("Bir sayı girin: ")

    if s == "iptal":
        break

    if len(s) <= 3:
        continue

    print "En fazla üç haneli bir sayı girin."

Burada eğer kullanıcı klavyede iptal yazarsa programdan çıkılacaktır. Bunu,

if s == "iptal":
    break

satırıyla sağlamayı başardık.

Eğer kullanıcı tarafından girilen sayı üç haneli veya daha az haneli bir sayı ise, continue deyiminin etkisiyle:

print "En fazla üç haneli bir sayı girin."

satırı es geçilecek ve döngünün en başına dönülecektir.

Eğer kullanıcının girdiği sayıdaki hane üçten fazlaysa ekrana En fazla üç haneli bir sayı girin. cümlesi yazdırılacaktır.

Bölüm Soruları

1. Daha önce yazdığımız basit hesap makinesini, while döngüsü yardımıyla sürekli çalışabilecek hale getirin.

2. Bu bölümde birleşik işleçlere de değindik. Mesela a += 1 ifadesinde bu birleşik işleçlerden biri olan +=‘i kullandık. Gördüğünüz gibi, birleşik işleçler; bir adet aritmetik işleç (+) ve bir adet de atama işlecinden (=) oluşuyor. Birleşik işleçlerde aritmetik işleç atama işlecinden önce geliyor. Peki sizce işleçler neden böyle sıralanmış. Yani neden a =+ 1 denmemiş?

3. 1-10 arası bütün çift sayıların karesini hesaplayan bir program yazın.

4. Kullanıcıyla sayı tahmin oyunu oynayan bir Python programı yazın. Programda sabit bir sayı belirleyin ve kullanıcıdan bu sayıyı tahmin etmesini isteyin. Kullanıcının girdiği sayılara göre, “yukarı” ve “aşağı” gibi ifadelerle kullanıcıyı doğru sayıya yöneltin.

5. Kullanıcıyla sohbet eden bir program yazın. Yazdığınız bu program kullanıcının verdiği cevaplara göre tavır değiştirebilmeli. Örneğin başlangıç olarak kullanıcıya nereli olduğunu sorabilir, vereceği cevaba göre sohbeti ilerletebilirsiniz.

6. Eğer siz bir GNU/Linux kullanıcısıysanız, “Hangi dağıtım benim ihtiyaçlarıma uygun?” sorusuna cevap veren bir program yazın. Bunun için kullanıcıya bazı sorular sorun. Mesela “Bilgisayarınızın RAM miktarı nedir?”, “Depolardaki program sayısı sizin için önem taşır mı?” gibi... Aldığınız cevaplara göre, kullanıcıya önerilerde bulunun. Alternatif olarak, kullanıcıdan aldığı cevaplara göre, herhangi başka bir konuda öneride bulunan bir program da yazabilirsiniz.

7. Eğer siz bir Windows kullanıcısıysanız, “Windows 7’ye mi geçmeliyim?” sorusuna cevap veren bir program yazın. Yazdığınız programda kullanıcıya hız, uyumluluk, yenilik gibi konularla ilgili sorular sorun. Aldığınız cevaplara göre kullanıcıyı yönlendirin. Alternatif olarak, kullanıcıdan aldığı cevaplara göre, herhangi başka bir konuda öneride bulunan bir program da yazabilirsiniz.