Python (3. Bölüm)

Pardus-Linux.org | Wiki sitesinden

Git ve: kullan, ara

Forum'da bu konunun tartışma adresi: http://forum.pardus-linux.org/viewtopic.php?t=10478&highlight=


Konu başlıkları

Python'da Koşula Bağlı Durumlar

Python'da en önemli konulardan biri de koşula bağlı durumlardır. İsterseniz ne demek istediğimizi bir örnekle açıklayalım. Diyelim ki Gmail'den aldığınız e. posta hesabınıza gireceksiniz. Gmail'in ilk sayfasında size bir kullanıcı adı ve şifre sorulur. Siz de kendinize ait kullanıcı adını ve şifreyi size verilen kutucuklara yazarsınız. Eğer yazdığınız kullanıcı adı ve şifre doğruysa hesabınıza erişebilirsiniz. Yok eğer kullanıcı adınız ve şifreniz doğru değilse, hesabınıza erişemezsiniz. Yani e. posta hesabınıza erişmeniz, kullanıcı adı ve şifreyi doğru girme koşuluna bağlıdır. Ya da şu örneği düşünelim: Diyelim ki Pardus'ta konsol ekranından güncelleme işlemi yapacaksınız. sudo pisi up komutunu verdiğiniz zaman, güncellemelerin listesi size bildirilecek, bu güncellemeleri yapmayı isteyip istemediğiniz size sorulacaktır. Eğer "evet" cevabı verirseniz güncelleme işlemi başlayacaktır. Yok eğer "hayır" cevabı verirseniz güncelleme işlemi başlamayacaktır. Yani güncelleme işleminin başlaması kullanıcının "evet" cevabı vermesi koşuluna bağlıdır. Biz de şimdi Python'da bu tip koşullu durumların nasıl oluşturulacağını öğreneceğiz. Bu iş için kullanacağımız üç tane ifade var: if..., else: ve elif...

Bu konu içinde ayrıca Python'da girintilerin önemine ve yazdığımız kodların içine nasıl açıklama yerleştirebileceğimize de değineceğiz.

if...

If... sözü İngilizce'de "eğer" anlamına geliyor. Dolayısıyla, adından da anlaşılabileceği gibi, bu ifade yardımıyla Python'da koşula bağlı bir durumu belirtebiliyoruz. Cümle yapısını anlayabilmek için bir örnek verelim:

if a == b

Bunun anlamı şudur: "eğer a ile b aynı ise..."

Biraz daha açarak söylemek gerekirse: "eğer a değişkeninin değeri b değişkeninin değeriyle aynı ise..."

Gördüğünüz gibi cümlemiz şu anda yarım... Yani belli ki bunun bir de devamı olması gerekiyor... Mesela cümlemizi şöyle tamamlayabiliriz:

if a == b:
        print "a ile b birbirine eşittir"

Yukarıda yazdığımız kod şu anlama geliyor: "Eğer a değişkeninin değeri b değişkeninin değeriyle aynı ise, ekrana 'a ile b birbirine eşittir,' diye bir cümle yazdır!"

Cümlemiz artık tamamlanmış da olsa, tabii ki programımız hâlâ eksik... Bir defa, henüz elimizde tanımlanmış birer a ve b değişkeni yok... Zaten bu kodları bu haliyle çalıştırmaya kalkışırsanız Python size, "Sen a diyorsun, b diyorsun ama, a'nın b'nin ne demek olduğunu ben bilmiyom abi!" diye bir hata mesajı verecektir...

Biraz sonra bu yarım yamalak kodu eksiksiz bir hale nasıl getireceğimizi göreceğiz. Ama şimdi burada bir parantez açalım ve Python'da girintileme işleminden ve kodların içine nasıl açıklama ekleneceğinden bahsedelim kısaca...

Öncelikle girintilemeden bahsedelim, çünkü bundan sonra girintilerle bol bol muhatap olacaksınız...

Dikkat ettiyseniz yukarıda yazdığımız yarım kod içinde "print" ile başlayan ifade, "if" ile başlayan ifadeye göre daha içeride. Bu durum, "print" ile başlayan ifadenin, "if" ile başlayan ifadeye ait bir alt-ifade olduğunu gösteriyor... Eğer metin düzenleyici olarak kwrite kullanıyorsanız, "if a == b:" yazıp enter'e bastıktan sonra kwrite sizin için bu girintileme işlemini kendiliğinden yapacak, imleci "print 'a ile b birbirine eşittir'" komutunu yazmanız gereken yere getirecektir. Ama eğer bu girintileme işlemini elle yapmanız gerekirse izlemeniz gereken genel kural şöyledir: Klavyedeki "tab" tuşuna bir kez veya "space" tuşuna dört kez basın..

Ancak bu kuralı uygularken "tab" veya "space" tuşlarına basma seçeneklerinden yalnızca birini uygulayın... Yani bir yerde "tab" tuşuna başka yerde "space" tuşuna basıp da Python'un kafasını karıştırmayın...

Şimdi de Python'da kodlar içine nasıl açıklama eklenir, biraz da bundan bahsedelim:

Diyelim ki, içerisinde bir ton kod barındıran bir program yazdık ve bu programımızı başkalarının da kullanabilmesi için internet üzerinden dağıtacağız. Bizim yazdığımız programı kullanacak kişiler, kullanmadan önce kodları incelemek istiyor olabilirler. İşte bizim de, kodlarımızı incelemek isteyen kişilere yardımcı olmak maksadıyla, programımızın içine neyin ne işe yaradığını açıklayan bazı notlar eklememiz en azından nezaket gereğidir... Başkalarını bir kenara bırakalım, bu açıklayıcı notlar sizin de işinize yarayabilir... Aylar önce yazmaya başladığınız bir programa aylar sonra geri dönmek istediğinizde, "Arkadaş, ben buraya böyle bir kod yazmışım zamanında ama hangi akla hizmet böyle bir şey yapmışım acaba!" demenizi de engelleyebilir bu açıklayıcı notlar...

Peki programımıza bu açıklayıcı notları nasıl ekleyeceğiz?

Kuralımız şu: Python'da kod içine açıklayıcı notlar eklemek için # işaretini kullanıyoruz.

Hemen bir örnek verelim:

print "deneme 1, 2, 3" #Ben bir küçük cezveyim, köşe bucak gezmeyim!

Sizin daha mantıklı açıklamalar yazacağınızı ümit ederek konumuza geri dönüyoruz...

Şimdi yukarıda verdiğimiz yarım programı tamamlamaya çalışalım. Hemen boş bir kwrite belgesi açıp içine şunları yazıyoruz:

#!/usr/bin/env python 
#-*- coding: latin-1 -*-

Bunlar zaten ilk etapta yazmamız gereken kodlardı. Devam ediyoruz:

#!/usr/bin/env python 
#-*- coding: latin-1 -*-
a = 23
b = 23

Yukarıda a ve b adında iki tane değişken tanımladık.. Bu iki değişkenin de değeri 23.

Programımızı yazmaya devam ediyoruz:

#!/usr/bin/env python 
#-*- coding: latin-1 -*-
a = 23
b = 23
if a == b:
        print "a ile b birbirine eşittir."

Bu şekilde programımızı tamamlamış olduk. Bu programın pek önemli bir iş yaptığı söylenemez. Yaptığı tek şey, a ile b değişkenlerinin değerine bakıp, eğer bunlar birbirleriyle aynıysa ekrana "a ile b birbirine eşittir" diye bir çıktı vermektir... Ama bu program ahım şahım bir şey olmasa da, en azından bize if ifadesinin nasıl kullanılacağı hakkında önemli bir fikir verdi... Artık bilgilerimizi bu programın bize sağladığı temel üzerine inşa etmeye devam edebiliriz.

Her zamanki gibi boş bir kwrite belgesi açıyoruz ve içine şunları yazıyoruz:

#!/usr/bin/env python
# -*- coding: latin-1 -*-
parola = "python"
cevap = raw_input("Lütfen parolanızı giriniz: ")
if cevap == parola:
	print "Parola onaylandı! Programa hoşgeldiniz!"

Gördüğünüz gibi, burada öncelikle "parola" adlı bir değişken yarattık. (Bu arada değişkenlere ad verirken Türkçe karakter kullanmamalısınız.) Bu parola adlı değişkenin değeri, kullanıcının girmesi gereken şifre oluyor... Ardından "cevap" adlı başka bir değişken daha yaratıp raw_input() fonksiyonunu bu değişkene atadık. Daha sonra da if ifadesi yardımıyla, "Eğer cevap değişkeninin değeri parola değişkeninin değeriyle aynı ise ekrana 'Parola onaylandı! Programa hoşgeldiniz!'" yazdır dedik...

Bu programı çalıştırdığımızda, eğer kullanıcının girdiği şifre "python" ise parola onaylanacaktır. Yok eğer kullanıcı başka bir kelime yazarsa, program derhal kapanacaktır.

Aynı programı şu şekilde kısaltarak da yazabiliriz:

#!/usr/bin/env python
# -*- coding: latin-1 -*-
parola = raw_input("Lütfen parolanızı giriniz: ")
if parola == "python":
	print "Parola onaylandı! Programa hoşgeldiniz!"

Burada raw_input() fonksiyonunun değerini doğrudan "parola" adlı değişkene atıyoruz. Hemen alttaki satırda ise girilmesi gereken parolanın ne olduğunu şu şekilde ifade ediyoruz:

"Eğer parola "python" ise ekrana 'Parola onaylandı! Programa hoşgeldiniz!' yazdır"

else:

"else:" ifadesi her zaman if ifadesi ile birlikte kullanılır. "else:" ifadesi kısaca, "if ifadesiyle tanımlanan koşullu durumlar dışında kalan bütün durumları göstermek için kullanılır." Küçük bir örnek verelim:

#!/usr/bin/env python
#-*- coding: latin-1 -*-
isim = raw_input("Senin ismin ne?")
if isim == "Ferhat":
	print "Yarabbim! Ne güzel bir isim bu!"
else: 
	print isim, "adını hiç sevmem!"

Burada yaptığımız şey şu: Öncelikle kullanıcıya, "Senin ismin ne?" diye soruyoruz (bu soruyu, "isim" adı verdiğimiz bir değişkene atadık.) Daha sonra şu cümleyi Python'caya çevirdik:

"Eğer isim değişkeninin değeri "Ferhat" ise, ekrana "Yarabbim! Ne güzel bir isim bu!" cümlesini yazdır. Yok eğer isim değişkeninin değeri "Ferhat" değil de başka herhangi bir şeyse, ekrana "isim" değişkeninin değerini ve "adını hiç sevmem!" cümlesini yazdır."

Bu öğrendiğimiz "else:" fonksiyonu sayesinde artık kullanıcı yanlış parola girdiğinde uyarı mesajı gönderebileceğiz:

#!/usr/bin/env python
# -*- coding: latin-1 -*-
parola = raw_input("Lütfen parolanızı giriniz: ")
if parola == "python":
	print "Parola onaylandı! Programa hoşgeldiniz!"
else:
	print "Ne yazık ki, yanlış parola girdiniz!

elif...

Eğer bir durumun gerçekleşmesi birden fazla koşula bağlıysa elif... ifadesinden faydalanıyoruz. Mesela:

#!/usr/bin/env python 
#-*- coding: latin-1 -*-
meyve = raw_input("Bir meyve adı yazınız: ")
if meyve == "elma":
	print "elma bir meyvedir"
elif meyve == "armut":
	print "armut bir meyvedir"
else:
	print meyve, "bir meyve değildir!"

Burada şu Türkçe ifadeyi Python'caya çevirdik:

"Kullanıcıya, bir meyve ismi yazmasını söyle. Eğer kullanıcının yazdığı isim "elma" ise, ekrana "elma bir meyvedir" çıktısı verilsin. Yok eğer kullanıcının yazdığı isim "elma" değil, ama "armut" ise ekrana "armut bir meyvedir" çıktısı verilsin. Eğer kullanıcının yazdığı isim bunlardan hiçbiri değilse ekrana "meyve" değişkeninin değeri ve "bir meyve değildir" çıktısı yazılsın..."

Eğer bir durumun gerçekleşmesi birden fazla koşula bağlıysa birden fazla "if" ifadesini art arda da kullanabiliriz. Örneğin:

#!/usr/bin/env python 
#-*- coding: latin-1 -*-
sayi = 100
if sayi == 100:
	print "sayi 100'dür"
if sayi < 150:
	print "sayi 150'den küçüktür"
if sayi > 50: 
	print "sayi 50'den büyüktür"
if sayi <= 100:
	print "sayi 100'den küçüktür veya 100'e eşittir"

Bu program çalıştırıldığında bütün olası sonuçlar listelenecektir. Yani çıktımız şöyle olacaktır:

sayi 100'dür
sayi 150'den küçüktür
sayi 50'den büyüktür
sayi 100'den küçüktür veya 100'e eşittir

Eğer bu programı elif... ifadesini kullanarak yazarsak sonuç şu olacaktır:

Öncelikle kodumuzu görelim:

#!/usr/bin/env python 
#-*- coding: latin-1 -*-
sayi = 100
if sayi == 100:
	print "sayi 100'dür"
elif sayi < 150:
	print "sayi 150'den küçüktür"
elif sayi > 50: 
	print "sayi 50'den büyüktür"
elif sayi <= 100:
	print "sayi 100'den küçüktür veya 100'e eşittir"

Bu kodların çıktısı ise şöyle olacaktır:

sayı 100'dür

Gördüğünüz gibi programımızı elif... ifadesi kullanarak yazarsak Python belirtilen koşulu karşılayan ilk sonucu ekrana yazdıracaktır.


Buraya kadar Python'da pek çok şey öğrenmiş olduk. If..., elif... else: ifadelerini de öğrendiğimize göre artık çok basit bir hesap makinesi yapabiliriz!

#!/usr/bin/env python
#-*- coding:latin-1 -*-

from __future__ import division

secenek1 = "(1) toplama"
secenek2 = "(2) çıkarma"
secenek3 = "(3) çarpma"
secenek4 = "(4) bölme"
 
print secenek1
print secenek2 
print secenek3
print secenek4

soru = raw_input("Lütfen yapmak istediğiniz işlemin numarasını girin: ")

if soru == "1":
	sayi1 = input("Lütfen toplama işlemi için ilk sayıyı girin: ")
	print sayi1
	sayi2 = input("Lütfen toplama işlemi için ikinci sayıyı girin: ")
	print sayi1, "+", sayi2,":", sayi1 + sayi2

if soru == "2":
	sayi3 = input("Lütfen çıkarma işlemi için ilk sayıyı girin: ")
	print sayi3
	sayi4 = input("Lütfen çıkarma işlemi için ikinci sayıyı girin: ")
	print sayi3, "-", sayi4,":", sayi3 - sayi4

if soru == "3":
	sayi5 = input("Lütfen çarpma işlemi için ilk sayıyı girin: ")
	print sayi5
	sayi6 = input("Lütfen çarpma işlemi için ikinci sayıyı girin: ")
	print sayi5, "x", sayi6,":", sayi5 * sayi6

if soru == "4":
	sayi7 = input("Lütfen bölme işlemi için ilk sayıyı girin: ")
	print sayi7
	sayi8 = input("Lütfen bölme işlemi için ikinci sayıyı girin: ")
	print sayi7, "/", sayi8,":", sayi7 / sayi8
===

If koşulu ile ilgili güzel bir özellik :

Eğer bir metin içerisinde bir kelime aramak istiyorsanız

if "aranan" in metin

komutunu kullanabilirsiniz.

Örneğin :

metin = "Pardus'a gerçek özgürlüğü biz yaşatacağız."
if "gerçek" in metin:
   print "gerçek:Evet"
else:
   print "gerçek:Hayır"

if "özgür" in metin:
   print "özgür:Evet"
else:
   print "özgür:Hayır"

Bu betiği denediğinizde çıktıların sırasıyla gerçek:Evet ve özgür:Evet olduğunu göreceksiniz. Burada özellikle "özgür" kelimesine dikkatinizi çekmek isterim. metin değişkeni içerisinde "özgür" değil de "özgürlüğü" olmasına rağmen Python bizim için "özgür" kelimesinin var olduğunu gösteriyor. Bu durum ile ilgili tartışmayı : http://forum.pardus-linux.org/viewtopic.php?f=185&t=18178 adresinde bulabilirsiniz. --badibere



Önceki Bölüm: Kullanıcıyla İletişim
Sonraki Bölüm:Döngüler

Bu yazı Programlama bölümünün bir parçasıdır.