Hoşgeldin Ziyaretçi



Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Döngüler (Loops) #2
#1
Bu arada, etkileşimli kabukta
Kod:
range(10)
gibi bir komut verdiğinizde range(0, 10) çıktısı aldığınızı görüyorsunuz. Bu çıktı, verdiğimiz komutun 0 ile 10 arası sayıları elde etmemizi sağlayacağını belirtiyor, ama bu sayıları o anda bize göstermiyor. Daha önce verdiğimiz örneklerden de anlaşılacağı gibi, 0-10 aralığındaki sayıları görebilmek için
Kod:
range(10)
ifadesi üzerinde bir
Kod:
for
döngüsü kurmamız gerekiyor.
Kod:
range(10)
ifadesinin taşıdığı sayıları görebilmek için
Kod:
for
döngüsü kurmak tek seçenek değildir. Bu işlem için yıldızlı parametrelerden de yararlanabiliriz.
Kod:
print()
fonksiyonunu incelediğimiz derste yıldızlı parametrelerin nasıl kullanıldığını göstermiştik. Dilerseniz şimdi bu parametre tipini
Kod:
range()
fonksiyonuna nasıl uygulayabileceğimizi görelim:
>>> print(*range(10))

0 1 2 3 4 5 6 7 8 9

Kod:
print()
fonksiyonunun sep parametresi yardımıyla bu çıktıyı istediğiniz gibi düzenleyebileceğinizi biliyorsunuz. Mesela çıktıdaki sayıları birbirlerinden virgülle ayırmak için şöyle bir komut verebiliyoruz:
>>> print(*range(10), sep=", ")

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Böylece
Kod:
range()
fonksiyonunu enine boyuna incelemiş ve bu fonksiyonun ne işe yaradığını, nasıl kullanılacağını anlamamızı sağlayan örnekler vermiş olduk. Artık başka bir konuyu geçebiliriz.
pass Deyimi
pass kelimesi İngilizcede ‘geçmek, pas geçmek’ gibi anlamlara gelir. Python’daki kullanımı da bu anlama oldukça yakındır. Biz bu deyimi Pyhon’da ‘görmezden gel, hiçbir şey yapma’ anlamında kullanacağız.
Dilerseniz
Kod:
pass
deyimini tarif etmeye çalışmak yerine bu deyimi bir örnek üzerinde açıklamaya çalışalım.
Hatırlarsanız yukarıda şöyle bir örnek vermiştik:
while True:
   parola = input("parola belirleyin: ")

   if not parola:
       print("parola bölümü boş geçilemez!")

   elif len(parola) in range(3, 8): #eğer parolanın uzunluğu 3 ile 8 karakter
       #aralığında ise...
       print("Yeni parolanız", parola)
       break

   else:
       print("parola 8 karakterden uzun 3 karakterden kısa olmamalı")

Burada mesela eğer kullanıcı parolayı boş bırakırsa ‘parola bölümü boş geçilemez!’ uyarısı gösteriyoruz. Şimdi o
Kod:
if
bloğunu şöyle yazdığımızı düşünün:
while True:
   parola = input("parola belirleyin: ")

   if not parola:
       pass

   elif len(parola) in range(3, 8): #eğer parolanın uzunluğu 3 ile 8 karakter
       #aralığında ise...
       print("Yeni parolanız", parola)
       break

   else:
       print("parola 8 karakterden uzun 3 karakterden kısa olmamalı")

Burada, eğer kullanıcı parolayı boş bırakırsa programımız hiçbir şey yapmadan yoluna devam edecektir. Yani burada
Kod:
pass
deyimi yardımıyla programımıza şu emri vermiş oluyoruz:
Alıntı:Eğer kullanıcı parolayı boş geçerse görmezden gel. Hiçbir şey yapmadan yoluna devam et!
Başka bir örnek daha verelim:
while True:
   sayı = int(input("Bir sayı girin: "))

   if sayı == 0:
       break

   elif sayı < 0:
       pass

   else:
       print(sayı)

Burada eğer kullanıcı 0 sayısını girerse programımız sona erer (
Kod:
break
deyimini biraz sonra inceleyeceğiz). Eğer kullanıcı 0‘dan küçük bir sayı girerse, yani kullanıcının girdiği sayı eksi değerli ise,
Kod:
pass
deyimininin etkisiyle programımız hiçbir şey yapmadan yoluna devam eder. Bu koşulların dışındaki durumlarda ise programımız kullanıcının girdiği sayıları ekrana yazdıracaktır.
Yukarıda anlatılan durumların dışında,
Kod:
pass
deyimini kodlarınız henüz taslak aşamasında olduğu zaman da kullanabilirsiniz. Örneğin, diyelim ki bir kod yazıyorsunuz. Programın gidişatına göre, bir noktada yapmanız gereken bir işlem var, ama henüz ne yapacağınıza karar vermediniz. Böyle bir durumda
Kod:
pass
deyiminden yararlanabilirsiniz. Mesela birtakım
Kod:
if
deyimleri yazmayı düşünüyor olun:
if .....:
   böyle yap

