函数返回none而不是返回数字

时间:2016-10-27 13:20:36

标签: python if-statement

我创建了一个与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?

3 个答案:

答案 0 :(得分:9)

您正在执行链式相等比较,而这种比较并没有按照您的想法进行。首先执行按位&,因为它具有比==更高的优先级。

替换:

x == 1 & y == 0
# 1 == 1 & 0 == 0
# 1 == 0 == 0  False!

使用:

x == 1 and y == 0

请参阅:Operator precedence

答案 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

另外,请看一下:https://docs.python.org/3/tutorial/controlflow.html