Python ile Programlamaya Giris Ders 5 String ile for Döngüsü str degerlerinin elemenlarina, yani karakterlerine, tek tek ulasmanin yolunu gördük. Eger tüm indeksleri birer kez sorgulamak istersek for anahtar kelimesini kullanip for döngüsü kurarak ulasabiliriz. Mesela s degiskeni asagidaki gibi verilsin. >>> s = "Merhaba" for döngüsü kullanarak s degiskenin her bir elemanini ch degiskenine atan bir döngü olusturalim. >> for ch in s: print(ch) M e r h a b a Yukaridaki örnek for döngüsünün en basit halini gösteriyor. for anahtar kelimesinden sonra bir degisken tanimliyoruz. Daha sonra in anahtar kelimesini kullanip bir str degeri veriyoruz. Yukaridaki örnekte bu s degiskenindeki str degeridir. Döngünün içinde bir satirlik print(ch) islemi var. ch degiskeni s degiskenindeki her bir elemani temsil ediyor. "Merhaba" str degerinin 7 elemani oldugu için döngünün içindeki print(ch) fonksiyonu 7 defa farkli ch degerleri için çalisir. ch degiskeninin degeri sirasiyla "M" , "e" , "r" , "h" , "a" , "b" , "a" olacaktir. Asagidaki örnekte gösterilen seslileri_say fonksiyonu verilen str degerinin içindeki sesli harflerin sayisini geri veriyor. def seslileri_say(s): sayac = 0 for ch in s: if ch in "aeıioöuüAEIIOÖUÜ": sayac = sayac + 1 return sayac Bu fonksiyon "Merhaba" _str_degerindeki sesli harfleri bulup, yani "e", "a" ve tekrar "a", sayisini veriyor. >>> seslileri_say(s) 3 Akümülatör Degiskenler Yukaridaki örnekte kulandigimiz sayac degiskenine programlamada akümülatör denir. Akümülatör degiskenler istenilen degerleri toplamak için kullanilir. Yukaridaki örnekte her sesli harf bulundugunda akümülatör bir artiriliyor ve sonunda fonksiyon bu degeri geri veriyor. Akümülatörlerin önemli bir özelligi de her zaman bir baslangiç degerinin olmasidir. Yukaridaki örnekte sayac akümülatör degiskeninin baslangiç degeri sifirdir. Akümülatör degiskenler bildigimiz siradan degiskenlerdir. Sadece bizim bu degiskene üstledigimiz görevinden dolayi özel bir isim almistir. Degiskenin isminin sayac olmasinin özel bir nedeni yoktur. Degiskenin ismi sesli_toplam gibi bir isim de olabilirdi. Akümülatör degiskenler sadece sayaç olarak kullanilmak zorunda degildir. Ayni sekilde bu degiskeni istenilen olaylari biriktirmek için de kullanabiliriz. Mesela yukaridaki örnek verilen str degerinin sesli harflerinin sayisini veriyor. Simdi buna benzer bir fonksiyon daha yazalim. Bu sefer fonksiyon verilen str degerindeki sadece sesli harfleri geri versin. def seslileri_ver(s): sesliler = '' for ch in s: if ch in "aeıioöuüAEIIOÖUÜ": sesliler = sesliler + ch return sesliler Akümülatörümüz sesliler degiskeni ve baslangiç deger bos bir str. Her sesli harf bulundugunda degiskene bulunan sesli harf, yani ch degiskeninde eger bir sesli harf varsa, ekleniyor. >>> seslileri_ver("Merhaba") 'eaa' >>> seslileri_ver("Programlak çok güzel") 'oaaoüe' Asagida verilen örnek ögrendigimiz for döngüsünü ve akümülatör degisken olgusunu kullanarak verilen bir amino asit dizisindeki yine verilen belli amino asitleri seçiyor ve diger amino asitleri çikartarak yeni bir dizi olusturuyor. def amino_asit_sec(fasta, aas): yeni_fasta = '' for amino_asit in fasta: if amino_asit in aas: yeni_fasta = yeni_fasta + amino_asit return yeni_fasta Amino asit dizisi asagidaki gibi verilsin. fasta = "IKDLLVSSSTDLDTTLVLVNAIYFKGMWKTAFNAEDTREMP" fasta degiskeninin her bir elemani bir amino asiti temsil ediyor. Asagidaki örnekte dizideki sadece A, D, V ve K amino asitlerini kullanarak yeni bir dizi temsili olusturabiliriz. >>> amino_asit_sec(fasta, "ADVK") 'KDVDDVVAKKAAD' while Döngüsü Geçen ders for döngüsü ile bir str degerinin elemanlariyla islem yapmayi ögrendik. Döngüler sadece str degerlerinin karakterlerini teker teker islemek için degil, farkli islevleri yerine getirmek için de kullanilir. Bu ders while ile kurulan döngüleri görecegiz. while döngüsüne geçmeden önce if yapisinin en basit haline tekrar kisa bir göz atalim. if <kosul>: <kosul saglanirsa çalistirilacak kisim> if anahtar kelimesi her zaman bir kosul ile beraber kullanilir. Eger verilen kosul saglanirsa if'in altinda ayni sütünda verilen satirlarin hepsi çalistirilir. Daha dogrusu kosul saglanirsa if'in altinda ayni sütünda verilen satirlarin hepsi bir defa çalistirilir. Simdi while döngüsünün yapisina bakalim. while <kosul>: <kosul saglandigi sürece tekrar çalistirilacak kisim> while döngüsü if yapisina çok benzer. if ile kosul saglanirsa bir defa çalistirilir, while ile kosul saglandigi sürece çalistirilir. Mesela num degiskeni asagidaki gibi verilsin. num = 2 num degiskeninin degeri 100 den küçük oldugu sürece num degiskeninin degerini ikiye katlayan program asagidaki gibidir. while num < 100: num = num * 2 print(num) Programin tamami asagida tekrar verilmistir. >>> num = 2 >>> while num < 100: num = num * 2 print(num) 4 8 16 32 64 128 num degiskeninin ilk degeri 2 oldugundan while döngüsü ilk olarak 2 < 100 kosuluna bakar. Iki, yüzden küçük oldugu için altinda verilen ayni sütundaki num = num * 2 ve print(num) satirlari çalistirilir. Daha sonra kosul tekrar kontrol edilir. num degiskeninde bu sefer 4 degeri var. 4 < 100 oldugundan ayni iki satir tekrar çalistirilir ve num degiskeni tekrar degismis olur. Bu döngü num 128 olana kadar devam eder. 128 < 100 kosulunun degeri False oldugundan döngüye tekrar baslanmaz ve program akisina döngüye girmeden devam eder. Alistirma: Eger num degiskeni ilk basta 10 olsaydi while döngüsü kaç defa çalisirdi ve sonunda num degiskenin deger ne olurdu? Alistirma: Eger num degiskeni ilk basta 100 olsaydi ne olurdu? s degiskeni asagidaki gibi verilsin. s = "Merhaba" Daha önce gördügümüz for döngüsü ile str degerinin elemanlarini yazdiran programi hatirlayalim. for ch in s: print(ch) Bu program s 'nin harflerini her satirda bir harf olacak sekilde yaziyordu degil mi? Simdi ayni islemi while döngüsü kullanarak yazalim. Bu sefer indeksi saymak için bir degisken kullanmamiz gerekiyor. i = 0 i degiskenini indeks olarak kullanacagiz. while i < len(s): print(s[i]) i = i + 1 len(s) ifadesi s degiskenindeki str degerinin uzunlugunu veriyor. i indeks olarak kullaniliyor. Yukaridaki döngü buna göre i degiskeni "Merhaba" degerinin uzunlugu olan 7 degerine kadar i = i + 1 ifadesinden dolayi birer birer artiriliyor. while döngülerindeki kosul ifadesinin iyi tanimlanmasi çok önemlidir. Buna bir örnek olarak asagidaki programa bakalim. s = "Merhaba" i = 0 while not (s[i] in "aeıioöuüAEIIOÖUÜ"): print(s[i]) i = i + 1 Bu program s degerindeki ilk sesli harfi bulana geçen harfleri alt alta yaziyor. Yani sadece "M" harfini yazacak ve döngüden çikacaktir çünkü "M"'den sonra "e" sesli harfi geldiginden döngüye tekrar girmeyecektir. Simdi ayni programi s = "xyz" için çalistiralim. >>> s = "xyz" >>> while not (s[i] in "aeıioöuüAEIIOÖUÜ"): print(s[i]) i = i + 1 x y z Traceback (most recent call last): File "<pyshell#121>", line 1, in <module> while not (s[i] in "aeıioöuüAEIIOÖUÜ"): IndexError: string index out of range Program "z" harfinden sonra hata veriyor. Neden? Çünkü i indeksinin deger bir bir artirildigindan dolay i 'nin 3 degeri için s[3] olur. s[3] ise tanimsizdir çünkü s degiskenindeki en son harfin indeksi 2 dir. 0 1 2 x y z Yukaridaki örnegin dogru çalismasi için while döngüsüne ikinci bir kosul eklememiz lazim. Bu kosul indeksin str degirinin uzunlugandan fazla olmamasini garantilemesi için olacak. while i < len(s) and not (s[i] in "aeıioöuüAEIIOÖUÜ"): print(s[i]) i = i + 1 Artik program istenilen sekilde çalisiyor. Alistirma: Yukarida i < len(s) karsilastirmasi ilk karsilastirma olarak verilmis. Eger ikinci karsilastirma olarak, yani tüm kosul not (s[i] in "aeıioöuüAEIIOÖUÜ") and i < len(s) seklinde verilseydi ne olurdu? while döngüsü için bir baska örnek daha verelim. soru_sor fonksiyonu kullanicidan "evet" veya "hayir" cevabini alana kadar ayni soruyu sorsun. def soru_sor(soru): cevap = input(soru) while not (cevap == "evet" or cevap == "hayir"): cevap = input(soru) return cevap Ilk önce input fonksiyonu ile kullanicidan bir cevap aliyor. Eger cevap "evet" veya "hayir" disinda bir deger ise döngüye giriyor ve ayni soruyu tekrar soruyor. cevap degiskenindeki deger "evet" veya "hayir" disinda bir deger oldugu sürece döngüden çikmiyor. Eger deger "evet" veya "hayir" oldugunda program akisina devam ediyor ve return cevap ifadesinden dolayi fonksiyon girilen cevabi, yani "evet" veya "hayir" degerini veriyor. >>> soru_sor("Yoruldunuz mu? ") Yoruldunuz mu? biraz Yoruldunuz mu? olabilir Yoruldunuz mu? evet 'evet'
© Copyright 2024 Paperzz