elif .....:
   şöyle yap

else:
   pass

Burada henüz
Kod:
else
bloğunda ne yapılacağına karar vermemiş olduğunuz için, oraya bir
Kod:
pass
koyarak durumu şimdilik geçiştiriyorsunuz. Program son haline gelene kadar oraya bir şeyler yazmış olacaksınız.
Sözün özü,
Kod:
pass
deyimlerini, herhangi bir işlem yapılmasının gerekli olmadığı durumlar için kullanıyoruz. İlerde işe yarar programlar yazdığınızda, bu
Kod:
pass
deyiminin göründüğünden daha faydalı bir araç olduğunu anlayacaksınız.
break Deyimi
Python’da
Kod:
break
özel bir deyimdir. Bu deyim yardımıyla, devam eden bir süreci kesintiye uğratabiliriz. Bu deyimin kullanıldığı basit bir örnek verelim:
>>> while True:
...     parola = input("Lütfen bir parola belirleyiniz:")
...         if len(parola) < 5:
...             print("Parola 5 karakterden az olmamalı!")
...         else:
...             print("Parolanız belirlendi!")
...             break

Burada, eğer kullanıcının girdiği parolanın uzunluğu 5 karakterden azsa, Parola 5 karakterden az olmamalı! uyarısı gösterilecektir. Eğer kullanıcı 5 karakterden uzun bir parola belirlemişse, kendisine ‘Parolanız belirlendi!’ mesajını gösterip,
Kod:
break
deyimi yardımıyla programdan çıkıyoruz.
Gördüğünüz gibi,
Kod:
break
ifadesinin temel görevi bir döngüyü sona erdirmek. Buradan anlayacağımız gibi,
Kod:
break
ifadesinin her zaman bir döngü içinde yer alması gerekiyor. Aksi halde Python bize şöyle bir hata verecektir:
SyntaxError: 'break' outside loop

Yani:
SözDizimiHatası: ``break`` döngü dışında ..

continue Deyimi
Kod:
continue
ilginç bir deyimdir. İsterseniz
Kod:
continue
deyimini anlatmaya çalışmak yerine bununla ilgili bir örnek verelim:
while True:
   s = input("Bir sayı girin: ")
   if s == "iptal":
       break

   if len(s) <= 3:
       continue

   print("En fazla üç haneli bir sayı girebilirsiniz.")

Burada eğer kullanıcı klavyede iptal yazarsa programdan çıkılacaktır. Bunu;
if s == "iptal":
   break

satırıyla sağlamayı başardık.
Eğer kullanıcı tarafından girilen sayı üç haneli veya daha az haneli bir sayı ise,
Kod:
continue
ifadesinin etkisiyle:
>>> print("En fazla üç haneli bir sayı girebilirsiniz.")

satırı es geçilecek ve döngünün en başına gidilecektir.
Eğer kullanıcının girdiği sayıdaki hane üçten fazlaysa ekrana:
En fazla üç haneli bir sayı girebilirsiniz.

cümlesi yazdırılacaktır.
Dolayısıyla buradan anladığımıza göre,
Kod:
continue
deyiminin görevi kendisinden sonra gelen her şeyin es geçilip döngünün başına dönülmesini sağlamaktır. Bu bilgiye göre, yukarıdaki programda eğer kullanıcı, uzunluğu üç karakterden az bir sayı girerse
Kod:
continue
deyiminin etkisiyle programımız döngünün en başına geri gidiyor. Ama eğer kullanıcı, uzunluğu üç karakterden fazla bir sayı girerse, ekrana ‘En fazla üç haneli bir sayı girebilirsiniz,’ cümlesinin yazdırıldığını görüyoruz.
Örnek Uygulamalar
Python programlama dilinde döngülerin neye benzediğini öğrendik. Bu bölünde ayrıca döngülerle birlikte kullanabileceğimiz başka araçları da tanıdık. Şimdi dilerseniz bu öğrendiklerimizi pekiştirmek için birkaç ufak çalışma yapalım.
Karakter Dizilerinin İçeriğini Karşılaştırma
Diyelim ki elinizde şöyle iki farklı metin var:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

