-1

この関数を作成しましたが、アサーション エラーが発生し続け、その理由がわかりませんか???

  def amino(codonfile, DNA):
        """This function reads the 64-line codon file and then converts the DNA string entered into an amino acid string."""
        codonfile = []
        for line in codonfile:
            x,y = line.split()
            if DNA == dict[x]:
                return dict[y]
    codonfile = open("codon.txt","r")   
    codonfile.close

    assert(amino("codon.txt","TTT")== "Phe")
    assert(amino("codon.txt","TTATTCTTGTCT")== "LeuPheLeuSer")
    assert(amino("codon.txt","TTAGGGCCCTAC")== "LueGlyProTyr")
    print("passed")
4

2 に答える 2

5

あなたのコードはパテントナンセンスであり、常に を返しNoneます。

開いているファイルを無視し、ファイル名を関数に渡し、それを空のリストに置き換えるためその空のリストをループして結果を生成しません。

最後に、各assertステートメントは結果 ( None) を文字列と比較しますが、これは決して一致しないため失敗します。

于 2012-11-05T18:11:25.330 に答える
4

前の質問に記載されているのと同じ問題を解決しようとしていると思います。今回はあなたのコードを含めて良い仕事をしました。

あなたのコードにはいくつかの問題があります。

def amino(codonfile, DNA):
    """This function reads the 64-line codon file and then converts the DNA string entered into an amino acid string."""
    codonfile = []
    for line in codonfile:

codonfileへの引数として提供されますaminoが、すぐに空のリストで上書きします! は空のリストなのでcodonfile、反復するものは何もありません。あなたの for ループはゼロ回ループします。代わりにこれを行います:

def amino(codonfile, DNA):
    with open(codonfile, 'r') as f:  # opens the file and assigns to f
        for line in f:

これで、for ループの内部もめちゃくちゃになります。

    for line in codonfile:
        x,y = line.split()
        if DNA == dict[x]:
            return dict[y]

dictこの時点で名前が付けられた辞書はありません。(ただし、組み込みdict型があるため、その名前は使用しないでください)。代わりに、辞書に の項目を入力する必要がありますcodonfile。for ループの前に、それらの項目を保持するための辞書を作成する必要があります。次のようにします。

codon_table = {} # brackets for an empty dictionary
for line in f:
    x, y = line.split()
    codon_table[x] = y  

最後のビットは、 を使用しcodon_tableて DNA 文字列を翻訳することです。DNA3 文字の部分にチャンクし、から翻訳を取得する必要がありますcodon_table。次に、これらの翻訳を 1 つの文字列に結合して返す必要があります。

演習として、最後の段落を実装せずに残しました。試してみて、それが得られない場合は、試したことを別の質問として投稿してください。

于 2012-11-05T18:26:45.570 に答える