Rosalind刷題歷程

1_Counting DNA Nucleotides

with open('E:/rosalind_dna(1).txt') as f:
    a = list(f.read())
    print(a.count('A'))
    print(a.count('C'))
    print(a.count('G'))
    print(a.count('T'))

2_Transcribing DNA into RNA

with open('E:/rosalind_dna.txt') as f:
    with open('E:/new.txt','w') as f1:
        a = f.read()
        f1.write(a.replace('T','U'))

# 把DNA文件中的T所有變成RNA中的U,而後寫進另一個文件裏

3_Complementing a Strand of DNA

with open('E:/rosalind_revc.txt') as f:
    strings = f.read()
    intab = 'ACGT'
    outtab = 'TGCA'
    trantab = str.maketrans(intab, outtab)
    '''
    maketrans() 方法用於建立字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,
    第一個參數是字符串,表示須要轉換的字符,第二個參數也是字符串表示轉換的目標。
    兩個字符串的長度必須相同,爲一一對應的關係。
    '''
    print(strings[::-1].translate(trantab))

4_Rabbits and Recurrence Relations

def Rabbits(n, k):
    if n <= 2: # 這裏關係到兔子幾個月能夠繁衍一代,這裏應該假設的是兔子每隔2個月繁衍一代。
        return 1
    else:
        return Rabbits(n-1, k) + k * Rabbits(n-2, k)

print(Rabbits(3, 4))

5_Computing GC Content

def GCcount(strings):
    G = strings.count('G')
    C = strings.count('C')
    GC = float((G + C) / len(strings))
    return GC

with open('E:/rosalind_gc.txt') as fh:
    a = fh.read().split('>') # 把fasta格式根據'>'從而分開
    ID_and_GC = {}
    del a[0] # 去除空字符串
    for ID_sequence in a:
        ID = ID_sequence.split('\n')[0]
        sequence = (''.join(ID_sequence.split('\n')[1:])).upper()
        GC_content = GCcount(sequence)
        ID_and_GC[ID] = GC_content

ID_and_GC_max = max(ID_and_GC.items(), key = lambda x:x[1])

ID_and_GC = sorted(ID_and_GC.items(), key = lambda x:x[1],reverse = True)
# ID_and_GC.items()是返回獲得[(鍵,值)]的列表。是可迭代對象
# key能夠指定一個函數,來收集可迭代對象中的每個元素(例如,這裏鍵值對列表,而後對鍵值對列表應用函數),從而拿應用過函數的元素作排序
print(ID_and_GC_max)

print(ID_and_GC[0])

6_Counting Point Mutations

with open('E:/rosalind_hamm.txt') as f:
    a = f.read().split('\n')
    a.remove('')
    differ = 0
    for x, y in zip(a[0], a[1]):# zip函數會把a[0]和a[1]內的每一個值都對應成(x,y)這種形式,變成一個元祖
        if x != y:
            differ += 1
    print(differ)
相關文章
相關標籤/搜索