Python programlamaya giriş

Cevapla
Kullanıcı avatarı
Misafir

Python programlamaya giriş

Mesaj gönderen Misafir »

Temel Bilgiler¶

Python, Guido Van Rossum adlı Hollandalı bir programcı tarafından 90’lı yılların başında geliştirilmeye başlanmış bir programlama dilidir. 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.

Python, pek çok dile kıyasla öğrenmesi kolay bir programlama dilidir. Bu yüzden, eğer daha önce hiç programlama deneyiminiz olmamışsa, programlama maceranıza Python’la başlamayı tercih edebilirsiniz.

Python programlarının en büyük özelliklerinden birisi, C ve C++ gibi dillerin aksine, derlenmeye gerek olmadan çalıştırılabilmeleridir. Python’da derleme işlemi ortadan kaldırıldığı için, Python’la oldukça hızlı bir şekilde program geliştirilebilir.

Ayrıca Python programlama dilinin basit ve temiz sözdizimi, onu pek çok programcı tarafından tercih edilen bir dil haline getirmiştir. Python’un sözdiziminin temiz ve basit olması sayesinde hem program yazmak, hem de başkası tarafından yazılmış bir programı okumak çok kolaydır.

Python’u kullanabilmek için öncelikle onu bilgisayarımıza kurmamız gerekiyor. İsterseniz sözü daha fazla uzatmadan Python’u nereden ve nasıl edinebileceğimizi öğrenelim.
Python Nereden İndirilir?¶

Python’un en yeni sürümü 3.x numaralıdır. Şu anda en çok kullanılan ve en yaygın sürümler ise 2.x numaralı olanlardır. Pek çok GNU/Linux dağıtımında Python kurulu olarak gelir. Eğer siz de bir GNU/Linux kullanıcısı iseniz muhtemelen sisteminizde Python zaten kuruludur. Ancak sisteminizde kurulu olan bu sürüm büyük ihtimalle Python’un 2.x numaralı bir sürümüdür.

Windows sistemlerinde ise herhangi bir Python sürümü kurulu olarak gelmez. Biz bu sitede Python’un 3.x sürümlerini belgelendireceğiz. Dilerseniz gelin şimdi Python’un 3.x sürümünün GNU/Linux ve Windows’ta nasıl kurulacağını ayrı ayrı inceleyelim:

GNU/Linux Kullanıcıları

Dediğim gibi, eğer GNU/Linux dağıtımlarından birini kullanıyorsanız sisteminizde muhtemelen Python’un 2.x sürümlerinden biri zaten kuruludur. Bunu şu şekilde kontrol edebilirsiniz:

Komut satırında:

python

yazıp enter tuşuna bastığınızda, eğer karşınıza şuna benzer bir ekran geliyorsa, kurulu sürüm 2.x’tir:

Python 2.6.1+ (r261:67515, Mar 2 2009, 13:10:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Burada 2.6.1+ olarak görünen rakam Python’un sürümünü gösteriyor. Bu çıktıya göre, sisteminizdeki Python sürümü 2.6.1. Yani sizde Python’un 2.x numaralı bir sürümü kurulu...

Sisteminizdeki Python sürümünü öğrenmek için şöyle bir yol da izleyebilirsiniz:

Yine komut satırında:

python -V

yazıp enter’e bastığınızda hangi Python sürümünün sisteminizde kurulu olduğu doğrudan görünecektir...

Eğer Python’un 2.x sürümleriyle çalışmak isterseniz, bu sitede 2.x sürümlerine ait belgeler de bulunmaktadır. İstediğiniz buysa sizi http://www.istihza.com/icindekiler_python.html adresine alalım...

Eğer Python’un 3.x sürümünü kullanmak isterseniz okumaya devam ediniz...

GNU/Linux kullanıcılarının, Python’un 3.x sürümünü elde etmek için tercih edebileceği iki yol vardır. Birincisi ve benim size önereceğim yol, öncelikle kullandığınız dağıtımın paket yöneticisini kontrol etmenizdir. Python 3.x sisteminizde kurulu olmasa bile, dağıtımınızın depolarında bu sürüm paketlenmiş halde duruyor olabilir. O yüzden sisteminize uygun bir şekilde paket yöneticinizi açıp orada “python” şeklinde bir arama yapmanızı öneririm. Örneğin Debian tabanlı bir GNU/Linux dağıtımı kullanıyorsanız komut satırında şu komutu vererek depolarınızdaki Python paketlerini listeleyebilirsiniz:

aptitude search python

Eğer bu komutun çıktısı içinde “python3” gibi bir şey görüyorsanız, kurmanız gereken paket odur... Yine Debian tabanlı sistemlerde bu paketi şu şekilde kurabilirsiniz:

sudo apt-get install python3

Örneğin Kubuntu, Debian tabanlı bir GNU/Linux dağıtımıdır. Eğer Kubuntu’nun “Jaunty Jackalope” veya daha üst sürümlerinden birini kullanıyorsanız, yukarıdaki komut yardımıyla python3 paketini sisteminize kurabilirsiniz.

Kullandığınız dağıtımın depolarında python3 paketini bulamazsanız, Python 3.x’i kaynaktan kurmanız gerekecektir. Bunun için yapmanız gereken işlemler şöyle:

1.

Öncelikle şu adresi ziyaret ediyoruz: http://www.python.org/download
2.

Bu adreste, üzerinde “Python 3.x.x compressed source tarball (for Linux, Unix or OS X)” yazan bağlantıya tıklıyoruz.
3.

İlgili .tgz dosyasını bilgisayarımıza indiriyoruz.
4.

Daha sonra, bu sıkıştırılmış dosyayı açıyoruz.
5.

Açılan dosyanın içine girip, orada sırasıyla aşağıdaki komutları veriyoruz:

./configure

make

sudo make altinstall

Böylelikle Python 3.x’i sistemimize kurmuş olduk. Bu arada, yukarıdaki komutları vermeden önce tabii ki sistemimizde gcc ve make adlı araçların kurulu olması gerekiyor...

Yukarıdaki kodlarda “make install” yerine “make altinstall” komutunu kullandığımıza dikkat edin. Python’un kaynak kodlarıyla beraber gelen README dosyasında şöyle bir ibare bulunur:

Installing multiple versions

On Unix and Mac systems if you intend to install multiple versions of Python using the same installation prefix (–prefix argument to the configure script) you must take care that your primary python executable is not overwritten by the installation of a different version. All files and directories installed using “make altinstall” contain the major and minor version and can thus live side-by-side. “make install” also creates ${prefix}/bin/python which refers to ${prefix}/bin/pythonX.Y. If you intend to install multiple versions using the same prefix you must decide which version (if any) is your “primary” version. Install that version using “make install”. Install all other versions using “make altinstall”.

For example, if you want to install Python 2.5, 2.6 and 3.0 with 2.6 being the primary version, you would execute “make install” in your 2.6 build directory and “make altinstall” in the others.

Birden fazla sürümü aynı anda kurmak

Unix ve Mac sistemlerinde eğer birden fazla Python sürümünü aynı önek ile (configure betiğine verilen –prefix argümanı) kuracaksanız, farklı bir Python sürümüne ait çalıştırılabilir dosyanın, birincil Python sürümüne ait çalıştırılabilir dosyayı silip üzerine yazmamasına dikkat etmelisiniz. “make altinstall” ile kurulum yapıldığında bütün dosya ve dizinlerde ana ve alt sürüm numaraları da içerilecektir. Dolayısıyla farklı sürümler yan yana varolabilecektir. “make install” komutu, ${önek}/bin/pythonX.Y dosyasına bağlantı veren ${önek}/bin/python adlı bir dosya oluşturacaktır. Eğer aynı öneki kullanarak birden fazla sürüm kurmak istiyorsanız, hangi sürümün (eğer olacaksa) “birincil” sürümünüz olacağına karar vermelisiniz. Birincil sürümünüzü “make install” ile kurun. Öteki bütün sürümleri ise “make altinstall” ile...

Örneğin Python 2.5, 2.6 ve 3.0 sürümlerini kuracaksanız ve eğer 2.6 sürümünün birincil sürüm olmasına karar vermişseniz, 2.6 sürümünün inşa dizini içinde “make install” komutunu çalıştırın. Öteki sürümleri ise “make altinstall” ile kurun.

Bu noktada bir uyarı yapmadan geçmeyelim: Python özellikle bazı GNU/Linux dağıtımlarında pek çok sistem aracıyla sıkı sıkıya bağlantılıdır. Yani Python, kullandığınız dağıtımın belkemiği durumunda olabilir... Bu yüzden Python’u kaynaktan kurmak bazı riskler taşıyabilir. Eğer yukarıda anlatıldığı şekilde, sisteminize kaynaktan Python kuracaksanız, karşı karşıya olduğunuz risklerin farkında olmalısınız...

Kurduğumuz yeni Python’u nasıl çalıştıracağımızı biraz sonra göreceğiz. Ama önce Windows kullanıcılarının Python 3.x’i nasıl kuracaklarına bakalım.

Windows Kullanıcıları

Windows sürümlerinin hiçbirinde Python kurulu olarak gelmez. O yüzden Windows kullanıcıları, Python’u sitesinden indirip kuracak. Bunun için şu adımları takip ediyoruz:

1. http://www.python.org/download adresini ziyaret ediyoruz.
2. Orada, üzerinde Python 3.x.x Windows installer (Windows binary – does not include source) yazan bağlantıya tıklıyoruz.
3. .msi uzantılı dosyayı bilgisayarımıza indiriyoruz.
4. İnen dosyaya çift tıklayıp normal bir şekilde kurulumu gerçekleştiriyoruz.
5. Eğer ne yaptığınızdan emin değilseniz, kurulum sırasında varsayılan ayarları değiştirmemenizi öneririm...

Windows’ta Python kurulumu bu kadar basittir. Artık bilgisayarımıza kurduğumuz Python programını nasıl çalıştıracağımızı görebiliriz...
Python Nasıl Çalıştırılır?¶

Bir önceki bölümde, Python’u nasıl kuracağımızı farklı platformlara göre anlattık. Bu bölümde ise kurduğumuz bu Python programını hem GNU/Linux’ta hem de Windows’ta nasıl çalıştıracağımızı göreceğiz. Öncelikle GNU/Linux kullanıcılarının Python’u nasıl çalıştıracağına bakalım...

GNU/Linux Kullanıcıları

GNU/Linux kullanıcıları, eğer paket yöneticilerini kullanarak Python kurulumu gerçekleştirmiş iseler, komut satırında şu komutu vererek Python’u başlatabilirler:

python3

Bu komutun ardından şuna benzer bir ekranla karşılaşmış olmalısınız:

Python 3.0.1+ (r301:69556, Feb 24 2009, 13:51:44)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Gördüğünüz gibi, kullandığımız Python sürümü “3.0.1”...

Burada, paket yöneticisinden kurduğunuz paketin adının “python3” olduğunu varsayıyorum. Düşük bir ihtimal de olsa bu paketin adı sizde farklı olabilir. Örneğin Python3 sizin sisteminizde farklı bir ad altında geçiyor olabilir. Mesela, “python3.0” gibi...

Eğer paketin adı python3.0 ise komut satırında şu komutu vermelisiniz:

python3.0

Bu komut da benzer bir şekilde şöyle bir çıktı vermeli:

Python 3.0.1+ (r301:69556, Feb 24 2009, 13:51:44)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python’u ne şekilde başlatacağınızı kesin olarak tespit etmek için /usr/bin adlı klasörün içinde “python” programının hangi adla yer aldığına bakabilirsiniz. Bu klasörün içinde “python” dışında, adında “python” geçen hangi programların olduğunu kontrol edin. Mesela şunlar olabilir: “python3”, “python3.0”, “python3.0.1”

Eğer Python3’ü kaynaktan kuranlardansanız, vereceğiniz komut muhtemelen şu olacaktır:

python3.0

GNU/Linux’ta Python’u nasıl çalıştıracağımızı öğrendiğimize göre, Windows kullanıcılarının durumuna bakabiliriz...

Windows Kullanıcıları

Gelelim Windows kullanıcılarına...

Windows kullanıcıları Python3’ü iki şekilde başlatabilir:

1. Başlat > Programlar > Python3.x > Python (Command Line)* yolunu takip ederek.
2. Python3.x’i YOL’a (PATH) ekledikten sonra DOS ekranında “python” komutunu vererek...

Eğer birinci yolu tercih ederseniz, Python’un size sunduğu komut satırına ulaşırsınız. Ancak Python komut satırına bu şekilde ulaştığınızda bazı kısıtlamalarla karşı karşıya kalırsınız. O yüzden komut satırına bu şekilde ulaşmak yerine ikinci seçeneği tercih edebilirsiniz.

Eğer sisteminizde birkaç farklı Python sürümü kurulu ise ve eğer siz bu eski sürümlerden birini YOL’a eklemişseniz, Python3.0’ı YOL’a eklemeyin. Sisteminde sadece Python3.0 kurulu olan Windows kullanıcıları Python’u YOL’a nasıl ekleyeceklerini öğrenmek için http://www.istihza.com/py2/windows-path.html adresindeki makaleyi inceleyebilirler. (Orada Python26 yerine Python30 ifadesi gelecek...)

Sisteminizde sadece Python3.0 sürümünün kurulu olduğunu ve bu sürümü başarıyla YOL’a eklediğinizi varsayarak bir deneme yapalım. Başlat > Çalıştır yolunu takip ederek, açılan pencerede “cmd” komutunu verelim ve Windows komut satırına ulaşalım. Orada şu komutu verelim:

python

Eğer sisteminizde başka bir Python sürümü kurulu değilse veya siz kurulu olan sürümü daha önceden YOL’a eklememişseniz, yukarıdaki komutu verdiğinizde Python3.0 çalışmaya başlayacaktır. Şuna benzer bir çıktı almalısınız:

Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit (Intel)] on
win32 Type "help", "copyright", "credits" or "license" for more information.
>>>

