0

我之前问过一个类似的问题,但是在修复了一些以前的问题后,我遇到了一个稍微不同的问题:

有两个 txt 文件,它们的结构类似地分成列。文件 1 有以下列:tagname1、aapos、同义词;并且文件 2 具有以下内容:tagname2、aapos1、aapos2。我想要做的是将文件 1 中的每个 tagname1 与文件 2 中的每个 tagname2 进行比较,看看它们是否匹配。对于每个匹配项,我希望程序检查与该特定标记名 1 对应的 aapos 值是否位于 aapos1 和 aapos2 之间,如我的第二个 if 语句所述。如果在遍历所有文件 2 后,找不到 aapos 的匹配项,那么我是否只想执行以下 if 语句并检查文件 1 中的同义词是否等于 0 或 1 并将 1 添加到 syn2 或 nonsyn2 ,视情况而定。如果对于特定的 tagname1,程序会遍历文件 2 中 tagname2 的整个列表,这同样适用,

但是,根据我的代码,该程序只运行一次,我得到的 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):),因此如果满足其中一个条件,您将被退出循环。

如果这发生在您的第一个循环中,这可能就是您只看到它运行一次的原因。

我不完全确定我理解你想要做什么,但关键字“继续”可能是你想要的。它将使程序进入循环的下一次迭代。

于 2013-10-23T18:52:30.440 回答