Siz burada, ilk_metin adlı değişken içinde bulunan, ama ikinci_metin adlı değişken içinde bulunmayan öğeleri ayıklamak istiyorsunuz. Yani bu iki metnin içeriğini karşılaştırıp, farklı öğeleri bulmayı amaçlıyorsunuz. Bu işlem için, bu bölümde öğrendiğimiz döngülerden ve daha önce öğrendiğimiz başka araçlardan yararlanabilirsiniz. Şimdi dikkatlice bakın:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

for s in ilk_metin:
   if not s in ikinci_metin:
       print(s)

Bu kodları bir dosyaya kaydedip çalıştırdığımızda şu çıktıyı alıyoruz:
a
a
ş
ş
a

Demek ki ilk_metin adlı değişkende olup da ikinci_metin adlı değişkende olmayan öğeler bunlarmış...
Bu kodlarda anlayamayacağınız hiçbir şey yok. Ama dilerseniz biz yine de bu kodları tek tek inceleyelim.
İlk olarak değişkenlerimizi tanımladık:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

Amacımız ilk_metin‘de olan, ama ikinci_metin‘de olmayan öğeleri görmek. Bunun için ilk_metin‘deki öğeleri tek tek ikinci_metin‘deki öğelerle karşılaştırmamız gerekiyor. Tahmin edebileceğiniz gibi, bir metnin bütün öğelerine tek tek bakabilmenin en iyi yolu
Kod:
for
döngülerini kullanmaktır. O halde döngümüzü yazalım:
for s in ilk_metin: #ilk_metin'deki, 's' adını verdiğimiz bütün öğeler için
   if not s in ikinci_metin: #eğer 's' adlı bu öğe ikinci_metin'de yoksa
       print(s) #'s' adlı öğeyi ekrana bas

Gördüğünüz gibi, döngüleri (
Kod:
for
), bool işleçlerini (not) ve aitlik işleçlerini (in) kullanarak, istediğimiz şeyi rahatlıkla yapabiliyoruz. Burada kullandığımız
Kod:
if
deyimi, bir önceki satırda
Kod:
for
döngüsü ile üzerinden geçtiğimiz öğeleri süzmemizi sağlıyor. Burada temel olarak şu üç işlemi yapıyoruz:
  1. ilk_metin içindeki bütün öğelerin üzerinden geçiyoruz,
  2. Bu öğeleri belli bir ölçüte göre süzüyoruz,
  3. Ölçüte uyan öğeleri ekrana basıyoruz.
Elbette yukarıda yaptığımız işlemin tersini yapmak da mümkündür. Biz yukarıdaki kodlarda ilk_metin‘de olan, ama ikinci_metin‘de olmayan öğeleri süzdük. Eğer istersek ikinci_metin‘de olan, ama ilk_metin‘de olmayan öğeleri de süzebiliriz. Mantığımız yine aynı:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

for s in ikinci_metin: #ikinci_metin'deki, 's' adını verdiğimiz bütün öğeler için
   if not s in ilk_metin: #eğer 's' adlı bu öğe ilk_metin'de yoksa
       print(s) #'s' adlı öğeyi ekrana bas

Bu da bize şu çıktıyı veriyor:
u
ı
o
r
y
e
u
ı
r
u
e
e
e
u

Gördüğünüz gibi, yaptığımız tek şey, ilk_metin ile ikinci_metin‘in yerlerini değiştirmek oldu. Kullandığımız mantık ise değişmedi.
Bu arada, yukarıdaki çıktıda bizi rahatsız eden bir durum var. Çıktıda bazı harfler birbirini tekrar ediyor. Aslında temel olarak sadece şu harfler var:
u
ı
o
r
y
e

Ama metin içinde bazı harfler birden fazla sayıda geçtiği için, doğal olarak çıktıda da bu harfler birden fazla sayıda görünüyor. Ama tabii ki, eğer biz istersek farklı olan her harften yalnızca bir tanesini çıktıda görmeyi de tercih edebiliriz. Bunun için şöyle bir kod yazabiliriz:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

fark = ""

for s in ikinci_metin:
   if not s in ilk_metin:
       if not s in fark:
           fark += s
print(fark)

Burada da anlayamayacağımız hiçbir şey yok. Bu kodlardaki bütün parçaları tanıyoruz. Herzamanki gibi öncelikle değişkenlerimizi tanımladık:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

Daha sonra fark adlı boş bir karakter dizisi tanımlıyoruz. Metinler içindeki farklı karakter dizilerini fark adlı bu karakter dizisi içinde depolayacağız.
Ardından da
Kod:
for
döngümüzü yazıyoruz:
for s in ikinci_metin:      # ikinci_metin'de 's' dediğimiz bütün öğeler için
   if not s in ilk_metin:  # eğer 's' ilk_metin'de yoksa
       if not s in fark:   # eğer 's' fark'ta da yoksa
           fark += s       # bu öğeyi fark değişkenine ekle
print(fark)                 # fark değişkenini ekrana bas

Uyguladığımız mantığın ne kadar basit olduğunu görüyorsunuz. Bu kodlarda basitçe şu işlemleri yapıyoruz:
  1. ikinci_metin değişkeni içindeki bütün öğelerin üzerinden tek tek geç,
  2. Eğer bu değişkendeki herhangi bir öğe ilk_metin‘de ve fark‘ta yoksa o öğeyi fark‘a ekle.
  3. Son olarak da fark‘ı ekrana bas.
Bu kodlarda dikkatimizi çeken ve üzerinde durmamız gereken bazı noktalar var. Burada özellikle fark değişkenine öğe ekleme işlemini nasıl yaptığımıza dikkat edin.
Python programlama dilinde önceden oluşturduğumuz bir karakter dizisini başka bir karakter dizisi ile birleştirdiğimizde bu işlem ilk oluşturduğumuz karakter dizisini etkilemez. Yani:
>>> a = 'istihza'
>>> a + '.com'

'istihza.com'

Burada sanki a adlı özgün karakter dizisini değiştirmişiz ve ‘istihza.com’ değerini elde etmişiz gibi görünüyor. Ama aslında a‘nın durumunda hiçbir değişiklik yok:
>>> a

'istihza'

Gördüğünüz gibi, a değişkeninin değeri hâlâ ‘istihza’. Bu durumun nedeni, birleştirme işlemlerinin bir değiştirme işlemi olmamasıdır. Yani mesela iki karakter dizisini birleştirdiğinizde birleşen karakter dizileri üzerinde herhangi bir değişiklik olmaz. Bu durumda yapabileceğimiz tek şey, karakter dizisine eklemek istediğimiz öğeyi de içeren yeni bir karakter dizisi oluşturmaktır. Yani:
>>> a = 'istihza'
>>> a = a + '.com'
>>> print(a)

istihza.com

Burada sanki değeri ‘istihza’ olan a adlı bir değişkene ‘.com’ değerini eklemişiz gibi görünüyor, ama aslında biz burada a değişkenini yok edip, ‘istihza.com’ değerini içeren, a adlı başka bir değişken tanımladık. Bu durumu nasıl teyit edeceğinizi biliyorsunuz:
>>> a = 'istihza'
>>> id(a)

15063200

>>> a = a + '.com'
>>> id(a)

15067960

Burada
Kod:
id()
fonksiyonunu kullanarak karakter dizilerinin kimliklerini sorguladık. Gördüğünüz gibi, isimleri aynı da olsa, aslında ortada iki farklı a değişkeni var. Kimlik numaralarının farklı olmasından anladığımıza göre, ilk başta tanımladığımız a değişkeni ile
Kod:
a = a + '.com'
satırıyla oluşturduğumuz a değişkeni birbirinden farklı.
Bu arada, eğer istersek yukarıdaki değer atama işlemini, önceki bölümlerde öğrendiğimiz değer atama işleçleri yardımıyla kısaltabileceğimizi de biliyorsunuz:
>>> a += '.com'

İşte ilk_metin ile ikinci_metin değişkenleri arasındaki farklı harfleri yalnızca birer kez yazdırmak için kullandığımız kodlarda da yukarıdaki işlemi yaptık:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

fark = ''

for s in ikinci_metin:
   if not s in ilk_metin:
       if not s in fark:
           fark += s
print(fark)

Gördüğünüz gibi, önce boş bir fark değişkeni oluşturduk. Daha sonra bu değişkene
Kod:
for
döngüsü içinde yeni değerler atayabilmek (daha doğrusu atarmış gibi yapmak) için
Kod:
fark += s
gibi bir kod kullandık. Böylece for döngüsünün her dönüşünde s adını verdiğimiz herbir öğeyi tek tek fark değişkenine yolladık. Böylece program sonunda elimizde, farklı öğeleri yalnızca birer kez içeren fark adlı bir değişken olmuş oldu. Dediğimiz gibi, ilk başta tanımladığımız boş fark değişkeni ile, program sonunda farklı değerleri içeren fark değişkeni aslında aynı değil. Yani biz ilk fark değişkenine döngünün her dönüşünde yeni bir öğe eklemek yerine, döngünün her dönüşünde yeni bir fark değişkeni oluşturmuş oluyoruz. Ama programın sonunda sanki fark değişkenine her defasında yeni bir değer atamışız gibi görünüyor ve bu da bizim işimizi görmemize yetiyor...
Programın başındaki ve sonundaki fark değişkenlerinin aslında birbirinden farklı olduğunu teyit etmek için şu kodları kullanabilirsiniz:
ilk_metin = "asdasfddgdhfjfdgdşfkgjdfklgşjdfklgjdfkghdfjghjklsdhajlsdhjkjhkhjjh"
ikinci_metin = "sdfsuıdoryeuıfsjkdfhdjklghjdfklruseldhfjlkdshfljskeeuf"