Eğer sisteminizde eski bir Python sürümü kuruluysa ve siz bu sürümü daha önceden YOL’a eklemişseniz, “python” komutunu verdiğinizde Python3 yerine, sistemimizdeki eski Python sürümü açılacaktır. Çünkü Windows’taki bütün Python sürümlerinin çalıştırılabilir (exe) dosyaları “python.exe” şeklinde adlandırıldığı için, DOS ekranında yazacağınız “python” komutu eski sürümü çalıştıracaktır. Dediğim gibi, eğer eski sürümü önceden YOL’a eklemişseniz, yeni kurduğunuz Python3’ü YOL’a eklemeyin. Bunun yerine, basit bir .bat dosyası yazmamız yeterli olacaktır. Nasıl mı?

Notepad yardımıyla boş bir metin belgesi açın ve bu metin belgesinin içine şu satırı ekleyin:

@c:\python30\python.exe %*

Şimdi bu dosyayı “python3.bat” adıyla kaydedin ve daha önce YOL’a eklediğiniz eski sürüm Python’un bulunduğu klasörün içine atın (mesela C:python26).

Artık “cmd” ile ulaştığınız komut satırında sadece “python3” yazıp enter’e basarak Python3’ü çalıştırabilirsiniz. Sadece “python” komutu verdiğinizde ise sisteminizdeki eski sürüm Python açılacaktır. Tabii ki bu eski sürümü daha önceden YOL’a eklemiş iseniz...

Bu arada, oluşturduğunuz .bat dosyasını Python26 klasörünün içine atmak yerine, Python’a ilişkin .bat dosyalarını özel bir klasörde toplayıp bu klasörü YOL’a ekleyerek de işinizi halledebilirsiniz. Örneğin benim Windows yüklü bilgisayarımda Python’un 2.5, 2.6 ve 3.0 sürümleri birlikte kurulu... Ben “yol” adını verdiğim bir klasör oluşturup bu klasörü “C:” dizininin içine attım. Daha sonra “C:\yol” dizinini YOL’a ekledim. Ardından Python2.5 ve Python3.0 sürümleri için iki ayrı .bat dosyası oluşturdum. Bunlardan birini “python25.bat”, ötekini de “python3.bat” olarak adlandırdım. “python25.bat” dosyasının içeriği şöyle:

@c:\python25\python.exe %*

“python3.bat” dosyasının içeriği ise şöyle:

@c:\python30\python.exe %*

Bu şekilde, “cmd” ile ulaştığım komut satırında “python3” komutunu verdiğimde “Python3.0” sürümünün ekranı açılıyor:

Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit (Intel)] on
win32 Type "help", "copyright", "credits" or "license" for more information.
>>>

Eğer “python25” komutunu verirsem, “Python2.5” sürümüne ait komut ekranı açılıyor:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
win32 Type "help", "copyright", "credits" or "license" for more information.
>>>

“Python2.6” sürümüne ise sadece “python” yazarak ulaşabiliyorum:

Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on
win32 Type "help", "copyright", "credits" or "license" for more information.
>>>

İsterseniz siz de böyle bir çalışma şekli benimseyebilirsiniz...
FreeBSD’de Python¶

Yukarıda Python 3.x’in GNU/Linux ve Windows sistemlerine nasıl kurulacağını ve nasıl çalıştırılacağını anlattık. Python’un FreeBSD sistemine nasıl kurulacağını öğrenmek isterseniz http://www.istihza.com/denemeler/freebsd.7z adlı dosyayı indirerek, bu sıkıştırılmış klasör içindeki video dosyalarını izleyebilirsiniz. Klasör içinde ayrıca FreeBSD kurulumunu gösteren bir video da bulunuyor. FreeBSD üzerinde Python’un nasıl kurulup kullanılacağına ilişkin videoları hazırlayan Mahmut Çetin‘e teşekkür ederim.

Videoları 7z adlı yazılımla sıkıştırdım. Videoların özgün boyutu toplam 223 MB’dir. İndireceğiniz sıkıştırılmış klasörün boyutu 7z yardımıyla 2 MB’ye kadar azaltılmıştır.

Ubuntu GNU/Linux kullanıcıları bu dosyayı açabilmek için şu komut yardımıyla 7z yazılımını sistemlerine kurabilir:

sudo apt-get install p7zip-full

Yazılımı kurduktan sonra sıkıştırılmış dosyaya sağ tıklayıp “buraya aç” seçeneği yardımıyla dosyayı açabilirsiniz.

Windows kullanıcıları ise gerekli yazılımı http://www.7-zip.org/ adresinden indirebilir.
Python’un Etkileşimli Kabuğu ve print() Fonksiyonu¶

