arşiv

‘Python’ kategorisi için arşiv

Yeni Python3 Belgeleri

Pazartesi, 02 Oca 2012

Uzun süredir üzerinde çalıştığım yeni Python3 belgelerinin bir kısmını bugün yayımladım. Bu belgelere http://www.istihza.com/beta/py3/icindekiler_python.html adresinden ulaşabilirsiniz.

Aslında elimde sitede gördüğünüzden daha fazla belge var, ama bu belgeleri yayımlayabilmek için, içeriğin hazır olması yetmiyor ne yazık ki. Belgelerin sunumu ile de epey uğraşmak lazım. O yüzden, bu belgeleri yayımlanabilir hale getirebilmek için bunların üzerinde biraz daha çalışmam gerekiyor. Belgeler hazır oldukça sunucuya yükleyeceğim.

http://www.istihza.com/py3/icindekiler_python.html adresinde bulunan eski belgelerde Python3′ün 3.0 sürümünü ele almıştık. Yeni belgelerin eski belgelerden farkı ise, yeni belgelerde Python3′ün daha yeni bir sürümünün (Python 3.2.2), çok daha ayrıntılı bir şekilde anlatılıyor olması.

Yeni Python3 belgelerinin başka bir önemli özelliği de Python ve Tkinter’in birlikte anlatılmış olması. Bu belgelerde öğrenci komut satırı ve grafik arayüz tasarımını birlikte öğrenecek. Bu sistemin öğrencinin motivasyonunu artıracağını düşünüyorum. Bu kararın gerekçelerini belgelerde şu şekilde açıklamaya çalıştım:

Bir programlama dilini öğrenirken, öğrencinin karşısındaki en büyük engel öğrenilmesi gereken şeylerin çokluğu veya zorluğu değildir. Aslında öğrencinin öğrenme motivasyonunu kırabilecek, onu yolundan alıkoyabilecek en önemli etken, öğrendiği bilgileri kafasında bir yere oturtamamasıdır. Yani öğrenci bir programlama dilini öğrenirken, özellikle de henüz yolun başındaysa ve daha önce de herhangi bir programlama dili deneyimi olmamışsa, öğretilen şeyler ona gereksizmiş gibi gelebilir. Hatta öyle ki, zaman zaman anlamsız ayrıntılarla vakit kaybettiği hissine dahi kapılabilir.

Bu kitapta şimdiye kadar öğrendiğimiz bilgilerden örnek vermemiz gerekirse, kapkara bir ekrana “Merhaba Zalim Dünya!” yazdırmanın son derece gereksiz ve aslında hiçbir işe yarayamayan bir çaba olduğunu düşünebilir. Öğrenci (doğal olarak) her zaman sabırsızdır. Bir an önce sonuca varmak, emeklemeyi öğrenmeden koşmak ister.

Bu kitaptaki konuları okurken siz de yukarıda anlatılan sabırsızlık ve manasızlık duygusuna kapılmış olabilirsiniz. Ama aslında bunun çok doğal bir his olduğunu asla aklınızdan çıkarmayın ve bir an da olsa kafanızdan geçen bu hislerin sizi yolunuzdan döndürmesine, motivasyonunuzu kırmasına izin vermeyin. Unutmayın ki, bütün büyük programlar, minicik ayrıntıların programcı tarafından ustaca bir araya getirilmesi sonucu ortaya çıkar. Hatta şöyle diyebiliriz: Programlama, bir yap-bozun parçalarını birleştirmek gibidir. Yap-bozun parçalarına tek tek baktığınızda bu parçalar bütüne dair bir anlam ifade etmeyebilir. Asıl manzara bu anlamsız görünen küçük parçaları birleştirdiğinizde ortaya çıkar…

