[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-python-donguleri-for-ve-while-ile-etkili-ornekler":3},{"dataItem":4,"heading":36,"metaData":38,"schema":81},["Reactive",5],{"id":6,"title":7,"summary":8,"content":9,"seo_title":10,"seo_description":11,"seo_keywords":12,"slug":13,"createdAt":14,"updatedAt":14,"blog_categories":15,"authors":19,"image":24,"thumb":25,"image_webp":26,"thumb_webp":27,"rating":28,"heading_title":7,"heading_sub_title":17,"readingTime":29,"url":34,"comments":35,"meta_cover":24},20959,"Python Döngüleri: For ve While ile Etkili Örnekler","Bu rehber, Python’daki for ve while döngülerini günlük kullanım senaryolarıyla açıklar. range() ve enumerate() ile indeksli iterasyon, break/continue akışı ve for/while ile kullanılan else bloğunun ne zaman çalıştığı gibi kritik nüansları kısa, uygulanabilir Python kod snippetleriyle öğrenirsiniz.","\u003Ch2>Python döngülerini doğru zihniyetle öğrenin\u003C/h2>\n\u003Cp>Python’da döngüler denince iki ana yapı öne çıkar: \u003Cstrong>for\u003C/strong> ve \u003Cstrong>while\u003C/strong>. Yeni başlayanların sık yaptığı hata, \u003Cem>for\u003C/em> döngüsünü “sayısal sayaçla dönen C tarzı döngü” gibi düşünmektir. Python’daki \u003Cstrong>for\u003C/strong> döngüsü, temelde bir \u003Cstrong>iterable\u003C/strong> (liste, string, range, generator vb.) üzerinde sırayla ilerleyen bir “foreach” yaklaşımıdır. Bu davranış, Python resmi öğreticisinde açıkça anlatılır.\u003C/p>\n\u003Cp>Bu yazıda şu hedefle ilerleyeceğiz: \u003Cstrong>günlük işlerde hemen kullanabileceğiniz python kod snippetleri\u003C/strong> ile hem for/while temellerini hem de pratikte fark yaratan \u003Cstrong>range\u003C/strong>, \u003Cstrong>enumerate\u003C/strong>, \u003Cstrong>break/continue\u003C/strong> ve \u003Cstrong>loop-else\u003C/strong> (döngü-else) davranışını netleştirmek.\u003C/p>\n\u003Chr>\n\u003Ch2>for döngüsü: “iterable” üzerinde güvenli ve okunabilir iterasyon\u003C/h2>\n\u003Cp>Python’da \u003Cstrong>for\u003C/strong>, bir iterable’dan her adımda bir öğe alır. Liste, demet (tuple), sözlük, string veya \u003Ca href=\"https://docs.python.org/3/library/stdtypes.html#range\">range\u003C/a> gibi yapılar bu kapsama girer. Temel şablon:\u003C/p>\n\u003Cblockquote>for item in iterable:\u003Cbr>    # item ile çalış\u003C/blockquote>\n\u003Ch3>Örnek 1: Liste üzerinde dolaşmak\u003C/h3>\n\u003Cblockquote>names = [\"Ada\", \"Linus\", \"Grace\"]\u003Cbr>\u003Cbr>for name in names:\u003Cbr>    print(\"Merhaba,\", name)\u003C/blockquote>\n\u003Cp>Bu tarz kullanım, indeks yönetimini sizin yerinize Python’un yapmasına izin verdiği için genellikle daha okunabilir olur.\u003C/p>\n\u003Ch3>Örnek 2: String bir iterable’dır\u003C/h3>\n\u003Cblockquote>word = \"python\"\u003Cbr>\u003Cbr>for ch in word:\u003Cbr>    print(ch)\u003C/blockquote>\n\u003Cp>String karakter karakter dolaşılabilir; bu da metin işleme görevlerinde for döngüsünü çok pratik kılar.\u003C/p>\n\u003Chr>\n\u003Ch2>range(): ardışık sayılar için “liste değil”, range nesnesi\u003C/h2>\n\u003Cp>Sayısal aralıklarla döngü kurmak istediğinizde çoğu zaman \u003Cstrong>range()\u003C/strong> kullanırsınız. Python 3’te \u003Cstrong>range()\u003C/strong> bir liste üretmez; iterasyon için verimli bir \u003Cstrong>range nesnesi\u003C/strong> sağlar. Bu davranış hem öğreticide hem de standart tipler dokümantasyonunda açıklanır: \u003Ca href=\"https://docs.python.org/3/tutorial/controlflow.html\">Python Tutorial – Control Flow Tools\u003C/a> ve \u003Ca href=\"https://docs.python.org/3/library/stdtypes.html#range\">Built-in Types – range\u003C/a>.\u003C/p>\n\u003Ch3>range() hızlı referans\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>range(stop)\u003C/strong>: 0’dan stop’a (hariç) kadar\u003C/li>\n\u003Cli>\u003Cstrong>range(start, stop)\u003C/strong>: start’tan stop’a (hariç) kadar\u003C/li>\n\u003Cli>\u003Cstrong>range(start, stop, step)\u003C/strong>: adım (step) ile ilerler\u003C/li>\n\u003C/ul>\n\u003Ch3>Örnek 3: 0–4 arası sayılar\u003C/h3>\n\u003Cblockquote>for i in range(5):\u003Cbr>    print(i)\u003C/blockquote>\n\u003Ch3>Örnek 4: Start/stop/step kullanımı\u003C/h3>\n\u003Cblockquote>for i in range(2, 10, 2):\u003Cbr>    print(i)\u003C/blockquote>\n\u003Cp>\u003Cem>Not:\u003C/em> Negatif adım da kullanılabilir. Örneğin tersten saymak için step’i negatif verirsiniz.\u003C/p>\n\u003Ch3>Örnek 5: “N kez tekrar et” kalıbı\u003C/h3>\n\u003Cblockquote>for _ in range(3):\u003Cbr>    print(\"Tekrar\")\u003C/blockquote>\n\u003Cp>Burada \u003Cstrong>_\u003C/strong> değişkeni, değerin kullanılmadığını ifade eden yaygın bir konvansiyondur.\u003C/p>\n\u003Chr>\n\u003Ch2>enumerate(): indeks + değer ihtiyacı için temiz yaklaşım\u003C/h2>\n\u003Cp>Bir koleksiyon üzerinde dolaşırken hem \u003Cstrong>indeksi\u003C/strong> hem de \u003Cstrong>öğeyi\u003C/strong> istiyorsanız, çoğu zaman \u003Cstrong>enumerate()\u003C/strong> en anlaşılır çözümdür. Resmi tanımı için: \u003Ca href=\"https://docs.python.org/3/library/functions.html#enumerate\">Built-in Functions – enumerate()\u003C/a>.\u003C/p>\n\u003Cp>Genellikle şu kalıp tercih edilir:\u003C/p>\n\u003Cblockquote>for index, value in enumerate(iterable, start=0):\u003Cbr>    ...\u003C/blockquote>\n\u003Ch3>Örnek 6: Listeyi indeksleriyle yazdırmak\u003C/h3>\n\u003Cblockquote>colors = [\"red\", \"green\", \"blue\"]\u003Cbr>\u003Cbr>for i, c in enumerate(colors):\u003Cbr>    print(i, c)\u003C/blockquote>\n\u003Ch3>Örnek 7: 1’den başlayan indeksleme\u003C/h3>\n\u003Cblockquote>colors = [\"red\", \"green\", \"blue\"]\u003Cbr>\u003Cbr>for i, c in enumerate(colors, start=1):\u003Cbr>    print(f\"{i}. renk: {c}\")\u003C/blockquote>\n\u003Cp>\u003Cstrong>Neden enumerate?\u003C/strong> \u003Cem>range(len(...))\u003C/em> ile de indeks üretilebilir; ancak enumerate hem daha doğrudan bir niyet anlatır hem de “indeks–değer” ikilisini tek yerde toplayarak okunabilirliği artırır. Bu, resmi dokümanların da örneklediği yaygın bir pratiktir.\u003C/p>\n\u003Chr>\n\u003Ch2>while döngüsü: koşul doğru olduğu sürece devam\u003C/h2>\n\u003Cp>\u003Cstrong>while\u003C/strong>, bir koşul \u003Cem>True\u003C/em> olduğu sürece çalışır. Dil düzeyi tanım ve semantik ayrıntılar için Python dil referansı: \u003Ca href=\"https://docs.python.org/3/reference/compound_stmts.html#the-while-statement\">The while statement\u003C/a>.\u003C/p>\n\u003Cp>While genellikle şu durumlarda uygundur:\u003C/p>\n\u003Cul>\n\u003Cli>Kaç kez döneceğiniz \u003Cstrong>önceden bilinmiyorsa\u003C/strong> (ör. kullanıcı girişi, bir koşul sağlanana kadar deneme)\u003C/li>\n\u003Cli>Bir durum makinesi / sürekli kontrol döngüsü gerekiyorsa\u003C/li>\n\u003C/ul>\n\u003Ch3>Örnek 8: Koşul sağlanana kadar tekrar dene\u003C/h3>\n\u003Cblockquote>value = 0\u003Cbr>\u003Cbr>while value &lt; 3:\u003Cbr>    print(\"value:\", value)\u003Cbr>    value += 1\u003C/blockquote>\n\u003Cp>Bu örnek, “koşul doğruyken devam et” mantığını gösterir. Burada güncelleme (\u003Cem>value += 1\u003C/em>) yapılmazsa döngü gereğinden uzun sürebilir; while kullanırken koşulun nasıl sonlanacağını özellikle düşünmek gerekir.\u003C/p>\n\u003Chr>\n\u003Ch2>break ve continue: akışı kontrollü yönetme\u003C/h2>\n\u003Cp>Python’da \u003Cstrong>break\u003C/strong> ve \u003Cstrong>continue\u003C/strong> ile döngü akışını değiştirebilirsiniz. Bu davranışlar Python öğreticisinde örneklerle açıklanır: \u003Ca href=\"https://docs.python.org/3/tutorial/controlflow.html\">More Control Flow Tools\u003C/a>.\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>break\u003C/strong>: En içteki döngüyü hemen bitirir.\u003C/li>\n\u003Cli>\u003Cstrong>continue\u003C/strong>: O iterasyonun kalanını atlar, bir sonraki iterasyona geçer.\u003C/li>\n\u003C/ul>\n\u003Ch3>Örnek 9: break ile arama yapma\u003C/h3>\n\u003Cblockquote>numbers = [3, 7, 2, 9, 5]\u003Cbr>target = 9\u003Cbr>\u003Cbr>for n in numbers:\u003Cbr>    if n == target:\u003Cbr>        print(\"Bulundu:\", n)\u003Cbr>        break\u003Cbr>    print(\"Kontrol edilen:\", n)\u003C/blockquote>\n\u003Ch3>Örnek 10: continue ile filtreleme\u003C/h3>\n\u003Cblockquote>numbers = [1, 2, 3, 4, 5, 6]\u003Cbr>\u003Cbr>for n in numbers:\u003Cbr>    if n % 2 == 1:\u003Cbr>        continue\u003Cbr>    print(\"Çift:\", n)\u003C/blockquote>\n\u003Cp>Bu yaklaşım, iç içe if bloklarını azaltarak okunabilirliği artırabilir.\u003C/p>\n\u003Chr>\n\u003Ch2>Döngüde else: “break olmadıysa çalışır” nüansı\u003C/h2>\n\u003Cp>Python’da hem \u003Cstrong>for\u003C/strong> hem de \u003Cstrong>while\u003C/strong> ile birlikte bir \u003Cstrong>else\u003C/strong> bloğu kullanılabilir. Kritik kural şudur: \u003Cstrong>else bloğu, döngü break ile sonlandırılmadıysa çalışır\u003C/strong>. Bu özellik resmi öğreticide özellikle belirtilir: \u003Ca href=\"https://docs.python.org/3/tutorial/controlflow.html\">Control Flow Tools\u003C/a>.\u003C/p>\n\u003Ch3>Örnek 11: Arama + loop-else\u003C/h3>\n\u003Cblockquote>numbers = [4, 8, 15, 16, 23, 42]\u003Cbr>target = 99\u003Cbr>\u003Cbr>for n in numbers:\u003Cbr>    if n == target:\u003Cbr>        print(\"Bulundu:\", n)\u003Cbr>        break\u003Cbr>else:\u003Cbr>    print(\"Listede yok:\", target)\u003C/blockquote>\n\u003Cp>Bu kalıp, “bulunduysa break, bulunmadıysa else” akışını tek bir yerde topladığı için arama senaryolarında oldukça kullanışlıdır.\u003C/p>\n\u003Chr>\n\u003Ch2>for mu while mı? Hızlı karar rehberi\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Elinizde bir iterable varsa\u003C/strong> (liste, dosya satırları, range, generator): çoğu zaman \u003Cstrong>for\u003C/strong> daha doğaldır.\u003C/li>\n\u003Cli>\u003Cstrong>Koşula bağlı tekrar\u003C/strong> gerekiyorsa ve iterasyon sayısı belirsizse: genellikle \u003Cstrong>while\u003C/strong> uygun olur.\u003C/li>\n\u003Cli>\u003Cstrong>İndeks gerekiyorsa\u003C/strong>: önce \u003Cstrong>enumerate()\u003C/strong> düşünün.\u003C/li>\n\u003C/ul>\n\u003Cp>Pratik bir kural: “\u003Cem>Bir şeylerin üzerinden geçiyorum\u003C/em>” diyorsanız for; “\u003Cem>Bir koşul sağlanana kadar deniyorum\u003C/em>” diyorsanız while ile başlayın.\u003C/p>\n\u003Chr>\n\u003Ch2>İyi pratikler: okunabilirlik, doğruluk ve sürdürülebilirlik\u003C/h2>\n\u003Ch3>1) range(len(...)) yerine enumerate() düşünün\u003C/h3>\n\u003Cp>İndeks ihtiyacınız olduğunda enumerate çoğu zaman daha temizdir. \u003Cem>range(len(...))\u003C/em> hâlâ geçerli bir araçtır; ancak niyetinizi daha açık ifade etmek genellikle daha iyi bir varsayılandır.\u003C/p>\n\u003Ch3>2) Döngü içinde çok iş yapıyorsanız, yardımcı fonksiyonlara ayırın\u003C/h3>\n\u003Cp>Döngü gövdesi büyüdükçe test etmek ve okumak zorlaşır. Döngü içinde yapılan işi küçük fonksiyonlara bölmek, hatalı varsayımları daha erken yakalamanıza yardımcı olur.\u003C/p>\n\u003Ch3>3) Performans varsayımı yapmayın; gerekiyorsa ölçün\u003C/h3>\n\u003Cp>Resmi dokümantasyon döngü davranışını iyi açıklar; ancak “şu yapı kesin daha hızlıdır” gibi mikro kıyasların çoğu kullanım bağlamına bağlıdır. Eğer performans sizin için önemliyse, kendi verinizle \u003Cem>timeit\u003C/em> gibi araçlarla ölçüm yapmayı planlayın. Bu yazı, ölçüm yapılmadan kesin performans hükmü vermekten kaçınır.\u003C/p>\n\u003Chr>\n\u003Ch2>Mini kontrol listesi (kopyala–uygula)\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>for\u003C/strong>: Elimde iterable var mı? Varsa for ile başlayın.\u003C/li>\n\u003Cli>\u003Cstrong>range\u003C/strong>: Sayı aralığı mı gerekiyor? range() kullanın; listeye çevirmeye gerek yoksa çevirmeyin.\u003C/li>\n\u003Cli>\u003Cstrong>enumerate\u003C/strong>: İndeks de gerekiyor mu? enumerate(iterable, start=1/0) düşünün.\u003C/li>\n\u003Cli>\u003Cstrong>while\u003C/strong>: Bitiş koşulu net mi? Döngünün nasıl sonlanacağını tasarlayın.\u003C/li>\n\u003Cli>\u003Cstrong>break/continue\u003C/strong>: Akış daha netleşiyor mu? Gereksiz karmaşıklık yaratıyorsa sadeleştirin.\u003C/li>\n\u003Cli>\u003Cstrong>loop-else\u003C/strong>: “break olmadıysa” mantığı işinize yarıyor mu? Arama senaryolarında kullanışlıdır.\u003C/li>\n\u003C/ul>\n\u003Chr>\n\u003Ch2>Kısa kaynaklar (resmi dokümantasyon)\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://docs.python.org/3/tutorial/controlflow.html\">Python Tutorial: More Control Flow Tools\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://docs.python.org/3/reference/compound_stmts.html#the-while-statement\">Python Language Reference: the while statement\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://docs.python.org/3/library/functions.html#enumerate\">Built-in Functions: enumerate()\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://docs.python.org/3/library/stdtypes.html#range\">Built-in Types: range\u003C/a>\u003C/li>\n\u003C/ul>","Python Döngüleri (for/while): range, enumerate, break/else Ö","Python’da for ve while döngülerini pratik kod snippetleriyle öğrenin: range() ve enumerate() kullanımı, break/continue ve döngü-else davranışı, okunabilir örnek","python kod snippetleri, Python döngüleri, for loop, while loop, range, enumerate, break continue, loop else","python-donguleri-for-ve-while-ile-etkili-ornekler","2026-03-07T19:26:03.000Z",{"id":16,"title":17,"slug":18},214,"Python Döngüleri","python-donguleri",{"id":20,"name":21,"nickname":22,"slug":23},93,"Onur Tekin","CodeCraftsman","onur-tekin","/media/blog/1660bde64f1093f53c3841f923a49c02.jpg","/media/blog/1660bde64f1093f53c3841f923a49c02_thumb.jpg","/media/blog/1660bde64f1093f53c3841f923a49c02.webp","/media/blog/1660bde64f1093f53c3841f923a49c02_thumb.webp",null,{"minutes":30,"wordCount":31,"imageCount":32,"formatted":33},5,992,0,"5 dk okuma süresi","/blog/python-donguleri/python-donguleri-for-ve-while-ile-etkili-ornekler",[],["Reactive",37],{"title":7,"subTitle":17,"image":24},["Reactive",39],{"title":10,"meta":40,"link":75},[41,43,45,48,51,54,57,60,63,66,69,71,73],{"hid":42,"name":42,"content":11},"description",{"hid":44,"name":44,"content":12},"keywords",{"hid":46,"name":46,"content":47},"author","Başlangıç Seviyesi Kod & Snippet Rehberi",{"hid":49,"name":49,"content":50},"robots","index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1",{"hid":52,"property":52,"content":53},"og:type","website",{"hid":55,"property":55,"content":56},"og:title","Başlangıç Kod & Snippet Rehberi | KodÖğreniyorum",{"hid":58,"property":58,"content":59},"og:description","Yeni başlayanlara yönelik kısa kod örnekleri, snippet'ler ve adım adım alıştırmalar. Hızlı uygulamalarla temel programlama mantığını pekiştir.",{"hid":61,"property":61,"content":62},"og:image","https://kodogreniyorum.com/media/blog/1660bde64f1093f53c3841f923a49c02.jpg",{"hid":64,"property":64,"content":65},"og:url","https://kodogreniyorum.com/blog/python-donguleri/python-donguleri-for-ve-while-ile-etkili-ornekler",{"hid":67,"name":67,"content":68},"twitter:card","summary_large_image",{"hid":70,"name":70,"content":56},"twitter:title",{"hid":72,"name":72,"content":59},"twitter:description",{"hid":74,"name":74,"content":62},"twitter:image",[76,78],{"rel":77,"href":65},"canonical",{"rel":79,"href":80},"amphtml","https://amp.kodogreniyorum.com/blog/python-donguleri/python-donguleri-for-ve-while-ile-etkili-ornekler",["Reactive",82],{"@context":83,"@graph":84},"https://schema.org",[85,98],{"@type":86,"headline":10,"image":62,"author":87,"publisher":90,"datePublished":14,"dateModified":14,"mainEntityOfPage":96,"description":11},"BlogPosting",{"@type":88,"name":21,"url":89},"Person","https://kodogreniyorum.com/yazarlar/onur-tekin",{"@type":91,"name":47,"logo":92},"Organization",{"@type":93,"url":94,"width":95,"height":95},"ImageObject","https://kodogreniyorum.com/img/icons/favicon.png",32,{"@type":97,"@id":65},"WebPage",{"@type":99,"itemListElement":100},"BreadcrumbList",[101,106,110,113],{"@type":102,"position":103,"name":104,"item":105},"ListItem",1,"Ana Sayfa","https://kodogreniyorum.com",{"@type":102,"position":107,"name":108,"item":109},2,"Blog","https://kodogreniyorum.com/blog",{"@type":102,"position":111,"name":17,"item":112},3,"https://kodogreniyorum.com/blog/python-donguleri",{"@type":102,"position":114,"name":7,"item":65},4]