Bir önceki bölümde Python’un farklı sistem ve durumlarda nasıl çalıştırılacağını görmüş, Python’u anlattığımız şekilde çalıştırdığınız zaman karşınıza şuna benzer bir ekranın geleceğini söylemiştik:

Python 3.0.1+ (r301:69556, Feb 24 2009, 13:51:44)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Bu ekrana Python dilinde “etkileşimli kabuk” (interactive shell) adı verilir. Bu, bizim Python programlama dili ile ilişki kurabileceğimiz, yani onunla etkileşebileceğimiz bir üst katmandır. Etkileşimli kabuk, asıl programımız içinde kullanacağımız kodları deneme imkanı sunar bize... Burası bir nevi “test alanı” gibidir. Örneğin bir Python kodunun çalışıp çalışmadığını denemek veya nasıl çalıştığını, ne sonuç verdiğini görmek istediğimizde bu ekran son derece faydalı bir araç olarak karşımıza çıkar. İsterseniz konuyu daha fazla lafa boğmayalım. Zira etkileşimli kabuğu kullandıkça bunun ne büyük bir nimet olduğunu siz de anlayacaksınız. Özellikle derlenerek çalıştırılan programlama dilleri ile uğraşmış olan arkadaşlarım, etkileşimli kabuğun gücünü gördüklerinde, göz yaşlarına hakim olamayacaklar...

Şimdi kendi sistemimize uygun bir şekilde etkileşimli kabuğu çalıştırıyoruz. Bu ekrana nasıl ulaşacağımızı bir önceki konuda ayrıntılı olarak anlatmıştık. Etkileşimli kabuğa ulaşmak konusunda sıkıntı yaşıyorsanız bir önceki konuyu tekrar gözden geçirmenizi tavsiye ederim.

Etkileşimli kabuğu çalıştırdığımızda ekranda görünen “>>>” işareti Python’un bizden komut almaya hazır olduğunu gösteriyor. Python kodlarımızı bu “>>>” işaretinden hemen sonra, hiç boşluk bırakmadan yazacağız. İsterseniz basit bir deneme yapalım. “>>>” işaretinden hemen sonra, hiç boşluk bırakmadan şu komutu yazıyoruz:

print("Merhaba Zalim Dünya!")

Bu komutu yazıp “enter” tuşuna bastığımızda, eğer herhangi bir yazım hatası yapmamışsak, şöyle bir çıktı almış olmalıyız:

Merhaba Zalim Dünya!

Gördüğünüz gibi, print() adlı fonksiyon, ekrana çıktı vermemizi, yani yazı yazdırmamızı sağlıyor... Bu arada, bu “fonksiyon” kelimesine fazla takılmayın. İlerde bunun ne demek olduğunu ayrıntılı bir şekilde inceleyeceğiz. Şimdilik print() ifadesinin bir “fonksiyon” olduğunu bilmemiz yeterli olacaktır.

Burada dikkat etmemiz gereken bazı noktalar var:

Komutumuzu “>>>” işaretinden hemen sonra veriyoruz. Python’a yeni başlayanların en sık yaptığı hatalardan bir tanesi, print()‘in “p”si ile “>>>” işareti arasında bir boşluk bırakmalarıdır. Eğer “p” harfi ile “>>>” işareti arasında boşluk bırakırsak, Python bize bir hata mesajı gösterecektir. O yüzden boşluklara dikkat ediyoruz...

print() fonksiyonunu oluşturan bütün harflerin küçük olduğuna dikkat edin. Python açısından, “print” ve “Print” kelimeleri birbirinden farklıdır. Bizim fonksiyonumuzun adı print()‘tir. Başka bir şey değil...

print() fonksiyonunda, parantez içindeki ifadenin tırnak içinde gösterildiğine özellikle dikkat ediyoruz. Burada çift veya tek tırnak kullanmamız önemli değildir. Yani yukarıdaki kodu şöyle de yazabiliriz:

print('Merhaba Zalim Dünya!')

Yalnız dikkat etmemiz gereken şey, hangi tırnakla başladıysak onunla bitirmemiz gerektiğidir. Yani eğer başta çift tırnak kullandıysak, sonda da çift tırnak kullanmalıyız. Aynı şey tek tırnak için de geçerlidir. Yani Python açısından tek veya çift tırnak kullanmamızın değil, tutarlı olmamızın önemi vardır. Peki neden iki farklı tırnak çeşidi var?

Ekrana şöyle bir çıktı vermek istediğimizi varsayın:

Python programlama dilinin adı “piton” yılanından gelmez...

Yukarıdaki çıktıyı alabilmek amacıyla etkileşimli kabukta “>>>” işaretinden hemen sonra aşağıdaki komutu verip enter tuşuna basın. Bakalım ne olacak?

print("Python programlama dilinin adı "piton" yılanından gelmez...")

Ne oldu? Bu komut bize sinir bozucu bir hata mesajı verdi, değil mi?

File "<stdin>", line 1
print("Python programlama dilinin adı "piton" yılanından gelmez...")
^
SyntaxError: invalid syntax

Dikkat ederseniz, yukarıdaki hata mesajında “piton” kelimesinin hemen altında minik bir ok işareti görünüyor. Bu ok işareti, ortaya çıkan hatanın nerede olduğu konusunda bize ipucu veriyor. Buradaki hata, tırnak işaretlerinin kullanımından kaynaklanıyor. Biz cümlemize çift tırnak ile başladık. Ama cümle içinde “piton” kelimesinde de birer adet çift tırnak kullandık. Ayrıca cümlemizi de çift tırnak ile bitirdik. İşte bu noktada Python’un kafasının karışmasına neden olduk. Python böyle bir yapı ile karşılaştığında, “piton” kelimesinin başındaki çift tırnak nedeniyle cümlenin nerede başlayıp nerede bittiğini anlayamıyor. İlk çift tırnaktan sonra gördüğü ikinci çift tırnağın cümle sonu olduğunu zannediyor. Ama “piton” kelimesinin sonunda da bir çift tırnak olduğunu görünce bir şeylerin ters gittiğini düşünüyor ve bize bir hata mesajı gösteriyor. Zaten gördüğünüz gibi, ok işareti de bu üçüncü çift tırnağın olduğu yerde duruyor. Yani Python’un kafası tam olarak o noktada karışmış... Bize düşen görev, Python’un kafa karışıklığını gidermek. Bunu şöyle yapabiliriz:

>>> print('Python programlama dilinin adı "piton" yılanından gelmez...')

Python programlama dilinin adı "piton" yılanından gelmez...

Gördüğünüz gibi, bu komutta, hatayı önlemek için cümlemize tek tırnak ile başladık ve cümlemizi tek tırnak ile bitirdik. Cümle içindeki “piton” kelimesini ise çift tırnak ile göstererek karışıklığı önledik. Böylece bu komutla istediğimiz çıktıyı almış olduk...

Demek ki, Python’da ekrana çıktı verirken, tırnak işaretlerini dikkatli kullanıyoruz.

Bu arada yukarıdaki kodlar içinde görünen “>>>” işaretini siz yazmayacaksınız. Bu işareti etkileşimli kabuğun görünümünü temsil etmek için yerleştirdik oraya... Siz ilk satırı yazdıktan sonra doğruca enter tuşuna basacaksınız.

Şimdi şu cümleye bakalım:

Python’u yazan kişi Guido Van Rossum adlı bir programcıdır...

Acaba bu cümleyi, print() fonksiyonunu kullanarak ekrana nasıl yazdırmalıyız? Evet, tam tahmin ettiğiniz gibi:

>>> print("Python'u yazan kişi Guido Van Rossum adlı bir programcıdır...")

Python'u yazan kişi Guido Van Rossum adlı bir programcıdır...

“Python’u” kelimesinde geçen ayraç işareti nedeniyle cümlemize tek tırnakla başlamıyoruz. Eğer cümleye tek tırnakla başlarsak, Python o tek tırnak işareti yüzünden, cümlenin nerede başlayıp nerede bittiğini anlayamayacak ve bize bir hata çıktısı verecektir. İşte biz de bunu önlemek için yukarıdaki gibi bir önlem alıyoruz...

Gördüğünüz gibi, Python’un hem çift tırnağa hem de tek tırnağa müsaade etmesi bize bazı durumlarda büyük bir kolaylık sağlıyor. Demek ki birden fazla tırnak kullanılması boşuna değil...

Eğer ekrana herhangi bir şey yazdırmak yerine, bir satır boşluk bırakmak isterseniz, print() fonksiyonunu boş olarak kullanabilirsiniz. Yani şöyle:

>>> print()

Bu komutu verip enter’e bastığımızda etkileşimli kabuğun bir boşluk bırakıp alt satıra geçtiğini görüyoruz...

Etkileşimli kabukta çalışırken, print() fonksiyonunu kullanmasak da yazdığımız cümleler ekrana çıktı olarak verilecektir. Yani şöyle bir kullanım etkileşimli kabukta çalışırken mümkündür:

>>> "Lütfen kullanıcı adı ve parolanızı giriniz"

'Lütfen kullanıcı adı ve parolanızı giriniz'

Gördüğünüz gibi, print() fonksiyonunu kullanmasak da ekrana çıktı alabiliyoruz. Ama bu durum sizi yanıltmasın. Bu özellik sadece etkileşimli kabuğa mahsustur. İlerde kodlarımızı dosyalara yazıp kaydettiğimiz zaman, ekrana çıktı verebilmek için mutlaka print() fonksiyonunu kullanmamız gerekir. Eğer programlarımız içindeki cümleleri print() fonksiyonu ile kullanmazsak, programı çalıştırdığımızda, yazdığımız cümleyi Python görür, ama biz ve kullanıcılarımız göremeyiz!

Bu arada print() fonksiyonu ile veya onsuz yazdığımız cümlelerdeki Türkçe karakterlerin çıktıda herhangi bir soruna sebep olmadığına dikkat edin. print() fonksiyonu olmadan yazılan cümlelerdeki Türkçe karakterlerin düzgün görünmesi, Python 3.x ile gelen bir özelliktir. Eğer yukarıdaki cümleyi Python’un 2.x sürümlerinden birinde verseydik, şöyle bir tabloyla karşılaşacaktık:

>>> "Lütfen kullanıcı adı ve parolanızı giriniz"

'L\xc3\xbctfen kullan\xc4\xb1c\xc4\xb1 ad\xc4\xb1 ve parolan\xc4\xb1z\xc4\xb1 giriniz'

Bunun dışında, bu bölümde öğrendiğimiz print() fonksiyonu da Python 3.x’le birlikte mutasyon geçiren özelliklerden biridir. Bu yazıda öğrendiğimiz:

print("Merhaba Zalim Dünya!")

komutunu Python’un 3.x öncesi sürümlerinde:

print "Merhaba Zalim Dünya"

şeklinde yazıyorduk...

Böylece Python’da print() fonksiyonunun ne olduğunu ve ne işe yaradığını öğrenmiş olduk. İlerde kodlarımızı dosyalara kaydettiğimiz zaman bu fonksiyonu bol bol kullanacağız. Bu konuyu bitirdiğimize göre, artık yeni bir konuya geçebiliriz.
Python’da Basit Matematik İşlemleri¶

Bir önceki bölümde nasıl başlatacağımızı ve nasıl kullanacağımızı öğrendiğimiz etkileşimli kabuk üzerinde biraz daha çalışmaya devam edeceğiz. Etkileşimli kabuk aslında Python’da asıl çalışma ortamımız değildir. Kodlarımızı esas olarak dosyalara kaydedeceğiz. Ama etkileşimli kabuk bize, asıl programlarımızı yazmaya başlamadan önce Python’a aşinalık kazanma fırsatı verecek... Etkileşimli kabuk; kod alıştırması yapma ve kodları test etme gibi işlerimiz için harika bir araçtır.

Bu bölümde, Python’da basit matematik işlemlerini nasıl yapabileceğimizi öğreneceğiz. Python’la hiç bir şey yapamasak bile, onu basit bir hesap makinesi yerine kullanabiliriz. Şimdi etkileşimli kabuğu açıp çalışmaya başlayalım:

>>> 5 + 2

7

Gördüğünüz gibi, Python matematikten anlıyor.. Üstelik yukarıdaki kodda bize yabancı gelecek hiçbir öğe yok. Tıpkı bildiğimiz matematikte olduğu gibi, “+” işareti “toplama” anlamına geliyor. Bir de şuna bakalım:

