30 Nisan 2013 Salı

Döngüler

Döngüler kolaylığı ve sürekliliği sağlamak için vardırlar. 
while döngüsü, yazdığımız bir program tamamlanana kadar programın kapanmasına engel olur ve kod dizisinin döngünün başındaki koşul sağlanana kadar dönmesini sağlar.
Örnek verecek olursak:
Sayi=1
while Sayi<10:
         Sayi=Sayi+1
         print Sayi
Bu küçük kod parçacığı 1 den  9 a kadar olan sayıları  ekrana yazdırır.

For Döngüsü:
Kullanımına en alışık olduğumuz döngülerden biridir for döngüsü. Başka programda kod yazan kişiler bilirler ki for döngüsünün görevi bir dizi içindeki ögeleri denetlemektir.
Örnek verecek olursak:

for harf in “Damla-Umut”:
    print harf


Bu programda öncelikle bir karakter dizisine (bizim programımızda Damla-Umut)  harf adını bütün öğelerine ad olarak atadık. Daha sonra bildiğiniz üzre print komutuyla bu harfleri ekrana tek tek yazdırdık.

Peki while döngüsünde yazdığımız kodu for döngüsüne nasıl çeviririz? Bunu yapabilmemiz için for döngüsünün yanında range() fonksiyonunu da kullanmamız gerekir.

for Sayi in range(1, 10):
print Sayi


range() Fonksiyonu:

Bu fonksiyon sayesinde sayı aralıkları belirtebiliriz.

print range(1,10)

bu kod parçacığı bir önceki for döngüsünde yazdığımız kod parçacığıyla aynı işlevi görür. Yani 1 den 10 a kadar aralıkta olan sayıları ekrana yazdırır. Bu kod parçacığının bir kolaylığı vardır buda ‘0’ için geçerlidir. Bir programda ‘0’ dan istediğimiz bir sayıya kadar bütün sayıları ekrana yazdırmak istiyorsak sadece: print range(10) yazmamız yeterlidir. Bu kod parçacığı 0 ile 10 arasındaki bütün sayıların ekrana yazılmasını sağlayacaktır.Peki biz ekrana sayıları 1’er 1’er değilde 5’er 5’er arttırarak yazmak istesek bunu range() fonksiyonuyla nasıl yazarız. print range(25, 125, 5)


len() fonksiyonu:
Bu bir gömülü fonksiyon(Built-in Function)’dur. Karakter dizilerinin uzunluğunu anlamamızı sağlar.

Karakter=”Damla-Umut”
print len(Karakter)

Bu kod parçacığı yazdığımız karakterin harf sayısını ekrana yazacaktır. Yani ekran çıktımız 11 olacaktır.

break deyimi:
Bildiğiniz üzere break deyimi programı sonlandırmaya yarar.

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 ve ya parolanız yanlış."
print "Lütfen tekrar deneyiniz!"

Bu kod parçacığında while döngüsüne de örnek vermiş olduk. Kodumuzdaki ilk if parçacığının eğer şartı onaylanırsa ekran çıktısı yazıldıktan sonra break ile programdan çıkış yapılır. Ve if parçacığının içindeki koşul sağlanana kadar while döngüsü sayesinde program başa dönmeye devam eder.

continue:
Bu döngüde kendinden sonra gelen kod satırlarının görülmeden programa baştan başlanmasını sağlar.
for num in range(2, 10):
	if num % 2 == 0:
		print "Çift sayı:", num
		continue
	print "Tek sayı:", num

Bu kod parçacığında range() fonksiyonundan hatırladığımız üzere 2 den 10 a kadar olan sayıların teker teker tek ve çift olan sayılarını bulur. Ve çıktı olarak ekrana “Çift sayı:2” yazdıktan sonra continue komutu sayesinde “Tek sayı:” yazmadan programın başına gider.

