2016-04-01 13 views
0

Şu anda kodum çalışıyor ve kullanılabilir ancak ihtiyacım olmayan birkaç kod satırı var. Bir dizi (DNA) giriyorum ve kodun bazı değerleri hesaplamasını ve değerleri bana döndürmesini sağlıyorum. Diziyi girdim, sonra bir konsantrasyon ve erime sıcaklığı, dH, dS ve dG bana geri döndü. Sadece kod temizlenmiş olabilir ya da sizce iyi olduğunu düşünüyorsanız herhangi bir yolu olup olmadığını görmek için gönderiyor. Bu python3 için de. Yardım için teşekkürler!python 3 temizleyici kodu, sözlüğe değer değerlerini hesaplama

import math 
sequence1 = input("Enter DNA Sequence: ") 
sequence2 = [i for i in sequence1[0::1]] 
sequenceR = [i for i in sequence2[::-1]] 
dnac = input("Enter DNA Concentration (M): ") #Effectively Ct 
dnac = float(dnac) 
#assume 1M NaOH, though this adjustment is easy to establish if necessary. 
first = sequence1[0] 
last = sequence1[-1] 
sequence = [i+j for i,j in zip(sequence1[0::1], sequence1[1::1])] 

navbles={  "AA": (-7.9  ,-22.2 ,-1.0), 
         "TT": (-7.9  ,-22.2 ,-1.0), 
         "AT": (-7.2  ,-20.4 ,-0.88), 
         "TA": (-7.2  ,-21.3 ,-0.58), 
         "CA": (-8.5  ,-22.7 ,-1.45), 
         "TG": (-8.5  ,-22.7 ,-1.45), 
         "GT": (-8.4  ,-22.4 ,-1.44), 
         "AC": (-8.4  ,-22.4 ,-1.44), 
         "CT": (-7.8  ,-21.0 ,-1.28), 
         "AG": (-7.8  ,-21.0 ,-1.28), 
         "GA": (-8.2  ,-22.2 ,-1.30), 
         "TC": (-8.2  ,-22.2 ,-1.30), 
         "CG": (-10.6 ,-27.2  ,-2.17), 
         "GC": (-9.8  ,-24.4 ,-2.24), 
         "GG": (-8.0  ,-19.9 ,-1.84), 
         "CC": (-8.0  ,-19.9 ,-1.84), 
         "A" : (0  , 0  ,    0), 
         "C" : (0  , 0  ,    0), 
         "G" : (0  , 0  ,    0), 
         "T" : (0  , 0 ,   0),  } 
initiator={  "G": (0.1 ,-2.8,  0.98), 
         "C": (0.1 ,-2.8,  0.98), 
         "A": (2.3, 4.1, 1.03), 
         "T": (2.3, 4.1, 1.03) } 

complement = {'A' : 'T', 'T' : 'A', 'G' : 'C', 'C' : 'G'} 

#First and last terms, to start off 
F1 = initiator[first] 
L1 = initiator[last] 
dH1 = F1[0] 
dH2 = L1[0] 
dS1 = F1[1] 
dS2 = L1[1] 
dG1 = F1[2] 
dG2 = L1[2] 

R = 1.987 #cal mol K 
#answer = (dH1/(dS1 + R*C))+(dH2/(dS2 + R*C)) 
answerH = dH1 + dH2 
answerS = dS1 + dS2 
answerG = dG1 + dG2 
#the iterative meat 
for na in range(len(sequence)): 
     n = navbles[sequence[na]] 
     H = n[0] 
     S = n[1] 
     G = n[2] 
     #answer = answer + (H/(S + R*C)) 
     answerG = answerG + G 
     answerH = answerH + H 
     answerS = answerS + S 

#symmetry check 
if sequenceR == sequence2: 
     symm = "y" 
else: 
     symm = "n" 
if symm == "y": 
     answerS = answerS + -1.4 
else: 
     pass 
#complementary check 
sequenceC = [] 
for i in range(len(sequenceR)): 
     sequenceC.append(complement[sequenceR[i]]) 

if sequenceC == sequence2: 
     comp = "y" 
else: 
     comp = "n" 

if comp == "n": 
     C = math.log(dnac/4) 
else: 
     C = math.log(dnac) 
#print(C) 
answerT = (1000*answerH)/(answerS + R*C) 
print('Tm =', answerT) 
print('dH(kcal) = ', answerH) 
print('dS(cal) = ', answerS) 
print('dG(kcal) = ', answerG) 

#print(sequence1) 

cevap

0

Bence bu iyi görünüyor. Gelecekte gerçekten büyük veritabanlarına uygulamayı planlıyorsanız, performans için her zaman yeniden başlatabilirsiniz, ancak bazen işi yapmak için gereken her şey doğrudur.

+0

Kontrol ettiğiniz için teşekkürler, bir dersteki bir ödev için buna gerek duymamalıydım ve sadece bir dizi girdiysem işe yarar ancak kod temiz değilse, öğretmenimin puanları düşeceğini biliyorum. – dennis