2017-03-09 76 views
-2

我对Python很新,所以我真的需要帮助解决这个问题。我尝试了很多次,但无法得到它。任何建议,将不胜感激。由于通过使用Python的布尔真值表

def xor(a,b): 
     return (a and not b) or (not a and b) 

编写返回真值表在字典形式XOR功能。您应该使用XOR()函数内下方

def xorTruthTable(): 

return {} 

输出应该是这样的:

在字典形式的真值表“和”是

{(False, False) : False, \ 
(False, True) : False, \ 
(True, False) : False, \ 
(True, True) : True} 
+2

“我尝试了许多时间”请出示一些那些尝试的。我们可以给你提示他们为什么失败。既然这是作业,你不应该期望超过提示。 –

回答

1

你可以用嵌套循环来做到这一点。我们将遍历所有可能的值a(在这种情况下,FalseTrue),对于其中的每个我们将再次遍历所有可能的值b。无论我们在内部循环中写入的任何代码都会针对ab的每种可能组合运行。

我们将跟踪一张表(一个dict{})来保存这些值。对于ab的每个组合,我们都将元组(a, b)作为关键字,并将xor(a, b)作为该关键字的值。然后我们可以返回字典。

def truth_table(): 
    table = {} 
    for a in [False, True]: 
     for b in [False, True]: 
      table[(a, b)] = xor(a, b) 
    return table 
1

下面是使用itertools.product产生四个可能的输入对一个简洁的解决方案和字典解析以创建字典从它们。 operator.xor是一个库函数,恰好有一样你xor功能

{(i, j): operator.xor(i, j) for i, j in itertools.product((False, True), repeat=2)} 
# Output: 
# {(False, False): False, (False, True): True, (True, False): True, (True, True): False} 
+0

这个解决方案的好处是,它很容易把它扩大到建设超过2个变量的真值表。 –

0

使用Python的^运营商A 1线的解决方案:

{(a,b): a^b for a in (True,False) for b in (True,False)} 

如果你想用你的xor()

{(a,b): xor(a,b) for a in (True,False) for b in (True,False)} 

要么将​​评估为

{(False, True): True, (True, False): True, (False, False): False, (True, True): False}