如何处理函数的bool参数?

时间:2018-04-16 16:48:20

标签: python boolean

问题是:
编写一个函数odd(),它接受三个bool个参数,如果奇数个参数是True,则返回True,否则返回False

例如,输出为:

>>> odd ( False , True , False )
True
>>>
>>> odd ( True , True , True )
True
>>>
>>> odd ( True , True , False )
False

这是个问题,但我不确定我在函数中写的是什么? def bool(x,y,z)是不是?顺便说一句,我尝试了一种方法来解决这个问题。

import sys

def bool(x,y,z):
    if x+y+z%2==0:
        return False
    else:
        return True

a = int(sys.argv[1])
b = int(sys.argv[2])
c = int(sys.argv[3])

m = bool(a,b,c)

print(m)

我的方式非常糟糕我知道,但我对布尔参数感到困惑。 有没有人给我指路?

3 个答案:

答案 0 :(得分:3)

运算符优先级将x+y+z%2评估为x+y+(z%2)。你想要的是(x+y+z)%2。 (bool是一种内置类型;你应该将你的函数称为其他内容......)

您正在寻找的功能称为parity function

如果您接受bool作为输入类型,则可能只有xor^)三个变量:

def odd(b0, b1, b2):
    return b0 ^ b1 ^ b2

进行测试
from itertools import product

for b0, b1, b2 in product((True, False), repeat=3):
    print('odd({}, {}, {}) = {}'.format(b0, b1, b2, odd(b0, b1, b2)))

这可以推广为接受任意数量的参数:

from operator import xor
from functools import reduce

def odd(*bools):
    return reduce(xor, bools, False)

答案 1 :(得分:2)

你的方法没问题,你只是忘了括号。

def odd(x, y, z):
    return bool((x + y + z)%2)

您可以轻松地扩展此功能,以获取多个参数:

def odd(*bools):
    return bool(sum(bools)%2)

答案 2 :(得分:1)

您可以通过删除ifelse条件来简化您的功能 写:

def boolean(x,y,z):
    return (x + y + z) % 2 == 1

print(boolean(False, False, False))   
print(boolean(False, False, True))
print(boolean(False, True, True))
print(boolean(True, True, True))

输出:

False
True
False
True

此外,您不应将名称bool用作函数名称,因为它是Python关键字。尝试使用另一个。