fark = ""
print("fark'ın ilk tanımlandığı zamanki kimlik numarası: ", id(fark))

for s in ikinci_metin:
   if not s in ilk_metin:
       if not s in fark:
           fark += s

print("fark'ın program sonundaki kimlik numarası: ", id(fark))

Gördüğünüz gibi, gerçekten de ortada iki farklı fark değişkeni var. Bu durumu
Kod:
id()
fonksiyonu yardımıyla doğrulayabiliyoruz.
Peki bu bilginin bize ne faydası var?
Şimdilik şu kadarını söyleyelim: Eğer o anda muhatap olduğunuz bir veri tipinin mizacını, huyunu-suyunu bilmezseniz yazdığınız programlarda çok kötü sürprizlerle karşılaşabilirsiniz. Birkaç bölüm sonra başka veri tiplerini de öğrendikten sonra bu durumu daha ayrıntılı bir şekilde inceleyeceğiz.
Bu arada, tahmin edebileceğiniz gibi yukarıdaki
Kod:
for
döngüsünü şöyle de yazabilirdik:
for s in ikinci_metin:
   if not s in ilk_metin and not s in fark:
       fark += s

Burada iki farklı
Kod:
if
deyimini iki farklı satırda yazmak yerine, bu deyimleri and işleci ile birbirine bağladık.
Bu örnek ile ilgili söyleyeceklerimiz şimdilik bu kadar. Gelin biz şimdi isterseniz bilgilerimizi pekiştirmek için başka bir örnek daha yapalım.
Dosyaların İçeriğini Karşılaştırma
Bir önceki örnekte karakter dizilerinin içeriğini nasıl karşılaştırabileceğimizi gösteren bir örnek vermiştik. Şimdi de, gerçek hayatta karşınıza çıkması daha olası bir durum olması bakımından, dosyaların içeriğini nasıl karşılaştıracağımıza dair bir örnek verelim.
Esasında karakter dizilerinin içeriğini birbirleriyle nasıl karşılaştırıyorsak, dosyaların içeriğini de benzer şekilde karşılaştırabiliriz. Mesela içeriği şu olan isimler1.txt adlı bir dosyamız olduğunu varsayalım:
Ahmet
Mehmet
Sevgi
Sinan
Deniz
Ege
Efe
Ferhat
Fırat
Zeynep
Hazan
Mahmut
Celal
Cemal
Özhan
Özkan

Yine içeriği şu olan bir de isimler2.txt adlı başka bir dosya daha olduğunu düşünelim:
Gürsel
Mehmet
Sevgi
Sami
Deniz
Ege
Efe
Ferhat
Fırat
Tülay
Derya
Hazan
Mahmut
Tezcan
Cemal
Özhan
Özkan
Özcan
Dilek

Amacımız bu iki dosyanın içeriğini karşılaştırıp, farklı öğeleri ortaya sermek. Dediğimiz gibi, bir önceki örnekte izlediğimiz yolu burada da takip edebiliriz. Dikkatlice bakın:
d1 = open("isimler1.txt") # dosyayı açıyoruz
d1_satırlar = d1.readlines() # satırları okuyoruz

d2 = open("isimler2.txt")
d2_satırlar = d2.readlines()

for i in d2_satırlar:
   if not i in d1_satırlar:
       print(i)

d1.close()
d2.close()

Gerçekten de mantığın bir önceki örnekle tamamen aynı olduğunu görüyorsunuz. Biz henüz Python’da dosyaların nasıl işleneceğini öğrenmedik, ama daha önce gördüğümüz
Kod:
open()
fonksiyonu yardımıyla en azından dosyaları açabilecek kadar biliyoruz dosya işlemlerinin nasıl yürütüleceğini...
Burada farklı olarak
Kod:
readlines()
adlı bir metot görüyoruz. Biz burada bu metodun ayrıntılarına inmeyeceğiz, ama şimdilik dosya içeriğinin satırlar halinde okunmasını sağladığını bilelim yeter.
Bu arada, eğer çıktıda Türkçe karakterleri düzgün görüntüleyemiyorsanız
Kod:
open()
fonksiyonunun encoding adlı bir parametresi vasıtasıyla içeriği UTF-8 olarak kodlayabilirsiniz:
d1 = open("isimler1.txt", encoding="utf-8") # dosyayı açıyoruz
d1_satırlar = d1.readlines() # satırları okuyoruz

