У меня проблемы с оператором OR в моем коде Python - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать поисковую систему, которая имеет несколько AND и OR и скобки. Пока я делаю код, у меня возникают некоторые проблемы с операционной системой. Я не знаю, если мой код неправильный или мой компьютер не так, потому что иногда он дает правильный ответ, а иногда нет.

sentence = ["A", "B", "C"]
bracket = ["X", "or", "B"]

if "or" in bracket:
   index_of_or = bracket.index("or")
   if bracket[index_of_or -1 ] or bracket[index_of_or +1] in sentence:
      bracket = "True"
      print(bracket)
   else:
      bracket = "False"
      print(bracket)

Я проверял код, меняя элементы в списке скобок. Я положил bracket=['X', 'or', 'Z'] и вывод был True.

Почему это происходит?

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Вам нужно отделить условное утверждение.Вы не можете сделать что-то вроде if x or y == 7 : ..., вам нужно сделать if x == 7 or y == 7.

. Имея это в виду, измените соответствующую строку вашего кода на

if bracket[index_of_or -1 ] in sentence or bracket[index_of_or + 1] in sentence:
0 голосов
/ 16 апреля 2019

Проблема возникает из-за этого утверждения:

if bracket[index_of_or -1 ] or bracket[index_of_or +1] in sentence:

Это на самом деле делает что-то совсем другое, чем кажется.Он оценивается как true, если либо:

  • bracket[index_of_or -1 ] оценивается как true, либо

  • bracket[index_of_or +1] in sentence оценивается как true.

но вы думаете, что оно оценивается как истинное, если либо:

  • bracket[index_of_or -1 ] in sentence оценивается как истинное, либо

  • bracket[index_of_or +1] in sentence оценивается как true.

Первое условное (bracket[index_of_or -1 ]) будет оценено как True, если число не равно 0. Это оценивается как False потому что index_of_or = bracket.index("or") возвращает 1, а bracket[index_of_or -1 ] делает его 0, что делает его равным False.

Чтобы исправить это, просто измените вашу программу на:

sentence = ["A", "B", "C"]
bracket = ["X", "or", "B"]

if "or" in bracket:
   index_of_or = bracket.index("or")
   if (bracket[index_of_or -1 ] or bracket[index_of_or +1]) in sentence:
      bracket = "True"
      print(bracket)
   else:
      bracket = "False"
      print(bracket)

и результат будет False, как и предполагалось.

0 голосов
/ 16 апреля 2019
sentence = ["A", "B", "C"]
bracket = ["X", "or", "Z"]

if "or" in bracket:
   index_of_or = bracket.index("or")
   if (bracket[index_of_or -1 ] or bracket[index_of_or +1]) in sentence:
      bracket = "True"
      print(bracket)
   else:
      bracket = "False"
      print(bracket)

Выход

False

...