-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 和aapos2(假设文件#1 中的标记名等于文件#2,由第一个 if 语句设置)。因此,对于文件#1 (tagname(x)) 中的每个标记名,我希望程序检查文件#2 中的每个标记名,看看是否满足我设置的两个条件(通过前两个 if 语句)。如果是这样,那么我想要 snp + 1。但由于某种原因,程序不会遍历文件 #2 中的每个标记名,它只是遍历第一个标记名。我已经对此进行了测试。所以,我的猜测是最后一个 break 语句的位置导致了这个问题,因为一旦我删除它,它就可以正常工作。然而,

谢谢!!

4

1 回答 1

0

查看您的内部循环的迭代。这取决于 synonymous[x] ... 的值,不包括在内,但我猜它是 1 或 0。

所以...标志= 0。

如果标签匹配...设置标志 1,检查您的计数条件,然后检查 syn[x] 并以任一方式中断。

如果标签不匹配...检查 syn[x] 并打破任何一种方式。

通过内部循环的循环有 5 种可能的结果......其中 4 种导致循环中断。要么你在第一次尝试时匹配,要么你打破。我对您解决问题的逻辑知之甚少,但我很确定这不是您想要的。

编辑

你想要这样的东西...

for x in range(1,15):
    for y in range(1,15):
        if tag1 == tag2:
            snps += 1
if syn == 0:
    something
elif syn == 1:
    something else
于 2013-10-23T04:59:40.590 回答