Aslında bu anlattıklarımız sadece programlama öğrenen öğrenciler için değil, her konunun öğrencileri için geçerlidir. Örneğin okullarda İngilizce öğretilirken ilk verilen bilgilerden biri “This is an apple!” (Bu bir elmadır) cümlesidir. Belki bu cümleyi hayatınız boyunca hiçbir zaman kullanmayacaksınız. Ama bu cümlede geçen ve ilk bakışta dikkatinizi çekmemiş olabilecek ayrıntılar aslında İngilizce’nin yapısı ve mantığı hakkında son derece önemli bilgiler içeriyor. Böyle bir cümle kurmadan, daha karmaşık cümleler kuramazsınız. Aynı şekilde, bizim bu kitapta size öğrettiğimiz print("Merhaba Zalim Dünya!") komutunu da yazdığınız programlarda muhtemelen hiçbir zaman kullanmayacaksınız. Ama tıpkı “This is an apple!” cümlesinde olduğu gibi, print("Merhaba Zalim Dünya!") ifadesi de Python programlama diline dair çok önemli ayrıntıları içinde barındırır. Aynı şekilde, bu komutu yazabilmek de önemli ve büyük programlar üretebilmenin ilk adımıdır.

Öğrencinin yaşadığı bu ikilem sadece kendisini değil, herhangi bir konu üzerine öğretici belge hazırlayanları da bir hayli zorlar. Çünkü herhangi bir konu üzerine öğretici belge hazırlayanların aşması gereken en büyük zorluk, anlatılacak konuları düzgün bir şekilde hazırlamaktan ziyade, yukarıda söz edilen heves kırıcı etkenleri bertaraf edip, okurun ilgisini sürekli ayakta tutabilmektir.

Konuyu programlama açısından ele alacak olursak, aslında öğrencinin hevesini kıran şey biraz da komut satırının kasvetli havasıdır. Bir programlama dilini öğrenmeye çalışan kişi günlük yaşamında sürekli olarak modern grafik arayüzlere sahip programlarla karşılaşırken, kendi öğrenme deneyimi sırasında siyah bir ekranla uğraşmak zorunda kalmak pek hoşuna gitmeyebilir. Öğrencinin komut satırıyla birlikteliği uzadıkça, sabırsızlığı da artacak, bir an önce pencereli-düğmeli programlar yazabilme arzusu yüzünden öğrenmesi gereken temel bilgilere odaklanmakta dahi zorluk çekebilecektir.

Bu kitapta, yukarıda sözü edilen sıkıntıları en hafife indirmek için biz öğrenciyi grafik arayüz programlama ile erkenden tanıştırma yoluna gideceğiz.

Elbette Python programlama dilini bu kitap aracılığıyla öğrenmek isteyenler arasında, Tkinter’e (veya genel olarak grafik arayüz programlamaya) hiç bulaşmadan sadece Python öğrenmek isteyenler de olabilir. İşte biz onları da düşünerek grafik arayüz konusunu ayrı bir bölüm olarak tasarladık. Bundan sonraki her dersin sonunda “Tkinter” adlı bir bölüm de yer alacak. Eğer grafik arayüz konusunu öğrenmek istemeyenlerdenseniz ders sonlarındaki Tkinter adlı bölümleri es geçebilirsiniz. Bu bölümleri görmezden gelmeniz Python’ın kendisine ilişkin bölümlerdeki konuları anlamanızı zorlaştırmaz veya herhangi bir şekilde etkilemez.

Grafik arayüz programlama ile komut satırı programlama konularının bir arada anlatılmasının gerekçesi, bir an önce pencereli-düğmeli programlarla tanışmak isteyenlerin ihtiyacına cevap verebilmektir. Eğer “benim böyle bir ihtiyacım yok!” diyorsanız alnınız dik, başınız ileride yolunuza devam edebilirsiniz.

Esasında her öğretme biçiminin kendine has artı ve eksi yönleri vardır. Bu açıdan, dezavantajsız bir öğretme biçiminden söz etmek pek mümkün olmayacaktır.

Bir programlama dilini sadece komut satırı üzerinden öğretmeye çalışmanın dezavantajlarından yukarıda bahsetmiştik. Grafik arayüz programlama, özü itibariyle ileri düzey bir konu olduğu ve kavramlar açısından komut satırı programlamaya göre önemli farklılıklar içerdiği için öğrenciyi erkenden grafik arayüz programlama ile tanıştırmanın da bazı dezavantajları olabilir. Ancak Python programlama dili özelinde düşünürsek, bir Python programcısı, örneğin bir C programcısına kıyasla programlama macerası boyunca grafik arayüze sahip programlarla çok daha fazla haşır neşir olacaktır. Çünkü Python programlama dili, yapısı itibariyle grafik arayüz geliştirmeye, C programlama diline göre çok daha uygundur. Üstelik biz bu öğretme biçiminin olası dezavantajlarını en aza indirmek için elimizden geleni de yapacağız.

