python中return语句中的逻辑运算符求值

时间:2010-05-19 11:48:30

标签: python logical-operators

这是如何执行的?

def f(x):
    return x>0 and (x%2)+f(x/2) or 0

x是一个数组,例如:[1, 1, 1, 3]

4 个答案:

答案 0 :(得分:2)

此代码已损坏。对于初学者来说,x>0总是如此。但x%2x/2会产生类型错误。

答案 1 :(得分:0)

你的意思是?

$ python
Python 2.5.5 (r255:77872, Apr 21 2010, 08:40:04) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x):
...     return x>0 and (x%2)+f(x/2) or 0
... 
>>> f([1, 1, 1, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
TypeError: unsupported operand type(s) for %: 'list' and 'int'

答案 2 :(得分:0)

return声明中的评估与任何其他地方的评估没有什么不同。如果x是一个列表,那么整个事情就没有意义并且会引发TypeErrorx应该是一个数字,以便工作。

如果x是一个数字,它的工作方式如下:

  • 评估x>0声明
  • 如果True返回(x%2)+f(x/2)部分。当然,这无限地递归
  • 如果False返回0

答案 3 :(得分:0)

该函数以递归方式计算数字x的二进制形式的1的数量。

每次函数加上最低位(1或0)与不带最后一位的数字的位数(除以2就像向右移1)或如果没有更多位则为0

例如: 该函数将返回2作为输入5(5为二进制101) 该函数将返回3作为输入13(13为二进制1101) ...