d2 = open("isimler2.txt", encoding="utf-8")
d2_satırlar = d2.readlines()

for i in d2_satırlar:
   if not i in d1_satırlar:
       print(i)

d1.close()
d2.close()

Bu şekilde Türkçe karakterleri düzgün bir şekilde görüntüleyebiliyor olmanız lazım. Eğer Windows’ta Türkçe karakterleri hala düzgün görüntüleyemiyorsanız encoding parametresinde ‘utf-8’ yerine ‘cp1254’ adlı dil kodlamasını kullanmayı deneyebilirsiniz:
encoding = "cp1254"

Yukarıdaki örneklerde bir içerik karşılaştırması yapıp, farklı öğeleri ayıkladık. Aynı şekilde benzer öğeleri ayıklamak da mümkündür. Bu işlemin nasıl yapılacağını az çok tahmin ettiğinizi zannediyorum:
d1 = open("isimler1.txt")
d1_satırlar = d1.readlines()

d2 = open("isimler1.txt")
d2_satırlar = d2.readlines()

for i in d2_satırlar:
   if i in d1_satırlar:
       print(i)

d1.close()
d2.close()

Burada bir öncekinden farklı olarak
Kod:
if not i in d2_satırlar
kodu yerine, doğal olarak,
Kod:
if i in d2_satırlar
kodunu kullandığımıza dikkat edin.
Dosyalar üzerinde yaptığımız işlemleri tamamladıktan sonra
Kod:
close()
metodu ile bunları kapatmayı unutmuyoruz:
d1.close()
d2.close()

Karakter Dizisindeki Karakterleri Sayma
Yukarıdaki örneklerde içerik karşılaştırmaya ilişkin birkaç örnek verdik. Şimdi yine bilgilerimizi pekiştirmek için başka bir konuya ilişkin örnekler verelim.
Mesela elimizde şöyle bir metin olduğunu varsayalım:
Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcı
tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Çoğu insan,
isminin Python olmasına aldanarak, bu programlama dilinin, adını piton
yılanından aldığını düşünür. Ancak zannedildiğinin aksine bu programlama
dilinin adı piton yılanından gelmez. Guido Van Rossum bu programlama dilini,
The Monty Python adlı bir İngiliz komedi grubunun, Monty Python’s Flying
Circus adlı gösterisinden esinlenerek adlandırmıştır. Ancak her ne kadar
gerçek böyle olsa da, Python programlama dilinin pek çok yerde bir yılan
figürü ile temsil edilmesi neredeyse bir gelenek halini almıştır.

Yapmamız gereken bir istatistik çalışması gereğince bu metinde her harfin kaç kez geçtiğini hesaplamanız gerekiyor.
Bunun için şöyle bir program yazabiliriz:
metin = """Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcı
tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Çoğu insan,
isminin Python olmasına aldanarak, bu programlama dilinin, adını piton
yılanından aldığını düşünür. Ancak zannedildiğinin aksine bu programlama dilinin
adı piton yılanından gelmez. Guido Van Rossum bu programlama dilini, The Monty
Python adlı bir İngiliz komedi grubunun, Monty Python’s Flying Circus adlı
gösterisinden esinlenerek adlandırmıştır. Ancak her ne kadar gerçek böyle olsa
da, Python programlama dilinin pek çok yerde bir yılan figürü ile temsil
edilmesi neredeyse bir gelenek halini almıştır."""

harf = input("Sorgulamak istediğiniz harf: ")

sayı = ''

for s in metin:
   if harf == s:
       sayı += harf

print(len(sayı))

Burada öncelikle metnimizi bir değişken olarak tanımladık. Ardından da kullanıcıya hangi harfi sorgulamak istediğini sorduk.
Bu kodlarda tanımladığımız sayı adlı değişken, sorgulanan harfi, metinde geçtiği sayıda içinde barındıracaktır. Yani mesela metin 5 tane a harfi varsa sayı değişkeninin değeri aaaaa olacaktır.
Sonraki satırlarda
Kod:
for
döngümüzü tanımlıyoruz:
for s in metin:         # metin içinde 's' adını verdiğimiz herbir öğe için
   if harf == s:       # eğer kullanıcıdan gelen harf 's' ile aynıysa
       sayı += harf    # kullanıcıdan gelen bu harfi sayı değişkenine yolla

Dediğimiz gibi, sayı değişkeni, sorgulanan harfi, metinde geçtiği sayıda barındırıyor. Dolayısıyla bir harfin metinde kaç kez geçtiğini bulmak için sayı değişkeninin uzunluğunu yazdırmamız yeterli olacaktır:
print(len(sayı))

Dilerseniz yukarıdaki programı yazmak için daha farklı bir mantık da kullanabilirsiniz. Dikkatlice bakın:
metin = """Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcı
tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Çoğu insan,
isminin Python olmasına aldanarak, bu programlama dilinin, adını piton
yılanından aldığını düşünür. Ancak zannedildiğinin aksine bu programlama dilinin
adı piton yılanından gelmez. Guido Van Rossum bu programlama dilini, The Monty
Python adlı bir İngiliz komedi grubunun, Monty Python’s Flying Circus adlı
gösterisinden esinlenerek adlandırmıştır. Ancak her ne kadar gerçek böyle olsa
da, Python programlama dilinin pek çok yerde bir yılan figürü ile temsil
edilmesi neredeyse bir gelenek halini almıştır."""

harf = input("Sorgulamak istediğiniz harf: ")

sayı = 0

for s in metin:
   if harf == s:
       sayı += 1

print(sayı)

Burada sayı değişkeninin ilk değeri 0 olarak belirledik. Döngü içinde de, sorgulanan harfin metin içinde her geçişinde sayı değişkeninin değerini 1 sayı artırdık. Dolayısıyla sorgulanan harfin metinde kaç kez geçtiğini bulmak için sayı değişkeninin son değerini yazdırmamız yeterli oldu.
Dosya içindeki Karakterleri Sayma
Dilerseniz bir önceki örnekte kullandığımız metnin program içinde bir değişken değil de, mesela bir dosyadan okunan bir metin olduğunu varsayalım şimdi:
hakkında = open("hakkında.txt", encoding="utf-8")

harf = input("Sorgulamak istediğiniz harf: ")

sayı = 0

for karakter_dizisi in hakkında:
   for karakter in karakter_dizisi:
       if harf == karakter:
           sayı += 1
print(sayı)

hakkında.close()

Burada yaptığımız ilk iş elbette dosyamızı açmak oldu:
hakkında = open("a1.txt", encoding="utf-8")

Bu komutla, hakkında.txt adlı dosyayı UTF-8 kodlaması ile açtık. Daha sonra kullanıcıya, sorgulamak istediği harfi soruyoruz:
harf = input("Sorgulamak istediğiniz harf: ")

Ardından da sorgulanan harfin dosyada kaç kez geçtiği bilgisini tutacak olan sayı adlı bir değişken tanımlıyoruz:
sayı = 0

Sıra geldi
Kod:
for
döngümüzü tanımlamaya:
for karakter_dizisi in hakkında:
   for karakter in karakter_dizisi:
       if harf == karakter:
           sayı += 1

Bu döngüyü anlamakta bir miktar zorlanmış olabilirsiniz. Her zaman söylediğimiz gibi, Python’da bir kod parçasını anlamanın en iyi yöntemi, gerekli yerlere
Kod:
print()
fonksiyonları yerleştirerek, programın verdiği çıktıları incelemektir:
for karakter_dizisi in hakkında:
   print(karakter_dizisi)
   #for karakter in karakter_dizisi:
   #    if harf == karakter:
   #        sayı += 1

Gördüğünüz gibi, ilk
Kod:
for
döngüsünün hemen sonrasına bir
Kod:
print()
fonksiyonu yerleştirerek bu döngünün verdiği çıktıları inceliyoruz. Bu arada, amacımıza hizmet etmeyen satırları da yorum içine alarak etkisizleştirdiğimize dikkat edin.
Çıktıya baktığımız zaman, şöyle bir durumla karşılaşıyoruz:
Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcı

tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Çoğu insan,

isminin Python olmasına aldanarak, bu programlama dilinin, adını piton

yılanından aldığını düşünür. Ancak zannedildiğinin aksine bu programlama dilinin

adı piton yılanından gelmez. Guido Van Rossum bu programlama dilini, The Monty

Python adlı bir İngiliz komedi grubunun, Monty Python’s Flying Circus adlı

gösterisinden esinlenerek adlandırmıştır. Ancak her ne kadar gerçek böyle olsa

da, Python programlama dilinin pek çok yerde bir yılan figürü ile temsil

edilmesi neredeyse bir gelenek halini almıştır.

Burada herbir satır ayrı bir karakter dizisidir. Eğer herbir satırın ayrı bir karakter dizisi olduğunu daha net bir şekilde görmek istiyorsanız
Kod:
repr()
adlı özel bir fonksiyondan yararlanabilirsiniz:
for karakter_dizisi in hakkında:
   print(repr(karakter_dizisi))
   #for karakter in karakter_dizisi:
   #    if harf == karakter:
   #        sayı += 1

Bu kodlar bu kez şöyle bir çıktı verir:
'Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcı\n'
'tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Çoğu insan,\n'
'isminin Python olmasına aldanarak, bu programlama dilinin, adını piton\n'
'yılanından aldığını düşünür. Ancak zannedildiğinin aksine bu programlama dilinin\n'
'adı piton yılanından gelmez. Guido Van Rossum bu programlama dilini, The Monty\n'
'Python adlı bir İngiliz komedi grubunun, Monty Python’s Flying Circus adlı\n'
'gösterisinden esinlenerek adlandırmıştır. Ancak her ne kadar gerçek böyle olsa\n'
'da, Python programlama dilinin pek çok yerde bir yılan figürü ile temsil\n'
'edilmesi neredeyse bir gelenek halini almıştır.'

Bu çıktıya çok dikkatlice bakın.
Kod:
repr()
fonksiyonu sayesinde Python’ın alttan alta neler çevirdiğini bariz bir biçimde görüyoruz. Karakter dizisinin başlangıç ve bitişini gösteren tırnak işaretleri ve \n kaçış dizilerinin görünür vaziyette olması sayesinde herbir satırın ayrı bir karakter dizisi olduğunu daha net bir şekilde görebiliyoruz.
Biz yazdığımız kodlarda, kullanıcıdan bir harf girmesini istiyoruz. Kullandığımız algoritma gereğince bu harfi metindeki karakter dizileri içinde geçen herbir karakterle tek tek karşılaştırmamız gerekiyor.
Kod:
input()
metodu aracılığıyla kullanıcıdan tek bir karakter alıyoruz. Kullandığımız
Kod:
for
döngüsü ise bize bir karakter yerine her satırda bir karakter dizisi veriyor. Dolayısıyla mesela kullanıcı ‘a’ harfini sorgulamışsa, ilk
Kod:
for
döngüsü bu harfin karşısına ‘Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcın’ adlı karakter dizisini çıkaracaktır. Dolayısıyla bizim bir seviye daha alta inerek, ilk
Kod:
for
döngüsünden elde edilen değişken üzerinde başka bir
Kod:
for
döngüsü daha kurmamız gerekiyor. Bu yüzden şöyle bir kod yazıyoruz:
for karakter_dizisi in hakkında:
   for karakter in karakter_dizisi:
           ...

Böylece iç içe iki
Kod:
for
döngüsü oluşturmuş oluyoruz. İsterseniz bu anlattığımız şeyleri daha net görmek için yine
Kod:
print()
fonksiyonundan yararlanabilirsiniz:
hakkında = open("hakkında.txt", encoding="utf-8")

harf = input("Sorgulamak istediğiniz harf: ")

sayı = 0

for karakter_dizisi in hakkında:
   for karakter in karakter_dizisi:
       print(karakter)
#        if harf == karakter:
#            sayı += 1
#print(sayı)

karakter değişkenin değerini ekrana yazdırarak Python’ın alttan alta neler çevirdiğini daha net görebiliyoruz.
Kodların geri kalanında ise, kullanıcının sorguladığı harfin,
Kod:
for
döngüsü ile üzerinden geçtiğimiz karakter_dizisi adlı değişken içindeki karakterlerle eşleşip eşleşmediğini denetliyoruz. Eğer eşleşiyorsa, her eşleşmede sayı değişkeninin derini 1 sayı artırıyoruz. Böylece en elimizde sorgulanan harfin metin içinde kaç kez geçtiği bilgisi olmuş oluyor.
Son olarak da, ilk başta açtığımız dosyayı kapatıyoruz:
hakkında.close()


kaynak:http://belgeler.istihza.com/py3/donguler.html
[img=0x200]http://i.hizliresim.com/vL7jVO.png[/img]
Cevapla
Teşekkür verenler:


Hızlı Menü:


Şu anda bu konuyu okuyanlar: 6 Ziyaretçi


10tl.net Destek Forumu -

Online Shopping App
Online Shopping - E-Commerce Platform
Online Shopping - E-Commerce Platform
Feinunze Schmuck Jewelery Online Shopping