2017-09-22 9 views
-1

いくつかの情報を与えるスクリプトを作成しようとしています。私はユーザーに聞いたリストから要素を数えなければなりません。しかし、私はいくつかの要素に問題があります。countメソッドで文字列と異なる要素を取得する方法

例えば、DNA配列が与えられた場合、私は長さ、ヌクレオチド数およびそれらの型が必要です。例えば、のような順序で:AATTAaCCGg出力は次のようになります。

Adenine = 4 (count A and a) 
Thymine = 2 
Cytosine = 2 
Guanine = 2 

これは私が立ち往生しています場所です:

sequence = str(input('Enter DNA sequence:')) 
print ('Your sequence contain:',len(secuencia), 'bases', 'with the following structure:') 
adenine = sequence.count("A" or "a") 
thymine = sequence.count("T" or "t") 
cytosine = sequence.count("C" or "c") 
guanine = sequence.count ("G" or "g") 

print("adenine = ", adenine) 
print("thymine = ", thymine) 
print("cytosine = ", cytosine) 
print("guanine = ", guanine) 

しかしsequence.count部「は「A」を区別していません"私は "and"と "or"構造で試しましたが、うまくいかないようです。ところで

、これはこれは、このような辞書で解決することができます:ちょうど

dicc = {adenine:"A" and "a", thymine:"T" and "t", 
     cytosine:"C" and "c", guanine:"G" and "g"} 
+0

すべての ""マークは何ですか?コードの書式設定を使用している場合は、これらは必要ありません。 –

+3

サンプル中で 'Adenine = 4(count Aとa)'ではないはずです(私は4 Aとカウントします)? もしそうなら、あなたは 'sequence.lower()'メソッドを使い、 'a'だけを数えるなどのことができます。 – arsho

答えて

0

別途見つけると総括:

... 
adenine = sequence.count("A") + sequence.count("a") 
thymine = sequence.count("T") + sequence.count("t") 
cytosine = sequence.count("C") + sequence.count("c") 
guanine = sequence.count ("G") + sequence.count("g") 
... 

またはすべての文字列の小文字を行い、その後、カウント:

... 
sequence.lower() 
adenine = sequence.count("a") 
thymine = sequence.count("t") 
cytosine = sequence.count("c") 
guanine = sequence.count("g") 
... 
-1

このようにカウントする必要があります。たぶんちょっと残酷すぎるかもしれませんが、水のようにはっきりしています。

sequence=input('Give me a DNA:') 
count_a = 0 
count_t = 0 
count_c = 0 
count_g = 0 

for each_letter in sequence.lower(): 
    if 'a' in each_letter: 
     count_a += 1 
    elif 't' in each_letter: 
     count_t += 1 
    elif 'c' in each_letter: 
     count_c += 1 
    elif 'g' in each_letter: 
     count_g += 1 

print('The counters are: \n -%s \n -%s \n -%s \n -%s \n', (count_a,count_t,count_c,count_g)) 
+0

は完全に過剰です。 OPはこのようにしてはならないし、count関数に組み込まれたものよりもどのように明確になっていますか? – arsho

+0

@arsho「それは何よりも明らかだ」とは決して言わなかった。ちょうどそれが読んだことが明らかであることは明らかです。 – dmb

+0

ループ+カウントは 'str.count( 'a')'よりも読みやすくなっていますか? – arsho

1

adenine = sequence.count("A") + sequence.count("a")の場合はどうなりますか?

orは、sequence.count関数の引数として受け入れられないことがあります。 Pythonは論理演算子としてorを評価します。 "A""a"のような文字列は "真実"の値です。だから、ここで起きるのは、あなたがsequence.count(True)と呼んでいることです。それはあなたが期待している結果を与えることはほとんどありません。

"A"または"a"が文字列で表示される回数を数える関数を作成しないと、返された値を処理する必要があります。ここでは整数なので、単純に追加できます。プログラムが文字列を2回検索しなければならないことを意味しますが、このようなプログラムでは問題ありません。例えば

import collections 

sequence = input('Enter a DNA sequence: ') 
counter = collections.Counter(sequence) 
print(counter) 

0

あなたは、各文字の出現カウントするcollections.Counterを使用することができます

Enter a DNA sequence: AATTAaCCGg 
Counter({'A': 3, 'C': 2, 'T': 2, 'G': 1, 'a': 1, 'g': 1}) 

をしかし、あなたが "A" "A" に似ていると考えた場合、あなたができますケーシングを無視:

sequence = input('Enter a DNA sequence: ') 
counter = collections.Counter(sequence.upper()) 
print(counter) 

あなたが得る:

Enter a DNA sequence: AATTAaCCGg 
Counter({'A': 4, 'C': 2, 'T': 2, 'G': 2}) 
+0

ええ、その良い解決策ですが、DNA配列にATCGでもatcgでもない文字が含まれていると、あなたの結果に干渉することがあります。 – Fence

+0

@Fenceもちろん、簡単にチェックできるもう一つの問題です。 cの順番に "ACTG"の中のupper()に '。 –

関連する問題