我创建了一个与x和y变量进行比较的函数。函数内部有很多嵌套的elif来比较x和y然后返回整数。问题是现在,当它在某个elif语句中运行时,虽然语句是正确的,但它并没有执行语句。
def convertTo(self, x, y):
if( x == 0 & y == 0):
return 0
if( x == 0 & y == 1):
return 1
if( x == 0 & y == 2):
return 2
if( x == 0 & y == 3):
return 3
if( x == 1 & y == 0):
return 4 # Didn't return this line even though x = 1 and y = 0
else
return None
def main():
self.convertTo(0,0)
self.convertTo(0,1)
self.convertTo(0,2)
self.convertTo(0,3)
self.convertTo(1,0) # return None? Why?
答案 0 :(得分:9)
您正在执行链式相等比较,而这种比较并没有按照您的想法进行。首先执行按位&
,因为它具有比==
更高的优先级。
替换:
x == 1 & y == 0
# 1 == 1 & 0 == 0
# 1 == 0 == 0 False!
使用:
x == 1 and y == 0
答案 1 :(得分:1)
在Python中,“&”和“和”做两件事。 “和”是你应该使用的,“&”是一个二元运算符。
如果 a = 0011 1100
和
b = 0000 1101
然后
a& b = 0000 1100
请参阅http://www.tutorialspoint.com/python/python_basic_operators.htm
答案 2 :(得分:0)
你应该使用而不是&,作为&是一个按位和。
在Python中链接多个条件通常使用if-elif-else语句完成,如下所示:
if a and b:
# a and b both was true
elif a and not b:
# a was true, but b wasn't
else:
# none of the conditions matched
在你的代码中,如果它不是每个if中的return语句,并且你正在检查相同的两个变量,那么两个if语句可以评估为true。
if a:
# this will run if a was true
if b:
# regardless of a this will run if b was true
else:
# regardless of a this will only run if b was false