0

以前にも同様の質問をしたことがありますが、以前の問題をいくつか修正した後に遭遇した、少し異なる問題を次に示します。

列に同様に構造化された 2 つの txt ファイルがあります。ファイル 1 には、次の列があります。tagname1、aapos、synonymous。ファイル 2 には、tagname2、aapos1、aapos2 があります。私がやりたいことは、ファイル 1 のすべての tagname1 をファイル 2 のすべての tagname2 と比較し、それらが一致するかどうかを確認することです。2 番目の if ステートメントで述べたように、一致するたびに、その特定の tagname1 に対応する aapos 値が aapos1 と aapos2 の間にあるかどうかをプログラムに確認させます。ファイル 2 をすべて調べても aapos に一致するものが見つからない場合にのみ、次の if ステートメントを実行し、ファイル 1 の同義語が 0 または 1 に等しいかどうかを確認し、syn2 または nonsyn2 に 1 を追加します。 、場合によっては。特定の tagname1 について、プログラムがファイル 2 の tagname2 のリスト全体を調べた場合も、同じことが当てはまります。

ただし、私のコードによると、プログラムは 1 回しか実行されず、snps の値は 1、nonsyn2 の値は 1 になります。なぜそうなのかはわかりません。

x が範囲 (1,15) の場合:

    flag = 0
    snps = 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


    if snps == 0: 
        if int(synonymous[x]) == 0: 

            nonsyn2 = nonsyn2 + 1

        elif int(synonymous[x]) == 1: 

            syn2 = syn2 + 1      

    elif flag == 0:  

        if int(synonymous[x]) == 0: 

            nonsyn2 = nonsyn2 + 1

        elif int(synonymous[x]) == 1: 

            syn2 = syn2 + 1
4

1 に答える 1

2

下位の if ステートメントを中断するつもりですか?

例えば:

    if int(synonymous[x]) == 0: 

        nonsyn2 = nonsyn2 + 1
        break

これらは最初の for ループ (for x in range(1,15):) 内にあるため、これらの条件のいずれかが満たされた場合、ループから除外されます。

これが最初のループで発生した場合、それが 1 回しか実行されない理由である可能性があります。

あなたが何をしようとしているのか完全にはわかりませんが、「続行」というキーワードがあなたの望むものかもしれません。これにより、プログラムはループの次の反復に進みます。

于 2013-10-23T18:52:30.440 に答える