2017-06-19 96 views
0

为什么我的代码不让我比较这4个整数---它只是不返回任何值?我在做什么错 - 只是一个初学者比较int值

def isinRange(exonStartPos, exonEndPos, ChromListStartPos, ChromListEndPos): 
    inRange = False 
    if exonStartPos < ChromListStartPos & exonEndPos < ChromListEndPos: 
     returnList = [inRange, 0 , 0] 
     return returnList 
    if exonStartPos > ChromListEndPos & exonEndPos> ChromListEndPos: 
     returnList = [inRange, 0 , 0] 
     return returnList 
    if exonStartPos < ChromListStartPos & exonEndPos < ChromListEndPos: 
     inRange = True 
     returnList = [inRange, ChromListStartPos, exonEndPos] 
     return returnList 
    if exonStartPos > ChromListStartPos & exonEndPos > ChromListEndPos: 
     inRange = True 
     returnList = [inRange, exonStartPos, ChromListEndPos] 
     return returnList 
    if exonStartPos == ChromListStartPos & exonEndPos <= ChromListEndPos: 
     inRange = True 
     returnList = [inRange, exonStartPos, exonEndPos] 
     return returnList 
    if exonStartPos >= ChromListStartPos & exonEndPos == ChromListEndPos: 
     inRange = True 
     returnList= [inRange, exonStartPos, exonEndPos] 
     return returnList 


if __name__ == '__main__': 
    ChromListRange = isinRange(665973, 666002, 745554,752391) 
    print ChromListRange[0] 
+0

不应该在您的函数定义下的代码缩进? –

+0

是的,抱歉,当我在堆栈交换中输入时,它一定是复制错误 –

+0

请解释结果应该是什么,并修复您的缩进(编辑:抱歉,我没有看到上面的评论) – gdelab

回答

3

我相信你需要改变你的& s到and。它为我工作。

0

操作员的准确性。

注意以下事项:

>>> 2 < 3 and 1 < 2 
True 
>>> 2 < 3 & 1 < 2 
False 

第一条语句的计算结果为:

(2<3) and (1<2) 
True and True 
True 

第二然而,计算结果为:

2 < (3 & 1) < 2 
2 < 1 < 2 
False 

a<b<c是蟒蛇有效的语法(在像C语言,这将是一个语法错误),所以没有错误抛出,你只是得到意外输出。

逻辑代数应该使用andornot,而不是按位等效。