24 Ağustos 2013 Cumartesi

Programlama Odaklı Proje - 3. Bölüm

Hazırladıkları özenli raporları bana ulaştıran potansiyel meslektaşlarıma çok teşekkür ediyorum. Yoğunluktan ötürü bazen geç cevap versem de bana gelen tüm raporları detaylı bir şekilde okuduğumu ve ilk fırsatta geri bildirimde bulunacağımı bilin lütfen, bu konudaki anlayışınızdan ötürü teşekkür ediyorum.

Artık gerçek bir program geliştirmenin zamanı geldi. Bu bölümde, edindiğimiz bilgileri basit ancak gerçek dünyada yer alan bir problemi çözen bir program geliştirmek için kullanacağız. 

Bu bölümdeki ilk amacımız, verilen bir DNA dizilimindeki [sequence] bazları saymak. Çok kolay değil mi?

Bu aşamada, Codecademy'deki Python derslerinin ilk beş tanesini tamamladığınızı varsayarak devam ediyorum. Tamamlamadıysanız, henüz geç değil, önceki bölüme dönebilirsiniz :) Öncesinde size iki araçtan söz etmek istiyorum.

Bunlardan ilki, repl.it. Tıpkı Codecademy'deki gibi, bu site üzerinden bir Python komut satırına ulaşabilirsiniz. Yani, nerede olursanız olun, bilgisayarınızda Python kurulmuş olmasa dahi yazdığınız Python kodlarını (en azından büyük bir bölümünü) rahatlıkla çalıştırabilirsiniz.

Diğer araç ise, Python fonksiyonlarına hızlı ve basit bir şekilde ulaşmanızı sağlayacak olan bir referans web sitesi. Bu bölümde kullanabileceğiniz String fonksiyonlarına sitenin sol tarafında yer alan menüden ulaşabilirsiniz. Alternatif bir Türkçe kaynak olarak da, önceki bölümde bahsettiğim www.istihza.com adresindeki e-kitap veya dökümanları kullanabilirsiniz.

Buradan itibaren devam etmek için Codecademy'deki 7. ve 8. Python derslerini bitirmeniz gerekecek. 6. ders de bir alıştırma dersi, orayı da tamamlamanızı öneririm.


Gelelim ilk problemimize. Bazlarını sayacağınız DNA dizilimi [sequence]: 
GCACATATGGAAACCAGAGCTAGCATCACC
Bu bölümdeki problemi birçok farklı şekilde çözebilirsiniz, benim geliştireceğim algoritmalardan (veya, izleyeceğim yollardan) ikisi şu şekilde olurdu:


  • A, T, G ve C bazlarının sayısını kaydetmek üzere toplam 4 değişken oluştur ve değerlerini sıfıra eşitle
  • Verilen DNA dizilimindeki her bir baza sırasıyla ulaş (bir for döngüsü ile) 
    • O anda ulaştığın bazın A, T, G veya C olup olmadığını kontrol et (if-elif-else ile)
      • İlgili baza ilişkin değişkenin değerini bir arttır
  • Her bir baz için bulunan değerleri ekrana yazdır
veya

  • Bazların sayısını tutmak üzere dictionary türünde bir değişken oluştur ve başlangıç olarak her bir bazın değerini sıfır olarak ata
  • Verilen DNA dizilimindeki her bir baza sırasıyla ulaş (bir for döngüsü ile)
    • O andaki bazın, en başta oluşturduğun değişkenindeki değerini bir arttır
  • En başta oluşturduğun değişkenin içeriğini ekrana yazdır

Bu iki yolun Python koduna dönüştürülmüş şekli ise şöyle olurdu:
dna = 'GCACATATGGAAACCAGAGCTAGCATCACC' 
a = 0 
t = 0 
g = 0 
c = 0 
for baz in dna: 
    if baz == 'A': 
        a = a + 1 
    elif baz == 'T': 
        t = t + 1 
    elif baz == 'G': 
        g = g + 1 
    else 
     c = c + 1 
print "A: " + str(a) 
print "T: " + str(t) 
print "G: " + str(g) 
print "C: " + str(c)

veya

dna = 'GCACATATGGAAACCAGAGCTAGCATCACC'  
bazlar={'A':0, 'T':0, 'G':0, 'C':0} 
for baz in dna: 
    bazlar[baz] = bazlar[baz] + 1 
for baz in bazlar: 
    print baz + ": " + str(bazlar[baz])

Bu bölümdeki ikinci amacımız, yukarıdaki problemi yeniden ufak bir farkla yazmak olacak. Her bir bazdan kaçar tane olduğunu yazmak yerine, o bazın toplam DNA diziliminin yüzde kaçını oluşturduğunu hesaplayacak ve ekrana yazdıracaksınız. Bunu size bırakıyorum (ipucu: len() fonksiyonu, bir string'in uzunluğunu verir).


Bu bölümdeki üçüncü ve son amacımız ise, verilen bir DNA dizilimindeki [sequence] kodonları (3 bazlık grupları) saymak ve raporlamak. Bu problemi çözmek, bize bir sonraki aşamaya geçtiğimizde fazlasıyla yardımcı olacak.

Hazırlayacağınız raporda, öncelikle, bu bölümdeki problemleri çözerken karşılaştığınız zorluklar ve dikkatinizi çeken şeyleri paylaşmanızı istiyorum. Böylece, geri bildirimde bulunabilir ve karşılaştığınız zorlukları nasıl kolayca aşabileceğiniz konusunda faydalı olabilirim. Ardından, yazdığınız kodları kısa notlarla (comment'ler ile) birlikte raporunuza ekleyerek gönderebilirsiniz.

Başarılar.


Ne öğrenmeyi bekliyoruz?

  • Python dilinde program yazmaya başlamayı
  • Kendi algoritmalarımızı (yollarımızı) geliştirmeyi
  • DNA dizilimleriyle oynayabilmeyi