9 Ocak 2011 Pazar

Python'a Giriş (1)

Önsöz

Daha önce kısa yoldan oyun yapımını öğretme sözü vermiştim. Bu yüzden Python'un ayrıntılarından bahsetmek yerine ilk aşamada gerekli olan fonksiyonlarıdan bahsedeceğim. Hem zaten Python için çok güzel Türkçe bir kaynak var: www.istihza.com. Eğer ilk oyununuzu yaptıktan sonra hala bu işle uğraşmaya kararlıysanız ve bunun sizin için ideal bir iş olduğunu düşünüyorsanız benim anlattıklarımla yetinmeyin, o siteyi mutlaka inceleyin.

Python'da İlk Adımlar

Tahmin edebileceğiniz gibi önce sitesine gidip onu indirmemiz lazım: www.python.org . Siteye girdiğinizde göreceksiniz ki birçok Python sürümü var, en önemlileri Python 2.xx ve 3.xx. Aralarında çok büyük olmasa da bazı farklar var. Benim kişisel tercihim ve anlatacağım sürüm 3. sürümü. 3. sürümünü tercih etmemin en büyük sebebi Türkçe karakterleri destekliyor olması. Tahminimce nasıl indirip kuracağınızı çözersiniz, o yüzden bu kısmı atlıyorum.
Kurduktan sonra Başlat menüsünde Python3.1'in (ya da sizinki hangisi ise) altında IDLE'ı çalıştırın. Karşınıza Python'un sürümü ile başlayan ve “>>>” ile biten bir ekran çıkacaktır. İşte burası Python'un çalıştığı yer. Bütün programlama işini buradan halledebilirsiniz. Tabi ki buraya yazdıklarınızı kaydedemeyeceğiniz için böyle bir şey yapmayacaksınız ama kaydetme işine daha sonra değineceğiz.

Print() fonksiyonu
Her programlama dersinin girişinde olduğu gibi ekrana yazı yazdırmaktan başlayalım. Ekrana herhangi bir şey yazdırmak için print() fonksiyonunu kullanmamız yeterli. Bu noktada dikkat etmeniz gereken nokta eğer bir yazı bastıracaksanız tırnak içine almanız gerektiği. Şöyle orijinal bir örnek yapalım:

print(“Merhaba Anton, ben Dünya!”) yazın ve enter'a basın.

Yazdığınız tam olarak şöyle görünmeli:

>>> print(“Merhaba Anton, ben Dünya!”)
Merhaba Anton, ben Dünya!
>>>

Eğer cümlenizi tırnak arasına almayı unuttuysanız Python şöyle bir hata verecektir:

Traceback (most recent call last):
File "", line 1, in
print(asd)
NameError: name 'Merhaba Anton, ben Dünya!' is not defined

Bir sayı bastırmak istediğinizde tırnakları kullanmanıza gerek yok

>>> print(23)
23
>>>

İşlemler ve değer atama
Python'u hesap makinesi olarak kullanmanız da mümkün. Fazla uzatmadan iki ile üçü toplayalım:

>>> 2 + 3
5
>>>

Eğer isterseniz önce her sayıya bir isim verirsiniz (daha doğrusu isme bir sayı verirsiniz):

>>> a = 2
>>> b = 3
>>> a + b
5
>>>

Aynı şekilde a + b toplamına da başka bir isim verebiliriz:

>>> a = 2
>>> b = 3
>>> c = a + b
>>> c
5
>>>

Aynı çıktıları print() fonksiyonunu kullanarak da elde edebiliriz:

>>> print(2 + 3)
5
>>>

Ya da:

>>> print(a + b)
5
>>>

Ya da:

>>> print(c)
5
>>>

Yazmamız mümkün.

Aynı şekilde bir yazıyı da bir harfe atayabiliriz:

>>> a = “Merhaba Dünya, ben Anton!”
>>> print(a)
Merhaba Dünya, ben Anton!
>>>

Tabi bu atamaları yaparken sadece harf ile sınırlı değilsiniz, “a” yerine “cümle” de yazabilirsiniz.

input() fonksiyonu
Ekrana istediğimizi bastırabiliyoruz artık! Ne mutlu bize! Peki ya kullanıcıdan bir girdi almak istersek? İşte o zaman devreye input() fonksiyonu giriyor. Hemen bir deneme yapalım:

>>> input()


Gördüğünüz gibi input() deyince program öylece kalıyor. Peki neden? Çünkü bizden bir değer girmemizi bekliyor. Hemen bir şeyler yazalım öyleyse:

>>> input()
Kara Murat Benim!
'Kara Murat Benim!'
>>>

input() fonksiyonu yazdığımızı aynen bastırdı. Şimdi de bir değişkene isim vermeye çalışalım:

>>> isim = input()
Damla
>>>

Şimdi “isim” yazdığınızda Python size “Damla” çıktısını verecektir:

>>> isim
'Damla'
>>>

İsterseniz bir de nasıl bir girdi beklediğimizi soralım kullanıcıya. Bunun için input(“açıklama”) şeklinde bir açıklama girebilirsiniz.

>>> isim = input(“Bir isim giriniz: “)
Bir isim giriniz: Damla
>>> isim
'Damla'
>>>

Bu noktada print() fonksiyonuna dönmek istiyorum. print()'i kullanarak aynı anda birkaç argümanı birleştirerek bastırabilirsiniz. Bunu da şu şekilde yapabilirsiniz:

>>>print(“Merhaba ” + isim + “, ben Dünya!”)
Merhaba Damla, ben Dünya!
>>>

Dikkatinizi çekti mi bilmiyorum, ama burada “+” işaretinin işlevi değişmiş. Bu sadece print() için geçerli olan bir durum değil, sayı haricinde herhangi bir şey ile kullanıldığında o şeyleri yan yana ekler. Şöyle bir örnek yapalım:

>>> a = “Aaa! ”
>>> b = “Kim gelmiş!”
>>> a + b
'Aaa! Kim gelmiş!”
>>>

Aynı durum sayı haricinde her karakter için geçerli olduğundan şöyle bir şey görürseniz şaşırmayın:

>>> “2” + “3”
'23'
>>>

Tırnak arasına yazıldıkları için Python 2'yi ve 3'ü sayı olarak değil de bir harf gibi algılıyor. Şimdi dönelim input()'a. Az önce gördüğünüz gibi input() sayı değil de girdiyi karakter gibi algılıyor. Bu durumu düzeltmek için ne yapmalıyız? Cevap int() fonksiyonunda saklı. Önce şöyle bir şey yazalım:

>>> a = input(“Bir sayı girin: “)
Bir sayı girin: 12
>>> b = input(“Bir sayı daha girin: “)
Bir sayı daha girin: 43
>>> a + b
'1243'

Tıpkı beklediğimiz gibi Python 12 ve 43 sayılarını birer karakter olarak algıladı ve yan yana yazdı. Şimdi aynı şeyi int() ile deneyelim:

>>> a = input(“Bir sayı girin: “)
Bir sayı girin: 12
>>> b = input(“Bir sayı daha girin: “)
Bir sayı daha girin: 43
>>> int(a)
>>> int(b)
>>> a + b
55
>>>

Bu örnekte int() fonksiyonu karakter olarak görünen 12 ve 43'ü sayıya çevirdi. Aynı şey şu şekilde de yazılabilir:

>>> a = int(input(“Bir sayı girin: “))
Bir sayı girin: 42
>>> b = int(input(“Başka bir sayı girin: “))
Başka bir sayı girin: 14
>>> a + b
56
>>>

Olur da bir sayıyı karaktere dönüştürmek isterseniz str() fonksiyonunu kullanabilirsiniz. str() fonksiyonu int() ile tamamen aynı şekilde çalışıyor.

Kayıt olayı
Bu kadar şeyi yazdıktan sonra kaybolmalarını istemezsiniz herhalde? O halde hemen file'ın altındaki “New Window”a tıklayalım (ya da ctrl + n). Karşımıza beyaz bir pencere çıkacak. Hemen yazmak istediklerimizi yazalım oraya. Mesela:

isim = input(“İsminiz nedir? “)
print(“Hoşgeldin ” + isim + “!”)

Sonra yine File'ın altındaki “Save” seçeneğine tıklıyoruz (ya da ctrl + s). Kaydedeceğimiz yeri seçip dosya adının sonuna “.py” yazarak kaydediyoruz. Bundan sonra iki seçeneğiniz var; ya kaydettiğiniz dosyaya çift tıklayarak açarsınız ya da Run'ın altındaki “Run Module”e tıklarsınız (ya da f5). Eğer çift tıklayarak dosyayı açtıysanız ismi yazdıktan hemen sonra ekranın kapandığını göreceksiniz. Aslında Python önce “Hoşgeldin isim” (artık isme ne yazdıysanız)'i yazdırıyor, ardından bir işlem olmadığı için kendisini sonlandırıyor. Bunu önlemek için en sona input() ekleyebilirsiniz. Hatta input(“Çıkmak için herhangi bir tuşa basınız”) gibi bir açıklama bile girebilirsiniz.

Öyle tahmin ediyorum ki buraya kadar gelmek yarım saatinizi almamıştır. Şimdi size basit bir hesap makinesi yazmaktan bir adım uzakta olduğunuzu söylesem nasıl hissedersiniz? Evet, Python'da her şey gerçekten bu kadar kolay.

if, elif ve else
Bir hesap makinesi yazacağız dedik, kullanıcıdan girdi almayı biliyoruz, o girdiyi işlemeyi biliyoruz. Peki programın girdiye göre davranmasını nasıl sağlayacağız? Cevap if, else ve elif'te. Hemen bir örnek ile açıklayım, önce yeni bir sayfa açalım ve şunları yazalım:

print(“Toplama işlemi için 1 yazın.”)
print(“Çıkarma işlemi için 2 yazın.”)
print(“Çarpma işlemi için 3 yazın.”)
print(“Bölme işlemi için 4 yazın.”)

işlem = input()

a = int(input(“İlk sayıyı giriniz: “))
b = int(input(“İkinci sayıyı giriniz: “))

if işlem == “1”:
    print(a + b)
elif işlem == “2”:
    print(a – b)
elif işlem == “3”:
    print(a * b)
elif işlem == “4”:
    print(a / b)
else:
    print(“Geçersiz işlem”)

input(“Programı kapatmak için bir tuşa basınız”)

Burada if'e kadar her şeyi biliyorsunuz zaten. Sıra if'e geldiğinde Python if'ten sonra yazdığım şarta bakıyor, işlem “1”e eşit mi? Eğer eşit ise print(a + b) diyor ve sonraki şartlara bakmıyor. Yok eğer eşit değil print(a + b)'yi atlıyor ve sonraki şarta bakıyor, eğer işlem “2”ye eşit ise print(a – b) işlemini yapıyor. Bu şekilde 4'e kadar geliyor, eğer işlem 4'e de eşit değilse else'te tanımlı olan işlemi yapıyor, yani ekrana “Geçersiz işlem” yazdırıyor. Burada dikkat etmeniz gereken iki nokta var. Birincisi işlem şuna eşit mi derken “=” yerine “==” kullanmak. Bunun sebebi “=”in bir değeri başka bir değere eşitliyor olması, “==”in ise küçüktür ya da büyüktür gibi bir işlemci olması. İkincisi de bıraktığım boşluklar. İki noktadan sonra tanımladığınız işlemleri aynı sayıda boşluk bırakarak yazmak zorundasınız. Onu da şöyle bir örnek ile açıkayım:

a = input()
if a == “1”:
    print(“a 1'e eşitmiş”)
else:
    print(“a 1 değildi”)

    print(“Trololo”)

input(“Programı sonlandırmak için bir tuşa basınız”)

Burada eğer a'ya 1 değerini verirseniz “a 1'e eşitmiş” satırı bastırılacak. Yok eğer başka herhangi bir değer girerseniz de önce “a 1 değildi” yazacak daha sonra “Trololo” yazacak. Bir de şöyle bir şey deneyelim:

a = input()
if a == “1”:
    print(“a 1'e eşitmiş”)
else:
    print(“a 1 değildi”)
print(“Trololo”)

input(“Programı sonlandırmak için bir tuşa basınız”)

Bu durumda da a ne olursa olsun “Trololo”yu bastıracak. Yani print(“Trololo”) satırı if – else'in dışında olacak. Eğer if'in altına bir if daha yazmak isteseydim bir boşluk daha bırakmam gerekecekti. Bu durum her “:” yazdığınızda geçerli oluyor. Hemen bir örnek vereyim hatta:

a = int(input())

if 1 < a < 4:
    if a == 2:
        print(“a = 2”)
    elif a == 3:
        print(“a = 3”)
else:
    print(“a 1 ve 4 arasında değil”)

input(“Programı sonlandırmak için bir tuşa basınız”)



for döngüsü

for döngüsü Python'nun çok önemli bir öğesidir. Sanırım bunu bir örnekle açıklamak daha kolay olacaktır.

for eleman in "elemanlar listesi":
    print(elaman)

Bu komutu çalıştırırsanız şöyle bir çıktı alırsınız:
e
l
e
m
a
n
l
a
r

l
i
s
t
e
s
i

Burada for komutunu kullanarak  "elemanlar listesi" satırındaki öncelikle ilk harfe eleman ismini verdik, daha sonra print() komutu ile ekrana bastırdık, daha sonra ikinci harfe geçip ona elaman ismini verdik ve bastırdık. Bunu sonuna kadar yaptıktan sonra for döngüsü bitti ve Python koda kaldığı yerden devam etti. Aynı şeyi daha sonra anlatacağım listelerle de yapabilirsiniz, zaten for daha çok listelerle birlikte kullanılıyor. Özellikle birçok öğeye aynı işlemi yapmak isterseniz çok kullanışlı olabiliyor. Asıl faydasını oyun yaparken göreceksiniz. İsterseniz bir cümlede bir harfin kaç kere geçtiğini bulan bir program yazalım ki for döngüsü biraz daha iyi anlaşılsın.

cümle = "Örnek cümlemiz böyle bir şey olsun. Burada belli bir harften kaç tane olduğunu sayacağız."
print(cümle)

harf = input("Saymak istediğiniz harfi yazın: ")

sayaç = 0
for harfler in cümle:
    if harf == harfler:
        sayaç = sayaç + 1

print("Örnek cümlemizde", harf, "harfinden", sayaç, "tane var.")

Sanırım burada yaptıklarımız anlaşılıyor. Önce örnek cümlemizi bastırdık, sonra kullanıcıdan bir karakter girmesini istedik. Karakter sayısını tutması için sayaç diye bir değişken tanımlayıp sıfıra eşitledik. Daha sonra for'un içinde if ile harfler'e atanmış olan her bir harfin kullanıcıdan aldığımız karakter ile aynı olup olmadığını kontrol ettik. Aynı olduğu taktirde de sayacı 1 arttırdık, for döngüsü bitince de print() ile sayacı bastırdık, böylece kullanıcının girdiği karakterin cümle içinde kaç kere geçtiğini bulduk.

Evet arkadaşlar, şimdilik benden bu kadar. En yakın zamanda ikinci dersi de ekleyeceğim ve hatta o dersin sonunda metin tabanlı bir oyun yazabileceksiniz! Bir sonraki derse kadar metin tabanlı oyunlar hakkında bir fikir edinmek isterseniz Zork'u inceleyebilirsiniz. Haydi kendinize iyi bakın!

2 yorum: