2016-03-31 21 views
1

Merhaba DNA'daki her bir bazın temel içeriğini hesaplayan basit bir program yazmaya çalışıyorum. Ben bir atama hatası 'no_c göreve kadar başvurulan' almaya devam ya da 'benim geçerli yapılandırmada "tanımlanmamış no_c ve ben sorunu çözmek için nasıl anlamaya olamaz.Python'da örnek değişkenler? Bir atama hatası alamaya devam edin

#!/usr/bin/python 

#computing the atgc content of a DNA string 


class Base_counter(object): 
    def __init__(self, DNA): 
     self.DNA = DNA 
     no_c = 0 
     no_a = 0 
     no_g= 0 
     no_t= 0 

    def c_counter(self): 
     for base in self.DNA: 
      if base == 'c': 
       no_c = no_c + 1 
     return no_c 

    def g_counter(self): 
     for base in self.DNA: 
      if base == 'g': 
       no_g+=1 
     return no_g 

    def a_counter(self): 
     for base in self.DNA: 
      if base == 'a': 
       no_a+=1 
     return no_a 

    def t_counter(self): 
     for base in self.DNA: 
      if base == 't': 
       no_a+=1 
     return no_t 

    def gc_percentage(self): 
     return no_c + no_g/len(self.DNA) 

    def at_percentage(self): 
     return no_a + no_t/len(self.DNA) 

    def g_percentage(self): 
     return no_g/len(self.DNA) 

    def a_percentage(self): 
     return no_a/len(self.DNA) 

    def t_percentage(self): 
     return no_t/len(self.DNA) 

    def c_percentage(self): 
     return no_c/len(self.DNA)  

def main(): 
    dna= 'gcgctat' 
    analyzer = Base_counter(dna) 

    print analyzer.no_c 
    print analyzer.c_counter() 
    #print analyzer.c_percentage() 

if __name__ == '__main__': 
    main() 
+1

Lütfen sorularınızı, kullanıcıların sorunla karşılaştığınız ayarları tanımlamak yerine, daha sonra bir şeyler aramasına yardımcı olacak şekilde etiketlemeyi deneyin. Bu sorunun, örneğin, biyoinformatik veya dna dizilemesi ile ilgisi yoktur. –

cevap

0

Sadece tüm arasında önce self. koymak sınıfta no_ değerleri onları her sınıf örneği nesnesinin üye olmak için Böylece

.

class Base_counter(object): 
    def __init__(self, DNA): 
     self.DNA = DNA 
     self.no_c = 0 
     self.no_a = 0 
     self.no_g= 0 
     self.no_t= 0 

    def c_counter(self): 
     for base in self.DNA: 
      if base == 'c': 
       self.no_c += 1 
     return self.no_c 

vb

Bu, belirli bir sınıfın örneğinin, değerler için kendi depolama alanına sahip olması ve başvuruda bulunabilmesi için gereklidir.

+3

sınıf üyeleri? Nesne üyesi değil misiniz? – cdarke

+1

@cdarke - reworded! –

2

kodunuzu

def __init__(self, DNA): 
    self.DNA = DNA 
    no_c = 0 
    no_a = 0 
    no_g= 0 
    no_t= 0 

self.DNA = DNA 

bu nesne için bir üyesini oluşturur Sadece çizgi düşünün. Diğer satırlar, bu işlevin yerel olan eşlemeleri oluşturur. Sonuç olarak, daha sonraki aramalar no_c'a erişmeyi denediğinde, tercüman muhtemelen burada kastettiğiniz şeye bağlamaz.

no_c'un her oluşumunu self.no_c ile değiştirmek istediğinizi tahmin ediyorum.

0

bu deneyin: Özellikle

def c_counter(self): 
     for base in self.DNA: 
      if base == 'c': 
       self.no_c = self.no_c + 1 
     return self.no_c 

, erişim öz anahtar kelime ile nesnenin tüm alanlar.

İlgili konular