Логическое выражение, возвращающее true, когда должно быть false (Использование и & или) - PullRequest
1 голос
/ 01 октября 2019

У меня есть логическое выражение, использующее and & or, чтобы определить, верно это или нет. Результат должен быть false, но возвращается true. Почему это? Что я могу сделать, чтобы сделать фактический вывод реальным ответом.

Если я закомментирую последний раздел (or nighttime==False), он даст мне правильный ответ, но это то, что мне нужно включить, и нет смысла делать это and, потому что яхотите, чтобы при выключенных фарах можно было ездить только днем ​​или ночью.

      got_car=True
      drunk=False
      gas=2 #(gallons) - gas currently in the tank of the car
      distance=100 #miles from home
      mpg=35 #miles per gallon expected to be used driving home
      nighttime=False
      headlights_out=True

      can_drive=battery_charged==True and got_car==True and drunk==False and gas*mpg>=distance==True and headlights_out==False or nighttime==False
      print(can_drive)

      if can_drive==True:
          print("Drive home.")
      else:
          print("Do not drive home.")

Должно быть напечатано значение False, так как газа недостаточно для того, чтобы добраться до дома на полную дистанцию, но он печатает true.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

can_drive немного многословно, и вы должны использовать круглые скобки в вашем условии, поскольку and имеет более высокий приоритет, чем or, поэтому вы можете использовать следующее:

can_drive= battery_charged and got_car and not drunk and gas * mpg >= distance and (not headlights_out or not nighttime)

Вы можететакже улучшите код, который следует за объявлением can_drive:

if can_drive:
    print("Drive home.")
else:
    print("Do not drive home.")

Имейте в виду, что сравнение логического значения с True является избыточным, поэтому просто используйте логическое значение, когда вы хотите проверить, является ли оно True или используйте not, если хотите проверить, является ли это False.

0 голосов
/ 01 октября 2019

Вы хотите заставить условие оценивать or только те данные, которые вам нужны, используя скобки ().

Например, вы хотите, чтобы can_drive было истинным, только если headlights_out ложно или nighttime верно:

can_drive = battery_charged==True and got_car==True and drunk==False and gas*mpg>=distance==True and (headlights_out==False or nighttime==False)
...