Python 为什么赢了';循环是否按预期运行?详情如下:

Python 为什么赢了';循环是否按预期运行?详情如下:,python,loops,if-statement,break,Python,Loops,If Statement,Break,我以前也问过类似的问题,但在解决了之前的一些问题后,我遇到了一个稍微不同的问题: 有两个txt文件的结构类似于列。文件1有以下列:tagname1、aapos、同义;文件2包含以下内容:标记名2、aapos1、aapos2。我要做的是将文件1中的每个标记名1与文件2中的每个标记名2进行比较,看看它们是否匹配。对于每一个匹配,我希望程序检查与特定标记名1对应的aapos值是否在aapos1和aapos2之间,如我的第二条if语句所述。如果在浏览完所有文件2后,无法找到aapos的匹配项,则我只想执

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

有两个txt文件的结构类似于列。文件1有以下列:tagname1、aapos、同义;文件2包含以下内容:标记名2、aapos1、aapos2。我要做的是将文件1中的每个标记名1与文件2中的每个标记名2进行比较,看看它们是否匹配。对于每一个匹配,我希望程序检查与特定标记名1对应的aapos值是否在aapos1和aapos2之间,如我的第二条if语句所述。如果在浏览完所有文件2后,无法找到aapos的匹配项,则我只想执行以下If语句,检查文件1中的同义词是否等于0或1,并根据情况将1添加到syn2或nonsyn2。如果对于特定的标记名1,程序遍历文件2中的整个标记名2列表,并且找不到匹配项,则同样适用

然而,根据我的代码,这个程序只运行一次,我得到的SNP值为1,非同步2值为1。我不知道为什么会这样

对于范围(1,15)内的x:

flag=0
单核苷酸多态性=0
对于范围(1,15)内的b:
如果tagname1[x]==tagname2[b]:
标志=1

if int(aapos1[b])您确定要打断较低的if语句吗

例如:

这些都在第一个for循环内(对于范围(1,15)中的x),因此如果满足其中一个条件,您将退出循环

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


我不完全确定我是否理解您的意图,但关键字“continue”可能就是您想要的。它将使程序进入循环的下一个迭代。

请统一设置代码格式。很难像帖子一样阅读。您可能还需要在循环开始时重置
snp
,就像您在
标记
一样-我不确定这是否应该为您的第一个文件中的不同条目累积。现在会的,我想你们都是对的。我做了以下更改,但还有一个问题。前两个if语句设置的两个条件的第一个匹配值为值12。因此,当我将范围设置为12以下的任何值时,我将获得非同步2和syn2的值,它们的总和将达到我的范围上限,正如预期/预期的那样。但是,一旦我将范围增加到12或13,在这一点上它确实找到了匹配项,我得到的syn2和nonsyn2的数字总和,加上它找到的匹配项,就不会达到范围的上限。你是否尝试删除所有的break和continue关键字。现在我再看一遍,我认为这两个都不需要。对不起,我不确定你说的“继续”关键字是什么意思,但我确实删除了所有的中断。好吧,很酷-我认为你有我看不到的代码,但一个快速的故障排除方法是在你想知道发生了什么的地方放一些打印语句。尝试在底部ifs后添加“print x,nosyn2,syn2”。它可能会显示循环是如何为您运行的,并提示在哪里进行修复
    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
    if int(synonymous[x]) == 0: 

        nonsyn2 = nonsyn2 + 1
        break