Как происходит, если (a & b | c) выполняется в Python? - PullRequest
0 голосов
/ 05 января 2019

Ниже приведено решение проблемы знаменитости.

Проблема: предположим, что вы на вечеринке с n людьми (от 0 до n - 1), и среди них может быть одна знаменитость. Определение знаменитости состоит в том, что все остальные n - 1 человек знают его / ее, но он / она не знает ни одного из них.

Теперь вы хотите выяснить, кто знаменитость, или убедиться, что ее нет. Единственное, что вам разрешено делать, это задавать вопросы типа: «Привет, А. Знаете ли вы Б?» чтобы получить информацию о том, знает ли А Б. Вы должны выяснить знаменитость (или убедиться, что ее нет), задавая как можно меньше вопросов (в асимптотическом смысле).

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. Итак, во 2-й итерации:

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 должно быть напечатано, но оно не печатается и переходит к следующей итерации.

1 Ответ

0 голосов
/ 05 января 2019
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 для получения более подробной информации.

...