-1

コードは次のとおりです。

for x in range(1,15):
    flag = 0
   for b in range (1,15):
      if tagname1[x]== tagname2[b]:
         flag = 1 
         if int(aapos1[b]) <= int(aapos[x])<= int(aapos2[b]): 
            snps = snps + 1 
         elif int(synonymous[x]) == 0: 
            nonsyn2 = nonsyn2 + 1
            break
         elif int(synonymous[x]) == 1: 
            syn2 = syn2 + 1
            break  
      if flag == 0:  
         if int(synonymous[x]) == 0: 
            nonsyn2 = nonsyn2 + 1
            break
         elif int(synonymous[x]) == 1: 
            syn2 = syn2 + 1
            **break** 

snps の値を出力すると、値が 0 になってしまいますが、これはあってはならないことです。自分でデータを調べたところ、3 の値が生成されるはずです。太字にした最後の「ブレーク」演算子を消去すると、問題なく動作しますが、syn2 の正しい値を取得するには、最後のブレークが必要です。そして、そこにブレークがあると、前のループが正しく機能しなくなる理由がわかりません。私が間違っている可能性があることと、これを修正する方法を提案できますか?

Aapos はファイル #1 の値です。Aapos1 と aapos2 はファイル #2 の 2 つの値であるため、コードでは、ファイル 1 の特定のタグ名について、そのタグ名に関連付けられた aapos 番号が aapos1 と aapos1 の間にあるかどうかを確認しています。 aapos2 (最初の if ステートメントで設定されているように、ファイル # 1 のタグ名がファイル # 2 と等しい場合)。したがって、ファイル # 1 のすべてのタグ名 (tagname(x)) について、プログラムにファイル # 2 のすべてのタグ名を調べさせ、(最初の 2 つの if ステートメントによって) 設定した 2 つの基準が満たされているかどうかを確認します。もしそうなら、snp + 1 が必要です。しかし、何らかの理由で、プログラムはファイル # 2 のすべてのタグ名を反復処理しておらず、最初のタグ名のみを反復処理しています。私はこれをテストしました。したがって、最後の break ステートメントの配置がこの問題を引き起こしていると思います。これを削除すると、正常に機能するからです。でも、

ありがとう!!

4

1 に答える 1