24 yorum :

  1. "len() fonksiyonu:

    Bu bir gömülü fonksiyon(Built-in Function)’dur. Karakter dizilerinin uzunluğunu anlamamızı sağlar.




    Karakter=”Damla-Umut”

    print len(Karakter)




    Bu kod parçacığı yazdığımız karakterin harf sayısını ekrana yazacaktır. Yani ekran çıktımız 11 olacaktır."

    Demişsiniz ancak yanlış saymadıysam 10 karakter var ?


    YanıtlaSil
    Yanıtlar
    1. boşluk da bir karakterdir o nedenle 11

      Sil
  2. Dediğiniz gibi çıktıda 10 olacaktır. Yazarın dikkatsizliğine gelmiş olmalı.

    YanıtlaSil
  3. Bir sorun var sanırım anlamadım.
    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 ve ya parolanız yanlış."
    print "Lütfen tekrar deneyiniz!"

    python dosyasını çalıştırınca ortaya soru1 syntax error veriyor hata sebebi nedir ?

    YanıtlaSil
    Yanıtlar
    1. Boşluklara dikkat ediniz

      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 ve ya parolanız yanlış."
      print "Lütfen tekrar deneyiniz!"

      Sil
    2. Bazı bölümlere parantez eklemelisin örnek programlari incele.

      Sil
  4. #_*_ utf-8 _*_
    sayi = input("sayı giriniz")


    while sayi < 4 or sayi >0:
    if sayi == 1:
    print("pazartesi")
    if sayi == 2:
    print("salı")
    if sayi == 3:
    print("çarşamda")
    elif sayi < 1:
    print("yanlış girdi")
    elif sayi > 3:
    print("yanlış girdi")

    hangi sayıya basarsam basyım sonsuz döngüye giryor tabi break komutuyla bunu durdurabilyorum ama amacım sayıya karsılık gelen günü yazdıktan sonra programın başa sarması bunu yapmanın yolu nedir."c" den aklımda kalan bir "return" komutu var ama burya nasıl entegre edecegimi bilemedim yardımcı olursanız sevinirim teşekkürler.

    YanıtlaSil
  5. Eğer programınızın başına
    #-*- coding:utf-8 -*-

    ifadesini yazmadıysanız Türkçe karakter hatası alıyor olabilirsiniz.

    YanıtlaSil
  6. while sayi < 4 or sayi >0: ifadesinde or kullanıdığınız için koşul her zaman sağlanıyor.
    Or değilde and kullanırsanız sorun muhtemelen ortadan kalkacaktır.

    YanıtlaSil
  7. anlatımda 1'den 9'a kadar değilde 2 dahile 10'a akadar olmalıydı 10'da dahil. belkş arkadaşlardan aklı karışan olmuştur arkadaşlar.

    YanıtlaSil
    Yanıtlar
    1. aynen katılıyorum. ama neden 10 olduğunu anlamadım while sorgusunun içinde <10 var, <=10 yok. dolayısıyla 9 a kadar basması gerekmezmiydi

      Sil
    2. Sayi=1 olarak başlatıldığı için...

      Sil
  8. Merhaba, Break için dış bir loop oluşturduğuna dair hata alıyorum sebebi ne olabilir ?

    [e-diablo@homless tmp]$ python 1.py
    File "1.py", line 10
    break
    SyntaxError: 'break' outside loop

    Boşluklarda bir sorun yok her komut ana komutundan dört sütün sonra ama break için yukarıdaki hatayı veriyor.

    YanıtlaSil
  9. Sonunda buldum, doğrusu alttaki gibi.

    http://i.hizliresim.com/vYdDor.png

    YanıtlaSil
    Yanıtlar
    1. Neden olmuyor diye kafayı yemiştim bende.Teşkkürler.

      Sil
    2. Eyvallah bro

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


    for num in range(2,11):
    if num == 2:
    print"Sayi asal: ",num
    elif num%2 == 0:
    print"Sayi asal degil: ",num
    if num == 3:
    print"Sayi asal: ",num
    elif num%3 == 0:
    print"Sayi asal degil: ",num
    else:
    print"Sayi asal: ",num

    Asal sayıları buldurtan programı yazmaya calısıyorum ama else komutu garıp bır sekılde sunu yapıyor aldıgım sonuc bu:
    >>>
    Sayi asal: 2
    Sayi asal: 2
    Sayi asal: 3
    Sayi asal degil: 4
    Sayi asal: 4
    Sayi asal: 5
    Sayi asal degil: 6
    Sayi asal degil: 6
    Sayi asal: 7
    Sayi asal degil: 8
    Sayi asal: 8
    Sayi asal degil: 9
    Sayi asal degil: 10
    Sayi asal: 10
    >>>
    Yardımcı olursanız cok sevınırım

    YanıtlaSil
    Yanıtlar
    1. Yazdığınız program asal sayıları değil 2 ve 3'e tam bölünmeyen sayıları buluyor. Öncelikle asal sayı mantığını tam olarak kavramanızda fayda var. Şöyle bir mantık kullanarak sayının asal olup olmadığını bulmanız mümkün. Sayıyı 2'den başlayıp kendinden önceki sayılara böldürmeyi deneyin. Herhangi birine bölünürse sayı zaten asal değildir. Kodunu da yazıverin bir zahmet ;)

      Sil
  11. Bu anlatım konular önemli oldugu halde çok üstünkörü ve birer örnekle geçmiş.. Önceki derslerde yazan arkadaşlardan biri bu konuları tekrar açıklarsa daha iyi olurdu.. :/

    YanıtlaSil
  12. 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 ve ya parolanız yanlış."
    print "Lütfen tekrar deneyiniz!




    Boşluk kurallarını anlamadım hata veriyor sürekli

    YanıtlaSil
  13. Python kodları girintilere göre yorumlanır. Bundan dolayı yazdığınız kod içerisinde eğer for, if gibi bir kod bloğu içerisine girecekseniz. Tab ile girinti oluşturmalısınız.
    if a > b:
    [TAB]print "a büyüktür b den "

    YanıtlaSil
  14. # !/usr/bin/env python2
    # -*- coding: utf-8 -*-

    x=1
    while True:
    print ("Toplamı 5 olacak iki sayı giriniz")
    sayi1 = raw_input("İlk sayı : ")
    sayi2 = raw_input("İkinci sayı :")
    if sayi1 == 1 and sayi2 == 4:
    print ("Girdiğiniz sayılar doğru!")
    elif sayi1 == 2 and sayi2 == 3:
    print ("Girdiğiniz sayılar doğru!")
    elif sayi1 == 3 and sayi2 == 2:
    print ("Girdiğiniz sayılar doğru!")
    elif sayi1 == 4 and sayi2 == 1:
    print ("Girdiğiniz sayılar doğru!")
    elif sayi1 == 0 and sayi2 == 5:
    print ("Girdiğiniz sayılar doğru!")
    elif sayi1 == 5 and sayi2 == 0:
    print ("Girdiğiniz sayılar doğru!")
    break
    else:
    print ("Girdiğin sayılar yanlış.\n Şimdi tekrar dene : ")


    Kodunu girdiğimde bana bu hatayı veriyor :

    http://i.hizliresim.com/J4OaOQ.png

    YanıtlaSil
  15. if soru1 == kullanici_adi and soru2 == parola: soru bir ve ikinin doğrularında hata veriyor doğru yaptığıma da eminim

    YanıtlaSil