-
fordöngüsünü işlerkenfor<değişken>in<obje>yapısında, her iterasyondadeğişkenin tek tekobjenin elemanlarına eşit olduğunu konuşmuştuk -
list,tuple,dictionarynon-scalar veri tiplerini gördük ve bunların hepsinin içsel bir yapısı var, şimdi bunların elemanlarındaforkullanarak iterasyon yapmaya bakalım
- Diyelim ki öğrencilerin notlarını bir listede tutuyoruz:
notlar = [90,72,81,77]for e in notlar:
print(e)90
72
81
77
- Bu sınıftaki not ortalamasına bakmak istiyor olabilirim:
t = 0
for e in notlar:
t += e
ortalama = t / len(notlar)
print(ortalama)80.0
- Burada
enin özel bir anlamı yok, sadece döngünün içinde onu kullanırken o adla referans veriyorum, adıpenguende olabilirdi
t = 0
for penguen in notlar:
t += penguen
ortalama = t / len(notlar)
print("Ortalama:",ortalama)Ortalama: 80.0
-
Bunun aynısını range() fonksiyonu ile de yapabilirdik
-
for e in notlardiyince ilk iterasyondaenin değeri 90, ikincisinde 72... olarak devam etti -
range()ile indexlerde iterasyon yapıp indexing ile değerlerine de ulaşabilirdim (range belirli bir listenin indexlerinde iterasyon yapmamı sağlamıyor, range(len(notlar)) diyince bize0,1,2.. len(notlar)-1sayılarını verecek, bunlar da listenin indexleriyle örtüşüyor, yoksarange()index verir diye bir şey yok)
for i in range(4):
print("Iteration: ", i)Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
t = 0
for i in range(len(notlar)):
t += notlar[i]
ortalama = t / len(notlar)
print("Ortalama:",ortalama)Ortalama: 80.0
- Diyelim ki öğretmen farketti ki herkese 5 puan az vermiş, herkesin puanını 5 arttırmak istiyor, bunu direkt listenin elemanlarında iterasyon yaparak yapamam. Listenin indexlerine erişip o değeri güncellemem lazım
notlar[90, 72, 81, 77]
for e in notlar:
print(e)90
72
81
77
- Buradaki
esadecenotların içindeki değerler,eyi değiştirmek listenin elemanlarını değiştirmez!
for e in notlar:
print(e)
e = e + 10
print(e)
print(notlar)
print("--------------")
print(notlar)90
100
[90, 72, 81, 77]
--------------
72
82
[90, 72, 81, 77]
--------------
81
91
[90, 72, 81, 77]
--------------
77
87
[90, 72, 81, 77]
--------------
[90, 72, 81, 77]
- Güncelleme mantığını range() ile indexlerinde iterasyon yaparak yapacağım.
for i in range(len(notlar)):
notlar[i] += 5notlar[95, 77, 86, 82]
- Hadi biraz da
continuemantığının alıştırmasını yapmış olalım. Diyelim ki öğretmen 2. öğrencinin kağıdını doğru okumuş, 2. öğrenci (index 1'deki) hariç hepsinin değerini 5 arttıracak
notlar = [90,72,81,77]for i in range(len(notlar)):
if i == 1:
continue
notlar[i] += 5
print(notlar)[95, 72, 86, 82]
-
Şimdi de
breakegzersizi: -
Diyelim ki bir listenin içinde belirli bir eleman var mı diye kontrol etmek istiyoruz. Bulunca aramaya devam etmeyeceğim. Devam etme mantığını
breakile sağlayacağım -
İlk kullanıcıya hangi sayısı aradığını soracağız, sonra bu sayı var mı kontrol edeceğiz
x = int(input("Hangi sayıyı kontrol edeyim?:"))
l = [2,3,40,100,10,1]
for e in l:
print(e) # iterasyon break ile çıkmış mı görelim mi diye
if e == x:
print("Buldum!!")
breakHangi sayıyı kontrol edeyim?:100
2
3
40
100
Buldum!!
- Listelerde iterasyondan hiç bir farkı yok. Evet kısa bir açıklama oldu ama durum bu :D Değerlerini güncelleyemiyoruz ama bu zaten döngüden bağımsız bir durum 🤔
t = (1,2,3,4)for e in t:
print(e)1
2
3
4
toplam = 0
for e in t:
toplam += e
print(toplam)10
for i in range(len(t)):
print(t[i])1
2
3
4
for i in range(len(t)):
t[i] += 2---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-37-51c8ededb856> in <module>
1 for i in range(len(t)):
----> 2 t[i] += 2
TypeError: 'tuple' object does not support item assignment
- Burada durum biraz farklı. Default olarak elemanlarında dolaş diyince
keylerde iterasyon yapıyor. Zaten index mantığı olmadığı için range() ile yapmak çoğu zaman karşımıza çıkmaz
d = {"student_1": [90,89], "student_2": [80,83], "student_3": [72,71]}for k in d:
print(k)student_1
student_2
student_3
- Değerlerine ulaşmak istiyorsam şöyle yapabilirdim:
for k in d:
v = d[k]
print(v)[90, 89]
[80, 83]
[72, 71]
-
Veya d.values() diyerek value'larında iterasyon yapabilirim. Burada
for<değişken>in<obje>yapısında<değişken>int vs gibi şeyler değil liste gibi yapılar da olabilir iterasyon içerisinde, burada da öyle oldu -
bu .values() dan dolayı olan bir şey değil, dictionary'nin value'ları int olsa böyle olmazdı
d = {"student_1": 90, "student_2": 80, "student_3": 72}for v in d.values():
print(v)90
80
72
d = {"student_1": [90,89], "student_2": [80,83], "student_3": [72,71]}for v in d.values():
print(v)[90, 89]
[80, 83]
[72, 71]
-
Burada
v, her iterasyondaint -
85'den fazla alan biri var mı diye bakmak istiyorum diyelim, ve bunun kim olduğunu (olduklarını) bulmak istiyorum:
d = {"student_1": 90, "student_2": 80, "student_3": 72}for k in d:
value = d[k]
if value > 85:
print(k)student_1
-
Aynı anda hem
keyhem devalue'larda iterasyon yapmak için: -
Variable unpacking konusunda bir tuple, liste gibi yapıların değerlerini birden çok değişkene bir seferde eşitlemeyi görmüştük
-
Bunun aynısını iterasyonda da yapabiliriz
for k,v in d.items():
print("key değeri:", k, "value değeri:", v)key değeri: student_1 value değeri: 90
key değeri: student_2 value değeri: 80
key değeri: student_3 value değeri: 72