Mình đang học Bioinformatics, và có một bài toán này, thực ra thuật toán thì không phức tạp lắm, nhưng mình lại bị vướng ở khúc xử lí file dữ lieu input. Bài toán như sau:
Cho một file .txt trong đó chứa dữ liệu chuỗi DNA của khoảng 10 người, với định dạng kiểu FASTA, với mở đầu cho một chuỗi DNA sẽ là 1 nhãn chứa ID của bệnh nhân, ví dụ:
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT
Tính tỉ lệ % số nucleotit G và C trong mỗi chuỗi DNA của từng bệnh nhân, sau đó trả về mã bệnh nhân có tỉ lệ nucleotit GC cao nhất trong số những bệnh nhân trong này cùng với tỉ lệ %GC của họ.
Trong ví dụ trên, output sẽ là
>Rosalind_0808
60.919540
Tức là bệnh nhân mã 0808 có tỉ lệ GC trong gen cao nhất, và tỉ lệ đó là 60.919540%
Cái mình vướng ở đây là, kiểu file này ở mỗi chuỗi nucleotit sau một số nhất định kí tự nó sẽ xuống dòng để viết tiếp chứ không phải 1 chuỗi viết trong 1 dòng. Mình thử gán theo kiểu dictionary, với mỗi mã bệnh nhân sẽ chứa chuỗi nucleotit của bệnh nhân đó để xử lí. Code của mình để xử lý file là:
f=open('input.txt','r') #file input.txt chứa dữ liệu đầu vào
s={}
a=f.readlines()
i=0
while i<=len(a)-1:
if a[i][0]=='>': #Nhận biết dòng chứa mã bệnh nhân, bắt đầu cho một profile mới, dòng này bắt đầu bằng ký tự ">"
ident=a[i]
s[ident]=''
i=i+1
data=a[i]
while data[0]!='>':
s[ident]=s[ident]+data[0:len(dat)-1] # cộng them chuoi ở dòng tiếp theo vào chuoi đang có trong id "ident" trong dictionary s[ident], bỏ qua dấu xuống dòng \n trong file input
i=i+1
data=a[i]
Mình chạy thử code, và nó báo lỗi :
Traceback <most recent call last>:
File "Testdic.py", line 14, in <module>
dat=a[i]
Index Error: list index out of range
Nếu mình chạy thuật toán bằng tay thì nó có lý, mà chạy chương trình thì nó ra vậy :(( Bạn nào tìm lỗi sai giúp mình với :((