问题是:
编写一个函数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)
我的方式非常糟糕我知道,但我对布尔参数感到困惑。 有没有人给我指路?
答案 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)
您可以通过删除if
和else
条件来简化您的功能
写:
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关键字。尝试使用另一个。