Yeni Python3 belgelerini beğeneceğinizi umuyorum. Her zaman olduğu gibi, bu belgeleri hazırlarken de amacım kaliteli, anlaşılır ve modern bir Türkçe kaynak ortaya çıkarmaktı. Bu amaca ulaşmak için elimden gelen çabayı gösteriyorum. Ancak elbette bu belgelerde bazı hatalar ve eksiklikler de olacaktır. Belgelerde bulduğunuz hataları ve eksiklikleri kistihza [at] yahoo [nokta] com adresinden bana iletebileceğiniz gibi, http://www.istihza.com/forum adresinde de dile getirebilirsiniz.

Python programlama dili ile ilgilenen herkese faydalı olması ümidiyle…

istihza.com, Python , ,

GNU/Linux Dağıtımlarında Python3 Bağımlılıkları

Salı, 15 Kas 2011

Hatırlarsanız geçen aylarda şöyle bir çalışma yapmıştık:

http://www.istihza.com/blog/istihza-comda-python3.html/

Bu çalışmada amacımız, Python3′ün kaynaktan derlenmesi esnasında, farklı GNU/Linux dağıtımlarında hangi paketlerin halihazırda kurulu olması gerektiğini tespit edebilmekti.

Buradan çıkan sonucu http://goo.gl/zfLpX adresine yerleştirdim. Eğer oradaki tabloda gördüğünüz eksiklikler varsa veya farklı bir dağıtım için bağımlılık listesi girmek istiyorsanız sayfayı düzenleyebilirsiniz.

istihza.com, Python , ,

Farklı İşletim Sistemlerinde Komut Satırına Ulaşmak

Pazartesi, 14 Kas 2011

Programlama öğrenmeye azmetmiş pek çok kişi, kullandığı işletim sisteminde komut satırına nasıl ulaşacağını genellikle bilir. Ama yine de programlamaya yeni başlayanlar (özellikle Windows kullanıcıları), kullandıkları işletim sisteminde komut satırına ulaşmak konusunda bazen sıkıntı yaşayabiliyor. Bu sıkıntıyı hafifletmek için http://goo.gl/ZyjAU adresinde bir makale oluşturduk. Bu makalede sadece Windows işletim sistemine değil, başka işletim sistemlerine de yer vermek istiyoruz.

Ben yeni Python3 belgelerinde, Ubuntu ve Windows 7′de komut satırına nasıl ulaşılacağını anlattım. Bu iki işletim sistemi dışında, kullanıcıların farklı işletim sistemi ve platformlarda komut satırına nasıl ulaşacağını anlatan bir belgenin elimizde olmasının faydalı olacağına siz de inanıyorsanız, http://goo.gl/ZyjAU adresindeki makaleyi başka işletim sistemlerine ait bilgileri girerek zenginleştirebilirsiniz.

GNU/Linux dağıtımlarında komut satırına ulaşma işlemi birbirine benzese de, özellikle dağıtımların masaüstü arayüzü üzerinde yaptıkları özelleştirmeler nedeniyle grafik olarak komut satırına ulaşmada farklılıklar olabiliyor. O yüzden, ben bütün dağıtımlar için bu bilgilerin tek tek girilmesinden yanayım.

Not: Sayfada halihazırda bulunan Windows XP girdisini şablon olarak kullanabilirsiniz.

İlgilenen herkese teşekkürler.

istihza.com, Python , , ,

istihza.com Wiki

Pazartesi, 14 Kas 2011

Bildiğiniz gibi, istihza.com üzerinde Python2 belgelerinin yanısıra, bir de Python3 belgeleri yer alıyor. Ancak yine bildiğiniz gibi, sitedeki Python3 belgeleri uzun zamandır güncellenmedi. Haliyle bu belgelerde Python3′ün eski bir sürümü ele alınıyor.

Sitedeki Python3 belgelerini güncellemek ve daha kapsamlı bir hale getirebilmek için, çok uzun bir süredir bu belgeler üzerinde çalışıyorum. Ancak gün içinde beni meşgul eden çok fazla şey olduğu için belgeler üzerindeki çalışmalarım pek hızlı ilerleyemiyor ne yazık ki… Ama hızımız yavaş da olsa, sonuçta ortada bir ilerleme olduğu için bu belgeler önünde sonunda tamamlanacak.

istihza.com ekibi, tasarım ve içerik üzerinde gece gündüz titizlikle çalışıyor...

Dediğim gibi, yeni Python3 belgelerinde amacım ortaya hem daha güncel, hem de çok daha kapsamlı bir belge bütünü çıkarmak. Ben tek başıma elimden geldiği kadar bu amaca yönelik çalışmalarımı yürütüyorum, ancak bir programlama dili üzerine gerçekten işe yarar bir kaynak ortaya çıkarmak istiyorsak bir kişinin çabasından daha fazlasına ihtiyacımız var.

istihza.com’u tek kişinin elinden çıkma bir proje olmaktan kurtarmanın ilk adımı olarak daha önce forum alanını hayata geçirmiştik [http://www.istihza.com/forum].  Forum alanı sayesinde, Python’la ilgilenenlerin fikir alış verişinde bulunabileceği ve doğrudan birbirlerine yardımcı olabileceği bir mekan meydana getirmiş olduk. istihza.com alanındaki Python belgelerini çok daha geniş kapsamlı bir hale getirebilmek için bugünden itibaren “wiki” alanını da kullanıma açıyoruz. Wiki alanına http://www.istihza.com/wiki adresinden ulaşabilirsiniz.

Wiki alanı, pek çok önemli amaca hizmet edecek. Örneğin ana Python3 belgelerinde değinemediğimiz özel konulara Wiki’de yer verebileceğiz. Mesela ben Python3 belgelerinde konuları Ubuntu ve Windows7 üzerinden anlatıyorum. Benim şu an için bir Mac bilgisayara erişimim yok. İşte Mac kullanan bir Python programcısı örneğin Python’ın Mac bilgisayarlara nasıl kurulacağını bu Wiki alanında anlatabilecek. Ya da bir Debian kullanıcısı, Python’ın Debian üzerine kurulumu esnasında nelere dikkat edilmesi gerektiğini Wiki alanında dile getirebilecek.

istihza.com’u takip eden herkesin çok iyi bildiği gibi, istihza.com’da yayımlanan belgelerin diline özel bir önem veriyoruz. Ana sayfamızda da ifade ettiğimiz gibi;

istihza.com; Python Programlama Dili ve bu dilin standart grafik arayüz kütüphanesi Tkinter’e ilişkin okunaklı, özgün bir Türkçe kaynak oluşturma projesidir.

“Okunaklı” ve “özgün” olmak, Wiki alanında da bağlı kalınacak ilkeler olmalı. Dolayısıyla, Wiki’de yer alacak belgelerin niceliğinden ziyade niteliği bizi daha fazla ilgilendiriyor. Oluşturduğumuz her belgede bu ilkeleri göz önünde bulundurmaya dikkat edeceğiz.

istihza.com, Python , , , ,

Python 3.2.1

Perşembe, 23 Haz 2011

Python’ın 3.x serisine ait en son kararlı sürüm 3.2.0. Ancak daha önceki bir yazıda da anlatmaya çalıştığım gibi, bu sürüm önemli hatalar barındırıyor. Orada da söylediğim gibi, bu hatalardan GNU/Linux dağıtımları etkilenmedi. Ancak özellikle Windows kullanıcıları açısından Python 3.2.0 hiç iyi bir tercih değil.

Python’ın kararlı 3.2.1 sürümü yakında yayımlanacak. O zamana kadar Windows kullanıcıları en azından aday sürümleri kurarak, büyük hatalar barındıran 3.2.0 sürümünden kurtulmayı tercih edebilir.

Not: 23 Haziran 2011 tarihi itibariyle Python’ın FTP sunucularından 3.2.1rc1 sürümü indirilebiliyor.

Python , , , ,

Herkes için Python – 2. Baskı

Pazartesi, 25 Nis 2011

Artık istihza.com’u takip eden herkesin çok iyi bildiği gibi, sitemizde bulunan belgelerin tamamı özgür bir lisans altında yayımlanıyor. Bu lisans gereğince, burada bulunan bütün belgeleri istediğiniz gibi okuyabilir, indirebilir ve gönül rahatlığıyla arkadaşlarınızla paylaşabilirsiniz.

İsteyen herkesin, istihza.com’daki belgelere rahatça ulaşabilmesini sağlamak amacıyla ben buradaki belgeleri hem HTML, hem de PDF biçimlerinde yayımlıyorum (ihtiyaç duyulması halinde bu belgeleri ePUB biçiminde de yayımlama olanağına sahibiz).

Ancak herkes belgeleri bilgisayar ekranından okumaktan hoşlanmıyor olabilir. Biz onları da unutmadık! Bütün bu indirme biçimlerinin üzerine, belgeleri kağıt üzerinde basılı olarak okumak isteyenleri de düşünerek, buradaki belgelerin bir kısmını kitap olarak da yayımladık. Bildiğiniz gibi, “Herkes için Python” adlı kitabımız Şubat 2010 tarihinde KODLAB Yayınları’ndan çıktı.

Herkes için Python” adlı kitabın ilk basım tarihi olan Şubat 2010′dan bu yana geçen bir yıllık süre içinde kitabımızın ilk baskısı tükendi ve bugün kitabımızın 2. baskısı raflardaki yerini aldı.

Her kitapta olduğu gibi, bizim kitabımızda da gerek basımdan gerekse doğrudan benden kaynaklanan bazı yazım hataları oldu. İşte 1. baskının tükenip 2. baskının yapılması sayesinde bu hataları düzeltme imkanına kavuştuk. Ben dikkatimi çeken ve 2. baskı öncesi bana e.posta yoluyla okurlar tarafından bildirilen hataları düzelttim. Elbette yine de gözümüzden kaçan hatalar olmuş olabilir. Eğer kitapta bir hata olduğunu düşünüyorsanız, öncelikle istihza.com’daki ilgili belgeleri kontrol edin. Gördüğünüz hata, kitapta olmasa bile sitedeki belgelerde düzeltilmiş olabilir. Eğer sitedeki belgelerde de hata olduğunu düşünüyorsanız kistihza [at] yahoo [nokta] com adresinden benimle yazışmaktan asla çekinmeyin. Benim istihza.com projesindeki amacım, hatalardan arınmış, kalitesi yüksek ve okunaklı bir Python kılavuzu oluşturmaktır.

Çevirmenlerin ve yazarların çok iyi bildiği gibi, insan kendi yazdığı şeylerdeki hataları göremez. istihza.com’daki belgeleri de kendim yazdığım için, bu belgeleri ne kadar okusam da buradaki hataların tamamını benim görmem mümkün değil. Bu hataların düzeltilmesi konusunda iş istihza.com takipçilerine düşüyor. Sitedeki hataları şimdiye kadar bulup bana ileten ve şimdiden sonra da iletecek olan herkese teşekkür ederim.

Elbette 2. baskı sadece hata düzeltmelerinden ibaret değil. Biliyorsunuz, artık Python 3 yavaş yavaş gündemimizdeki yerini alıyor. Bu sebeple bu 2. baskıya Python 2 ile Python 3 arasındaki temel farklılıkları özet bir şekilde anlatan 7 sayfalık bir bölüm ekledim. Bu yeni bölümün, Python3′e geçiş ve bu iki seri arasındaki farklılıklar konusunda Python severlere iyi bir fikir vereceğini düşünüyorum.

Herkes için Python“, programlama konusunda hiçbir bilgisi olmayanlar düşünülerek hazırlanmış bir kitaptır. Eğer daha önce Python ve programlamayla ilgili herhangi bir tecrübeniz olmadıysa bu kitabın tam size göre olduğunu söyleyebilirim.

En başta da söylediğim gibi, kitaptaki bilgilere (ve hatta daha fazlasına) istihza.com üzerinden ücretsiz olarak erişebilirsiniz. Eğer bu bilgilere kağıt üzerine basılı olarak da ulaşmak veya istihza.com projesine destek olmak isterseniz KODLAB Yayınları‘ndan çıkan bu kitabı satın almayı tercih edebilirsiniz. Ama elbette eğer maddi gücünüz kitabı almaya yetmiyorsa veya kitabı satın almak istemiyorsanız, ki gayet makul ve meşru bir gerekçedir bu, sitedeki HTML ve/veya PDF dosyalarını okumaya devam edebilirsiniz.

Dediğim gibi, kitabımızın 1. baskısı geçen yılın Şubat ayında çıkmıştı. Kitap çıktıktan 3 ay sonra, yani geçen yılın Mayıs ayında ikiz oğullarımız Deniz ve Ege dünyaya geldi. Bu kitabı eşime ve onlara ithaf ediyorum. Kitaba ilgi gösteren herkese de çok teşekkür ediyorum.

 

 

istihza.com, Python , ,

Mod ve Medyan

Cuma, 08 Nis 2011

Malum, bu aralar YGS’deki hadise nedeniyle ülkenin gündemine iki kavram girdi: mod ve medyan. Ancak “seçenekleri kaydırarak doğru eşleşmeyi bulmaya yarayan yöntem mod-medyan” şeklinde lanse edilen mod ve medyanın seçenek kaydırmayla pek ilgisi yok. Mod ve medyan, istatistik biliminde sıklıkla kullanılan kavramlardan ikisidir…

Peki nedir bu mod ve medyan denen şeyler?

Bir veri dizisi içinde en sık tekrar eden değere “mod” adı verilir.  ”Medyan” ise bir veri dizisinin en ortasında yer alan veridir…

Örneğin elimizde şöyle bir veri dizisi olduğunu düşünün:

7,  13,  18,  24,  9,  3,  18

Bu veri dizisinin modu 18′dir. Peki bu değeri nasıl buluyoruz?

Öncelikle yukarıdaki sayıları küçükten büyüğe doğru sıralıyoruz:

3, 7, 9, 13, 18, 18, 24

Gördüğünüz gibi, bu dizide en sık tekrar eden değer 18. Dolayısıyla bu dizinin modu 18′dir diyoruz.

Bir de şu diziye bakalım:

24,  15,  18,  20,  18,  22,  24,  26,  18,  26,  24

Bu dizinin modunu bulmak için öncelikle dizideki sayıları küçükten büyüğe doğru sıralıyoruz:

15,  18,  18,  18,  20,  22,  24,  24,  24,  26,  26

Gördüğünüz gibi, bu dizide en sık tekrar eden iki sayı var. Bunlar 18 ve 24. Bu iki sayı da, dizi içinde 3′er kez geçiyor. Dolayısıyla yukarıdaki dizinin modu 18 ve 24′tür diyoruz. İstatistikte bu duruma çift modlu dağılım adı verilir.

Bir de şu veri dizisine bir göz atalım:

2.7,  8.3,  3.5,  5.1,  4.9

Bunları küçükten büyüğe doğru sıralayalım:

2.7,  3.5,  4.9,  5.1,  8.3

Burada tekrar eden herhangi bir sayı yok. Dolayısıyla bu dizinin bir modu yoktur…

Gelelim medyana…

En başta dediğimiz gibi,  medyan bir veri dizisinin en ortasında yer alan veridir…

Örneğin:

12, 3, 5

Bu veri dizisinin medyanı 5′tir. Peki bu değeri nasıl buluyoruz?

Tıpkı mod hesaplamasında olduğu gibi önce sayıları küçükten büyüğe doğru sıralıyoruz:

3, 5, 12

Gördüğünüz gibi, en ortada yer alan sayı 5. Dolayısıyla bu dizinin medyanı 5′tir diyoruz.

Yukarıdaki örnekte 3 adet sayı var. Yani veri dizisinin uzunluğu bir tek sayı. Veri tipinin uzunluğunun tek sayı olduğu durumlarda medyanı bulmak kolaydır. Mesela:

3, 13, 7, 5, 21, 23, 39, 23, 40, 23, 14, 12, 56, 23, 29

Burada toplam 15 sayı var. Bu dizinin en ortasındaki sayıyı bulmak kolay: 23. Demek ki bu veri dizisinin medyanı 23′müş…

Peki ya veri uzunluğunun çift sayı olduğu durumlar?

Bakalım:

3, 13, 7, 5, 21, 23, 23, 40, 23, 14, 12, 56, 23, 29

Burada toplam 14 sayı var. Yani veri tipimizin uzunluğu bir çift sayı. Bu yüzden bu dizinin medyanını bulmak tek sayıdaki kadar kolay değil. Ama aslında tabii zor da değil.

Uzunluğu bir çift sayı olan veri tiplerinde medyanı bulmak için yine öncelikle sayıları küçükten büyüğe doğru sıralıyoruz:

3, 5, 7, 12, 13, 14, 21, 23, 23, 23, 23, 29, 40, 56

Daha sonra, dizinin en ortasında yer alan iki sayıya bakıyoruz. Bu sayılar 21 ve 23.

Ardından, bu iki sayıyı birbiriyle toplayıp, çıkan sayıyı 2′ye bölüyoruz:

(21 + 23) / 2 = 22

Elde ettiğimiz sayı bize dizinin medyanını veriyor.  Yani yukarıdaki dizinin medyanı 22′dir diyoruz…

Mod ve medyanı öğrendiğimize göre size şöyle bir soru sormama izin verin:

Bir Python programcısı olarak, mod ve medyanı kol kuvvetiyle bulmaya çalışmak size oldukça verimsiz ve anlamsız bir yol olarak görünmüş olmalı. Peki Python programlama dilini kullanarak mod ve medyanı nasıl hesaplayabiliriz?

Ben kendi yöntemimi yazayım. Siz daha verimli algoritmalar uygulayabilirsiniz. (Bu arada aşağıdaki kodları Python 3 kullanarak yazdım. Yani bu kodlar Python 2 ile çalışmaz):

import collections
 
def mode(lst):
    sayaç   = collections.Counter(lst)
    değer   = sayaç.values()
    sıklık  = sayaç.most_common()
    mod     = []
 
    if not max(değer) == 1:
        for i in range(list(değer).count(max(değer))):
            mod.append(sıklık[i][0])
 
        mod = ", ".join(map(str, mod))
 
    return mod if mod else "mod yok!"
 
def median(lst):
    uzunluk = len(lst)
    sıralı  = sorted(lst)
    orta    = int(uzunluk/2)
 
    if uzunluk % 2 == 1:
        med = sıralı[orta]
    else:
        med = (sıralı[orta] + sıralı[orta-1]) / 2
 
    return med
 
if __name__ == "__main__":
    test1 = [48, 44, 48, 45, 42, 49, 48]
    test2 = [9, 3, 3, 44, 17 , 17, 44, 15, 15, 15, 27, 40, 8]
    test3 = [34, 43, 81, 106, 106, 115]
    test4 = [13, 18, 13, 14, 13, 16, 14, 21, 13]
    test5 = [1, 2, 4, 7]
    test6 = [8, 9, 10, 10, 10, 11, 11, 11, 12, 13]
 
    t = [test1, test2, test3, test4, test5, test6]
    a = 0
 
    while a < len(t):
        for i in t:
            a += 1
            print("\nTEST%s"%a)
            print("dizi  : ", i)
            print("mod   : ", mode(i), "\n"
                  "medyan: ", median(i))

Bilginizi ve yukarıdaki betiği sınamak için bunlarla ilgili biraz alıştırma yapmak isteyebilirsiniz. Bunun için şu iki adresi ziyaret edebilirsiniz:

1) http://www.mathgoodies.com/lessons/vol8/mode.html

2) http://www.mathopolis.com/questions/quiz.php

Benim verdiğim ya da kendi yazdığınız mod-medyan hesaplama betiğini yukarıdaki adreslerde yer alan alıştırmalara uygulayın. Bakın bakalım betiğiniz mod-medyanı düzgün hesaplayabiliyor mu?

[NOT]: Yukarıdaki örneklerde yer alan veri dizileri aşağıdaki adreslerden alınmıştır

http://www.mathgoodies.com/lessons/vol8/mode.html

http://www.mathsisfun.com/median.html

Python, Teknik , , ,

Windows Python 3.2′de bir Hata

Pazartesi, 14 Mar 2011

Python geliştiricileri Python 3 serisini geliştirmeye devam ediyor. Bu doğrultuda bir süre önce Python’ın 3.2 sürümü de yayımlandı. Ancak bu sürümde, Windows kullanıcılarını etkileyen ciddi bir hata var. Windows’ta input() fonksiyonu karakter dizilerinin sonuna bir adet “\r” karakteri yerleştiriyor. Bunu şu şekilde doğrulayabilirsiniz:

isim = input("Herhangi bir şey: ")
 
print(repr(isim))

Bu kodları çalıştırdığınızda, örneğin input() fonksiyonuna cevap olarak “python” yazmışsanız çıktı şöyle görünecektir:

‘python\r’

Bildiğiniz gibi, Python’da “\r” karakteri bir kaçış dizisidir. Bu kaçış dizisinin bulunduğu noktada Python karakter dizisinin başına döner ve bu kaçış dizisinden sonra gelen bütün karakterler karakter dizisinin başında bulunan karakterlerin üzerine yazar. Yani:

>>> print("Merhaba\r Dünya!")
 
 Dünya!

İşte Python 3.2′deki input() fonksiyonu da karakter dizilerinin en sonuna bu işareti yerleştirdiği için tuhaf çıktılar verilecektir:

isim = input("Adınız: ")
 
print("Merhaba", isim, end="!\n")

Bu kodları çalıştırdığınızda şöyle bir çıktı elde edersiniz:

!erhaba isim

Gördüğünüz gibi, karakter dizisinin en sonuna yerleşmesi gereken “!” işareti en başa dönüp karakter dizisinin ilk harfinin üzerine yazdı…

NOT: IDLE bu hatadan etkilenmiyor.

Bu hata ile ilgili kayda şuradan ulaşabilirsiniz:
http://bugs.python.org/issue11272

Bu hatayla ilgili bir örnek (ve çözümü) için şu adresi inceleyebilirsiniz:
http://www.python-forum.org/pythonforum/viewtopic.php?f=1&t=24263

Python , ,

istihza.com’da Python3

Salı, 08 Mar 2011

Bildiğiniz gibi, “istihza.com’da Python 2′ye mi yoksa Python 3′e mi ağırlık verilmeli?” sorusunu sorduğumuz anketi Python3 kazandı. O yüzden ben de fırsat bulabildikçe (çünkü bu aralar gerçekten işlerim başımdan aşkın) istihza.com’da Python3 bölümünü yazmaya çalışıyorum. Bu belgelerde Python’ın en son sürümü olan 3.2′yi anlatacağız. Yeni Python sürümleri çıktıkça da yazıları güncelleyeceğim.

Gelelim asıl konumuza…

Python3 pek çok GNU/Linux dağıtımının deposuna henüz girmedi. O yüzden Python3 kullanmak isteyen pek çok kişi Python’ı kaynaktan derlemek zorunda. Python kaynaktan derlenirken bütün modüllerin inşa edilebilmesi için aşağıdaki paketlerin sistemde halihazırda kurulu olması gerekiyor:

tcl8.5-dev

tk8.5-dev

zlib1g-dev

ncurses-dev

libreadline-dev

libdb-dev

libgdbm-dev

libzip-dev

libssl-dev

libsqlite3-dev

libbz2-dev

Bu paketlerin adları Ubuntu’ya göre… Doğal olarak, GNU/Linux dağıtımları arasında paket adları farklılık gösteriyor.

Benim yapmak istediğim şey şu: Python3′ün kaynaktan nasıl derleneceğini anlatırken, yukarıdaki bağımlılıkların farklı dağıtımlardaki adlarını da bir tablo halinde göstermek istiyorum. Dediğim gibi, yukarıdaki paket adları Ubuntu’ya ait. Eğer Ubuntu dışındaki dağıtımları kullanan arkadaşlarım bana yukarıdaki paketlerin kendi dağıtımlarındaki adlarını yazabilirlerse çok memnun olurum.

Şimdiden teşekkürler,

Fırat

istihza.com, Python , , , ,

Arch Linux ve Python 3

Salı, 22 Şub 2011

http://www.archlinux.org/news/python-is-now-python-3/ adresinden okuduğuma göre, Arch Linux dağıtımında öntanımlı “python” paketi artık 3.x serisini kuruyor. 2.x serisi ise “python2″ adlı başka bir pakete gönderilmiş. Dolayısıyla Python’ın 2.x serisinden bir sürüm kullanarak yazdığınız bir Python programının Arch Linux üzerinde çalışabilmesi için “shebang” satırınızın /usr/bin/python2 olması gerekiyor… Eğer eskisi gibi /usr/bin/python (veya /usr/bin/env python) satırını kullanacak olursanız, Python 2.x serisinden bir sürümle yazdığınız programınız Arch Linux üzerinde çalışmayacak.

Ubuntu ve Fedora gibi dağıtımlar ise Python 3 sürümlerini “python3″ adlı bir paket olarak sunuyor. “python” adlı paket ise Python’ın 2.x sürümlerine işaret ediyor.

Bence Arch Linux’un bu hamlesi için henüz vakit erken. Siz ne dersiniz?

GNU/Linux, Python , , , ,