>>> 3457 - 2456

1001

Burada da bir sıkıntı yok. Her şey sıradan... Peki çarpma ve bölme işlemleri için ne kullanacağız? Onlara da bakalım:

Çarpma işlemi için “*” işaretini kullanıyoruz:

>>> 6 * 5

30

Bölme işlemi için ise “/” işaretini:

>>> 5 / 2

2.5

Python için, işleme alınan sayıların büyüklüğü küçüklüğü önemli değildir. Python çok büyük (veya çok küçük) sayıları hiçbir sorun çıkarmadan çarpabilir, toplayabilir, çıkarabilir veya bölebilir...

Yalnız, birden fazla matematik işlemini aynı anda yaparken bir konuya dikkat etmemiz gerekir. Mesela size şöyle bir soru soralım: Sizce aşağıdaki işlemin sonucu kaçtır?:

>>> 5 * 2 + 4 / 2

Eğer yukarıdaki işlemin sonucu beklediğiniz gibi çıkmadıysa, “işlem önceliği” (operator precedence) denen kavramı gözardı etmişsiniz demektir. Matematik derslerinden hatırladığımız “işlem önceliği” kuralı Python’da da geçerlidir. Bu kurala göre; çarpma ve bölme işlemleri, toplama ve çıkarma işlemlerinden önce yapılır. Yani yukarıdaki ifadede önce “5 * 2” işlemi, ardından “4 / 2” işlemi yapılacak, daha sonra bu iki işlemin sonucu birbiriyle toplanacaktır. Python’un kullandığı işlem sırasını değiştirmek için parantez işaretlerinden yararlanabilirsiniz. Örneğin yukarıdaki işlemin “7” sonucunu vermesi için ifadeyi şöyle düzenlemeniz gerekir:

>>> (5 * 2 + 4) / 2

7.0

Öncelikli olarak yapılmasını istediğimiz işlemleri parantez içine aldığımıza dikkat edin. Bu şekilde, önce “5” ile “2” sayısı çarpılacak, ardından bu işlemin sonucuna “4” eklenecek ve çıkan değer “2”ye bölünecektir.

Matematik işlemleri yaparken, bu şekilde parantezler kullanarak işlemin istediğiniz gibi sonuç vermesini garanti edebilirsiniz.

Şimdiye kadar Python’da “+”, “-“, “*” ve “/” işaretlerini gördük. Bu işaretlere “işleç” (operator) adı verilir. Gelin isterseniz Python’da daha başka hangi faydalı işleçlerin olduğuna bir göz gezdirelim:

“%” işleci

Bir bölme işleminde, kalan sayıyı bulmak için “%” işaretinden yararlanıyoruz:

>>> 5 % 2

1

Demek ki “5” sayısını “2”ye böldüğümüzde, bölme işleminden artan sayı, yani “kalan”, 1 oluyormuş...

Bir de şu işlemin sonucuna bakalım:

>>> 10 % 2

0

Kalan “0” olduğuna göre, demek ki “10” sayısı “2”ye tam bölünüyormuş... Peki bu bilgi bizim ne işimize yarar? Mesela “%” adlı işlecin verdiği sonuca bakarak, sayıların çift mi yoksa tek mi olduğunu denetleyebiliriz. “herhangibirsayı % 2” işleminin sonucu “0” ise o sayı çifttir. Eğer sonuç “1” ise o sayı tektir... Eğer ilkokul öğrencilerine basit matematik kavramlarını öğreten bir program yazmayı planlıyorsanız bu işleç işinize yarayacaktır. Hatta ileride bu işlecin hiç tahmin etmediğiniz yerlerde de işinize yarayacağını görürseniz şaşırmayın...

“//” işleci

Python’da kullanabileceğimiz başka bir işleç ise şudur: “//”. Bu işleç, bir bölme işleminde sonucun sadece tamsayı kısmını almamızı sağlar. Hemen bir örnek vererek durumu somutlaştıralım:

>>> 9 // 2

4

Gördüğünüz gibi, sonuç tamsayı şeklinde. Yani sonucumuz ondalık kısmı içermiyor. Normalde “9” sayısı “2” sayısına bölündüğünde şu sonucu elde ederiz:

>>> 9 / 2

4.5

Aynı işlemi “9 // 2” şeklinde yaptığımızda ise ondalık kısım atılır, ekrana sadece tamsayı kısım verilir... İlk bakışta bu işleç çok manalı gelmeyebilir, ama ileride mutlaka, ondalık sayı yerine tamsayı elde etmek istediğiniz durumlarla karşılaşacaksınızdır.

“**” işleci

Bu işleç, bir sayının kuvvetlerini hesaplamak için kullanılır. Üslü sayıları bulmak için bu işleçten yararlanacağız. Örneğin:

>>> 2 ** 3

8

Demek ki “2” sayısının üçüncü kuvveti “8” imiş... Mesela 1453 sayısının karesini şöyle bulabiliriz:

>>> 1453 ** 2

2111209

Ya da 15 sayısının 3. kuvvetini şöyle bulabiliriz:

>>> 15 ** 3

3375

Python’da bunların dışında daha pek çok işleç bulunur. Ama içlerinde şu anda en çok işimize yarayacak, en temel işleçler bunlardır. İlerde öteki işleçleri de inceleyeceğiz.

Şu ana kadar Python’un temellerine ilişkin pek çok şey söyledik. Örneğin en temel öğelerden biri olan print() fonksiyonunu ve bu fonksiyonun ne işe yaradığını öğrendik. Bunun yanısıra Python’da sayıların kullanımına da şöyle bir göz gezdirdik. print() fonksiyonunu işlerken, bu fonksiyonun ekrana çıktı vermek için kullanıldığını, bu fonksiyonla birlikte kullandığımız cümleleri tırnak içine almamız gerektiğini söylemiştik. Yalnız bu bölümde dikkatinizi çekti mi bilmiyorum, ama farkettiyseniz yukarıdaki kodların hiçbirinde tırnak işareti kullanmadık. Şimdi gelin isterseniz bunun nedenlerini tartışalım...
Karakter Dizileri (strings)¶

Python’da çok önemli iki adet öğe vardır. Bunlardan biri “karakter dizileri” (strings), ikincisi ise “sayılar”dır (numbers). “Sayı”nın ne olduğu adından belli. Peki bu “karakter dizisi” denen şey de ne oluyor? Aslında print() fonksiyonunu anlatırken karakter dizilerini kullandık. Yalnız orada kafa karıştırmamak için “karakter dizisi” yerine “cümle” deyip geçmiştik. Şimdi ise sizlere hakikati söylemenin zamanı geldi dostlar! Evet, daha önce “cümle” dediğimiz şey esasında Python’cada “karakter dizisi”dir. İngilizce konuşanlar buna “string” diyor... Peki karakter dizisi denen şeyi gördüğümüzde nasıl tanıyacağız? Tabii ki tipine bakarak... Python’da karakter dizileri tırnak içinde gösterilir. Yani şu aşağıda gördüğümüz şey bir karakter dizisidir:

"Merhaba Zalim Dünya!"

Bu karakter dizisini ekrana yazdırmak için, bildiğiniz gibi şu komutu kullanıyoruz:

print("Merhaba Zalim Dünya!")

Yani “karakter dizisi”; içinde bir veya daha fazla sayıda karakter barındıran bir dizidir. Dolayısıyla bir “şey”in karakter dizisi olabilmesi için birden fazla karakter içeriyor olması şart değildir. Python’da tek bir karakter dahi, “karakter dizisi” sınıfına girer. Bu sebeple aşağıdaki “şey” de bir karakter dizisidir:

"c"

Hatta bir şeyin karakter dizisi olabilmesi için harf olması da gerekmez. Kabaca söylemek gerekirse, tırnak içinde gösterebileceğimiz her şey bir karakter dizisir. Boşluk karakteri de dahil...

Karakter dizilerini anladık sayılır. “Sayılar”ı ise zaten adından ötürü rahatlıkla anlayabiliyoruz. Mesela şu örnek bir sayıdır:

12354

Ama dikkat edin! Şu örnek bir sayı değildir:

"12354"

Tırnak içinde gösterilen “12354” bir karakter dizisidir. Dediğimiz gibi, Python’da tırnak içinde gösterilen her şey bir karakter dizisidir. Karakter dizilerini basitçe böyle ayırt edebiliriz. Bu durumu şu örneklerle teyit edelim:

>>> 12354 + 3444

15798

İsterseniz bunu bir de print() fonksiyonu ile gösterelim. Zaten normalde hep bu şekli kullanmamız yararlı olacaktır:

>>> print(12354 + 3444)

15798

Bir de şuna bakalım:

>>> print("12354 + 3444")

12354 + 3444

Gördüğünüz gibi, bu defa çıktımız farklı oldu. Neden? Çünkü dediğimiz gibi, tırnak işareti olmayan 12354 veya 3444 birer sayıdır, ama tırnak işareti olan “12354” veya “3444” birer karakter dizisidir. Aritmetik işlemleri sayılarla yapılır, karakter dizileriyle değil... Dolayısıyla Python, “Merhaba Zalim Dünya“ya nasıl davranıyorsa, “12354 + 3444“e de aynı şekilde davranıyor. Bunun için Python’u suçlayamayız...

Hatta şöyle ilginç bir örnek de verebiliriz:

>>> print("12354" + "3444")

123543444

Gördüğünüz gibi, iki tane karakter dizisiyle karşılaşan Python (“12354” ve “3444”), “artı” (+) işaretini bu iki karakter dizisini birleştirmek için kullandı. Eğer artı işaretinin beraber kullanıldığı öğeler birer sayı olsaydı, Python bunları yan yana yazmak yerine, birbirleriyle toplayacaktı.

Yukarıdaki örneklerin bize gösterdiği gibi, bazı işleçler, birlikte kullanıldıkları öğelerin tipine göre farklı anlamlar taşıyabilir. Yukarıda da şahit olduğumuz gibi, eğer söz konusu olan şey sayılar ise, “artı” işareti bir aritmetik işlem yapılmasını sağlayacaktır. Ama eğer söz konusu olan şey karakter dizileri ise, “artı” işareti bu karakter dizilerini bir araya getirme görevi görecektir. Mesela daha önce çarpma işlemlerinde kullandığımız “*” işareti de birlikte kullanıldığı öğelerin tipine göre farklı anlamlar taşıyabilir:

>>> print("yavaş"*2)

yavaşyavaş

Python burada “yavaş” karakter dizisini iki kez tekrar etti. Ama dikkat ederseniz, “yavaş” adlı karakter dizisini tekrar ederken araya boşluk koymadı. Tabii ki Python bizim ne istediğimizi bilemez. Python’un istediğimizi yapabilmesi için bizim ona yardımcı olmamız gerekir. Yukarıdaki kodları şöyle yazarsak, çıktı daha düzgün görünecektir:

>>> print("yavaş "*2)

yavaş yavaş

“yavaş” adlı karakter dizisinin kapanış tırnağını koymadan önce bir boşluk bırakarak emelimize ulaştık... Python çıktıda o boşluk karakterini de göreceği için, iki tane “yavaş” kelimesi çıktıda boşluklu olarak görünecektir.

Yalnız bazı durumlarda karakter dizisinin sonuna böyle boşluk eklemek mümkün olmayabilir. Eğer öyle bir durumla karşılaşırsak, şöyle bir şey de yapabiliriz:

>>> print(("yavaş" + " ")*2)

yavaş yavaş

Gördüğünüz gibi, burada sanki bir matematik işlemi yapar gibi, parantezleri kullanarak Python’a yol gösterdik. Matematikteki işlem önceliği kuralının burada nasıl işlediğine dikkat edin.

Karakter dizileri (strings) tabii ki yukarıda anlattıklarımızla sınırlı değildir. Ama şimdilik bizim bilgimiz sınırlı olduğu için, Python’daki karakter dizilerinin bütün imkanlarını burada önünüze seremiyoruz. Python’la ilgili birkaç şey daha öğrendikten sonra karakter dizilerini etkili bir şekilde kullanmayı da öğreneceğiz. Zira karakter dizileri, Python’un en güçlü olduğu alanlardan birisidir.

Bu konuyu da böylece tamamlamış olduk. Henüz söylenmesi gereken her şeyi söyleyemedik, ama Python’da sağlam bir temel atmamımızı sağlayacak pek çok önemli bilgiyi konular arasına serpiştirdik. Bu ilk bölümleri sindire sindire çalışmak, ilerde kemikli konuları daha kolay öğütmemizi sağlayacaktır.

Bir sonraki bölümde, Python’da hareket kabiliyetimizi bir hayli artıracak bir konuyu inceleyeceğiz: Değişkenler
Değişkenler¶

Bir önceki bölümün sonunda da belirttiğimiz gibi, değişkenler Python’daki esnekliğimizi, hareket kabiliyetimizi bir hayli artıracak olması bakımından epey önemli bir konudur. Bu konuyu işledikten sonra, artık asıl çalışma alanımız olan dosyalara geçebilecek kadar bilgi sahibi olmuş olacağız. Yani bu konuyu da atlattıktan sonra gerçek anlamda ilk programlarımızı yazmaya başlayabileceğiz.

Biz burada “değişken” kavramını tanımlamaya uğraşmakla vakit kaybetmeyeceğiz. Bir kısmımız bu kavrama zaten pek de yabancı değiliz. Öbür kısmımız ise verdiğimiz ilk örnekte bunun ne olduğunu, ne işe yaradığını derhal anlayacaktır... Dolayısıyla bir an önce örneklerimize geçelim:

Mesela şu örneğe bir bakalım:

>>> n = 10

Burada “n” adlı bir ifadeye, “10” değerini atadık. Yani, değeri 10 olan “n” adlı bir değişken tanımladık. Artık “n” değişkeninin değerine şu şekilde ulaşabiliriz:

>>> print(n)

10

Gördüğünüz gibi, 10 değerini elde etmek için “n” değişkenini ekrana yazdırmamız yeterli oluyor.

Bu şekilde bir değişken tanımladıktan sonra, bu değişkeni türlü şekillerde kullanabiliriz. Örneğin bu değişkenle matematik işlemleri yapabiliriz:

>>> print(n * 5)

50

Tabii ki yukarıdaki değişkenle matematik işlemleri yapabilmemiz, bu değişkenin değerinin bir sayı olmasından kaynaklanıyor. Eğer “n” değişkeninin değeri bir karakter dizisi olsaydı yukarıdaki komuttan alacağımız çıktı çok farklı olacaktı. Bakalım:

>>> n = "10"

Böylece “n” değerini yeniden tanımlamış olduk. Artık “n” değişkeninin değeri 10 değil, “10”... Yani sayı değil, karakter dizisi. Bunu şu şekilde teyit edebiliriz:

>>> print(n * 5)

10101010101010101010

Gördüğünüz gibi, bu defa Python 5 adet 10’u yan yana dizdi. Bunun sebebini biliyorsunuz. Aritmetik işlemleri sayılarla yapılır, karakter dizileriyle değil...

Gelin isterseniz birkaç tane daha değişken tanımlayarak elimizi alıştıralım:

>>> isim = "istihza"

Burada, değeri “istihza” olan, isim adlı bir değişken tanımladık. Buna şöyle ulaşabiliriz:

>>> print(isim)

istihza

Bu değişkeni istersek başka karakter dizileriyle birlikte kullanarak daha karışık işlemler de yapabiliriz. Mesela:

>>> print("Benim adım", isim)

Benim adım istihza

Burada, “Benim adım” adlı karakter dizisinden sonra bir virgül koyduğumuza ve “isim” adlı değişkeni ne şekilde kullandığımıza dikkat edin. Bununla ilgili benzer bir örnek daha yapalım:

>>> konu = "değişkenler"

>>> print("Bu dersimizin konusu", konu)

Bu dersimizin konusu değişkenler

Elbette, değişkenimizi sadece en sonda kullanmak zorunda değiliz. Bunu aralara da yerleştirebiliriz. Örneğin şöyle bir kod parçası yazdığımızı düşünün:

tarih = "12 Ekim 2007"

ziyaret_sayısı = "123456789"

print("Bu siteye", tarih, "tarihinden bu yana", ziyaret_sayısı, "defa tıklanmıştır.")

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

Bu siteye 12 Ekim 2007 tarihinden bu yana 123456789 defa tıklanmıştır.

Burada değişkenlerle ilgili olarak dikkatimizi çeken bazı noktalar var:

Değişken adı belirlerken Türkçe karakter kullanabiliyoruz. Gördüğünüz gibi, “ziyaret_sayisi” demek yerine, “ziyaret_sayısı” diyebildik... Bu özellik Python3.0 ile gelen bir güzelliktir. Python’un 2.x sürümlerinde aynı değişkeni “ziyaret_sayisi” şeklinde tanımlamamız gerekecekti.

Eğer değişken adı olarak birden fazla kelime kullanacaksak, kelimeler arasında boşluk bırakmıyoruz. Kelimeleri bitişik olarak yazabileceğimiz gibi, burada gördüğümüz şekilde kelimeler arasına alt çizgi işareti de koyabiliriz.

Ayrıca yine virgülleri nasıl kullandığımıza özellikle dikkat ediyoruz...

Bunların dışında değişken adları ile ilgili birkaç kural daha vardır...

Değişken adları asla bir sayıyla başlamaz. Kelimenin ortasında veya sonunda sayı bulunabilir, ama başında bulunamaz... Mesela “3sayı” geçerli bir değişken adı değildir. Ama “s3ayı” veya “sayı3” geçerli birer değişken adıdır.

Ayrıca, bazı özel kelimeler vardır ki, bunları değişken adı olarak kullanamayız. Bunlar şöyle listelenebilir:

and, del, from, not, while, as, elif, global, or, with, assert, else, if, pass, yield, break, except, import, print, class, exec, in, raise, continue, finally, is, return, def, for, lambda, try

Elbette bu listeyi ezberlemenize gerek yok. Programınız değişkenlerle ilgili anlamsız hatalar verdiğinde gelip bu listeyi kontrol edebilirsiniz... Ayrıca etkileşimli kabukta şu komutu vererek de yukarıdaki listeyi elde edebilirsiniz:

>>> help("keywords")


En son Anonymous tarafından 21 Şub 2011 , Pzt 9:24 pm tarihinde darbelendi.
Cevapla

“Yazılım” sayfasına dön

Kimler çevrimiçi

Bu forumu görüntüleyen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir