2017-10-17 103 views
-1

所以我想知道是否有人想幫助我。我甚至不知道從哪裏開始?任何幫助,將不勝感激。count_bases返回字典

編寫一個函數count_bases來計算每個字母在給定字符串中出現的次數。結果應以字典形式返回,其中大寫字母作爲鍵和出現次數作爲(整數)值。

例如,當使用字符串'ATGATAGG'調用函數時,應該返回{'A': 3, 'T': 2, 'G': 3, 'C': 0}。請確保你的函數使用return,而不是print()。字典中鍵的順序不需要遵循這個順序(2個標記)。

確保您的函數在序列字符串中傳遞任何較低和/或大寫的DNA字符時有效。 (2分)

DNA序列有時含有除A,C,G到T以外的字母以指示簡併核苷酸。例如,R可以代表A或G(嘌呤鹼基)。如果程序遇到除A,C,G或T之外的任何字母,它還應計算該字母的頻率並在字典對象內返回。 (2分)。

回答

0

使用下面的代碼:

def count_bases(input_str): 
    result = {} 
    for s in input_str: 
     try: 
      result[s]+=1 
     except: 
      result[s] = 1 

    return result 

print(count_bases('ATGATAGG')) 

輸出:

{'A': 3, 'T': 2, 'G': 3} 
0

試試:

def f(input): 
    d = {} 
    for s in input: 
    d[s] = d.get(s,0)+1 
    return d 
0
from collections import Counter 

def count_bases(sequence): 
    # since you want to count both lower and upper case letters, 
    # it'd be better if you convert the input sequence to either upper or lower. 
    sequence = sequence.upper() 
    # Counter (from collections) does the counting for you. It takes list as input. 
    # So, list(sequence) will separate letters from your sequence into a list of letters ('abc' => ['a', 'b', 'c']) 
    # It returns you a Counter object. Since you want a dictionary, cast it to dict. 
    return dict(Counter(list(sequence))) 

count_bases( 'ATGATAGGaatdga')

{ 'A':6, 'T':3, 'G':4, 'd':1}

+1

不太可能是有意義的人誰也 「不知道如何開始」 。 OP必須知道'Counter'是'collections'包中的一個類。 –