-1

何をしたかわかりません - それは間違っています。誰かが私を助けることができますか?

def insert_sequence(dna1, dna2, number):

    '''(str, str, int) -> str
    Return the DNA sequence obtained by inserting the second DNA sequence
    at the given index. (You can assume that the index is valid.)  

    >>> insert_sequence('CCGG', 'AT', 2)
    'CCATGG'
    >>> insert_sequence('TTGC', 'GG', 2)
    'TTGGGC'
    '''
    index = 0
    result = '';
    for string in dna1:
        if index == number:
            result = result + dna2

            result = result + string
            index += 1

            print(result)
4

6 に答える 6

1

if-elseここにループが必要でした:

def insert_sequence(dna1, dna2, number):


    result = '';

    #you can use enumerate() to keep track of index you're on

    for ind,x in enumerate(dna1): 
        if ind == number:            #if index is equal to number then do this
            result = result + dna2 +x
        else:                        #otherwise do this   
            result = result + x 


    print(result)

insert_sequence('CCGG', 'AT', 2)
insert_sequence('TTGC', 'GG', 2)

出力:

CCATGG
TTGGGC
于 2012-10-21T23:08:22.887 に答える
1

他の回答 (特に Rakesh Pandit からのコメントと JeffS からの回答) には既に適切に機能する機能がありますが、実際の質問は「なぜ私の元の機能が機能しないのか」です。

私はあなたの機能の作業バージョンをコピーしました、以下のコメント:

def insert_sequence(dna1, dna2, number):

    index = 0
    result = ''

    for character in dna1:
        if index == number:
            result = result + dna2
        result = result + character
        index += 1
    print(result)

Python はインデントを考慮しているため、ループと if の外側で、物事の最後にのみ出力する必要があります。結果を「増やす」場合は、関数の「if」内でのみこれを行います。実際には「dna1のすべての文字に対して」増やす必要があり、「if index == number」の場合にのみ、真ん中に配置する必要があります中に紐。

おそらく生物学的背景から、Python またはプログラミング全般に非常に慣れていないと思いますが、他の人が示したように、このタイプの文字列操作を実行するために反復するべきではありません。

お役に立てれば!

于 2012-10-21T23:21:19.603 に答える
1

解決策は次のとおりです。

def insert_sequence(dna1, dna2, number):

    '''(str, str, int) -> str
    Return the DNA sequence obtained by inserting the second DNA sequence
    at the given index. (You can assume that the index is valid.)  

    >>> insert_sequence('CCGG', 'AT', 2)
    'CCATGG'
    >>> insert_sequence('TTGC', 'GG', 2)
    'TTGGGC'
    '''

    return dna1[:number] + dna2 + dna1[number:]
于 2012-10-21T23:02:05.560 に答える
0

インデックスが挿入ポイントにない場合は、インデックスのインクリメントを含め、何もしません。あなたのコードはelseを必要とし、あなたはまた時期尚早に印刷しています:

def insert_sequence(dna1, dna2, number):
    index = 0
    result = '';
    for char in dna1:
        if index == number:
            result = result + dna2
            result = result + char
            index += len(dna2) + 1
        else:
            result = result + char
            index += 1
    print(result)
于 2012-10-21T23:09:18.970 に答える
0

犯した間違い: a) パラメータのインデックスが 0 に初期化されている。 b) 「for sting in dia1:」は「for dia1_position in range(len(dia1)):」であるべきだった c) 出力結果のインデントが間違っていて、関数が正しくない印刷するはずです。結果を返す必要があります。d) 現在、インデックスをインクリメントする必要はありません。

答えはすでにそこにあります。上記は、犯した間違いを簡単にリストしています。関数を呼び出したことがないため、エラーは表示されなかったと思います。最初のエラーは「番号」が定義されていないはずです(質問が更新され、パラメーターに番号が定義されているため、これ以上ではありません)。

于 2012-10-21T23:25:26.177 に答える
0

文字列を分割することはないので、常に dna2 を dna1 の先頭に追加します。

あなたはおそらくしたいですreturn dna1[:number] + dna2 + dna1[number:]

于 2012-10-21T23:02:01.127 に答える