Pythontr

husonet | Tarih: 18.09.2014

Python For Döngüsü

For Loop döngüleri, Liste veya dizeleri öğeleri üzerinde yineleme olanağı sağlar.

Diziler birden fazla elamanı bir araya getiren adreslerdir. Bir dizi sırasıyla öğlerini işleme koyar ve son öğeye kadar ifade bloğunu işleme koyar.


Ne zaman For Loop döngüsü kullanılmalı.


N defa kod tekrarlanması istenildiğinde döngüler geleneksel olarak kullanılır. Koşul yerine getirildiği sürece döngü devam edecektir.


Akış Diyagramı


 Python for loop
Örnekler
#!/usr/bin/python

for karakter in 'Pythontr': # ilk ornek
print 'harf harf :',karakter

meyveler = ['elma', 'muz', 'portakal', 'mandalina']
for meyve in meyveler: # ikinci ornek
print 'Meyve :', meyve

Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu verir:


harf harf : P
harf harf : y
harf harf : t
harf harf : h
harf harf : o
harf harf : n
harf harf : t
harf harf : r
Meyve : elma
Meyve : muz
Meyve : portakal
Meyve : mandalina


Dizi indexi tarafından yineleme


Bu örnek dizinin elemanlarına erişim için alternatif bir yol izler. Dizin erişimi ofsetine göre yapılır. Aşağıdaki örneğe bakınız.


#!/usr/bin/python

meyveler = ['elma', 'muz', 'portakal', 'mandalina']
for index in range(len(meyveler)):
print 'Su andaki meyve:', meyveler[index]

Yukarıdaki kod yürütüldüğünde aşağıdaki sonucu verir:


Su andaki meyve: elma
Su andaki meyve: muz
Su andaki meyve: portakal
Su andaki meyve: mandalina


Yukarıdaki örneğimizde yineleme işleminin gerçek sırasını range ile toplam dizi sayısını len fonksiyonuyla bularak yapıyoruz.


Döngülerle birlikte else deyimini kullanma


Python döngüler de else kullanımına destekler.
  • Else deyimi for döngüsü ile kullanılması durumunda döngü listesinde ilerlerken tükendiği zaman, else deyimi yürütülür.


  • Else deyimi bir while döngüsü ile kullanılırsa, else ifadesi koşul yanlış olurca yürütülür.


#!/usr/bin/python

for num in range(10,20): # 10 ila 20 arasindaki sayilarii dondur
for i in range(2,num): # sayi faktorlerini yineler
if num%i == 0: # ilk faktoru belirler
j=num/i # ikinci faktoru belirler
print '%d esittir %d * %d' % (num,i,j)
break # Bir sonraki numaraya gecmek icin
else: # else dongunun bir parcasi
print num, ' bir asal sayi'

Yukarıdaki kod yürütüldüğünde aşağıdaki sonucu verir:


10 esittir 2 * 5
11 bir asal sayi
12 esittir 2 * 6
13 bir asal sayi
14 esittir 2 * 7
15 esittir 3 * 5
16 esittir 2 * 8
17 bir asal sayi
18 esittir 2 * 9
19 bir asal sayi


Örneğin 0 den 2 ye kadar devam edecek kod parçacağı yazalım.


for x in range(0, 3):
print "Deger %d" % (x)

Örneğin sonsuza kadar tekrar edecek bir kod yazalım, bu örneğimiz While Loop örneği olsun.


x = 1
while True:
print "Değer %d" % (x)
x += 1

Görüldüğü üzere farklı değerler üzerinde döngülerimizi oluşturabiliriz. Sonsuz döngümüzdeki değerleri yakalayabilmek için aslında büyük değerlerde verebilirdik fakat gereksiz bir işlem olur.


For Loop Nasıl Çalışır?


Döngü şartını sağladığı sürece aktif olarak çalışacaktır son bulması için döngü şartını sağlamaması gerekir.


Python iç içe for döngüsü


Aslında özetle x değeri üzerinde y değerleri erişimi için kullanılır.


range ve xrange

Python'da bir dizi sayı elde etmenin iki yolu vardır: range ve xrange. Genellikle programcılar arasında range daha yaygın bilinir. Fakat xrange fonksiyonu C programlama dili ile yazılmıştır kaynak yönetimi daha iyidir ve uzun listelerde daha hızlı çalışmaktadır. Kısa listelerde range fonksiyonunu tercih edebilirsiniz.


Python For döngüsü örnekleri


İç içe döngüler
for x in xrange(1, 11):
for y in xrange(1, 11):
print '%d * %d = %d' % (x, y, x*y)

Döngüden erken çıkış
for x in xrange(3):
if x == 1:
break

For:Else
for x in xrange(3):
print x
else:
print 'Sonuc x = %d' % (x)

Bir string (Iterable) dizeler
string = "Merhaba Dünya!"
for x in string:
print x

Bir string (Iterable) listesi
collection = ['Merhaba', 5, 'd']
for x in collection:
print x

Listeden liste
list_of_lists = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]
for list in list_of_lists:
for x in list:
print x

Kendi Iterable listesi olusturan bir nesne yazalım
class Iterable(object):

def __init__(self,values):
self.values = values
self.location = 0

def __iter__(self):
return self

def next(self):
if self.location == len(self.values):
raise StopIteration
value = self.values[self.location]
self.location += 1
return value


range ve xrange time testi
import time       

#use time.time() on Linux

start = time.clock()
for x in range(10000000):
pass
stop = time.clock()

print stop - start

start = time.clock()
for x in xrange(10000000):
pass
stop = time.clock()

print stop - start

Küçük listelerde range ve xrange zaman ölçümü


import time            

#use time.time() on Linux

start = time.clock()

for x in range(1000):
pass
stop = time.clock()

print stop-start

start = time.clock()
for x in xrange(1000):
pass
stop = time.clock()

print stop-start


Görüldüğü üzere küçük listelerde range fonksiyonu daha kısa sürüyor.



Kendi range fonksiyonumuzu yazalım
def my_range(start, end, step):
while start <= end:
yield start
start += step

for x in my_range(1, 10, 0.5):
print x


Python While Döngüsü


Kaynak: https://wiki.python.org/moin/ForLoop