【问题标题】:How does if(a & b | c) gets executed in Python?if(a & b | c) 如何在 Python 中执行?
【发布时间】:2019-01-05 06:29:37
【问题描述】:

以下是名人问题的解决方案。

问题:假设你在一个有 n 个人(从 0 到 n - 1 标记)的聚会上,其中可能存在一个名人。名人的定义是所有其他 n - 1 个人都认识他/她,但他/她不认识他们中的任何一个。

现在您想找出名人是谁或确认没有名人。你唯一可以做的就是问这样的问题:“嗨,A。你认识 B 吗?”以获取 A 是否知道 B 的信息。您需要通过尽可能少的问题(在渐近意义上)找出名人(或验证没有名人)。

def knows(a,b): //Function that returns 1 if a knows b else returns 0

people = [[0,0,0,0],[1,0,1,0],[1,0,0,0],[1,0,0,0]]
for i in range(0,4):
        for j in range(0,4):
            if(people[a][b]==1):
                return 1
            else:
                return 0


 a = 0
 c=0
 for b in range(1,4):
        if(knows(a,b)):
             c=b

 for i in range(0,4):
        if((i!=c) & (knows(i,c)) | (knows(c,i))!=1): //1
               print c

我想知道//1 是如何被执行的。在上述情况下,0 是名人。因此 c = 0。所以在第二次迭代中:

i = 1
c = 0
i!=c //Since 1!=0, its true so we get 1
knows(1,0) //1 knows 0 hence return value : 1
knows(0,1) //0 doesn't know 1 hence return value : 0

所以//1 将是:

if (1 & 1 | 1):
    print c 

这里 c 应该被打印,但它没有被打印,它进入下一个迭代。

【问题讨论】:

  • 它确实有效。您的代码还有其他问题。
  • i=0 时只打印一次 0。

标签: python if-statement logic bitwise-operators


【解决方案1】:
for i in range(0,4):
    x1 = (i != c)
    x2 = (knows(i, c))
    x3 = (knows(c, i))
    print("-------")
    # if x1 & x2 | x3!=1: # note != 
    if x1 & x2 | (x3!=1):  # you may want this
        print(c)

查看python operator precedence table了解更多详情。

【讨论】:

  • 或者使用逻辑运算符andor;那么你可以省略括号。
猜你喜欢
  • 2018-01-29
  • 2015-05-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2018-09-15
相关资源
最近更新 更多