Помощь с True False
дорогие программисты, я новичок в пайтон, начал учить его с книги Зеда Шоу, там есть упражнение, выучить/понять таблицу истинности, так вот я вроде всё понял кроме одного вот этого:
пожалуйста кто может, помогите на простом примере, и не слишком сложным языком а то сам я не осилю.
Ответы (4 шт):
Гораздо проще(лично мне) было понять таблицы истинности на примерах с единицами(True) и нолями(False).
На картинке ниже приведена таблица истинности для функции And - логического умножения. X,Y это ее входы, Z, то что на выходе. 0 соответствует False, 1 соответствует True.
Когда на хотя бы одном из входов будет 0, то и на выходе будет 0, все как в математике.(1x0=0, 0x1=0, 1x1=1).
У вас на примере изображены функции ИЛИ-НЕ(OR-NOT) и И-НЕ(AND-NOT). Функция НЕ(NOT) инвертирует результат, т.е, из 0 делает 1, из True делает False и наоборот.
Соответственно, функции OR-NOT и AND-NOT будут на выходе давать обратные значения функциям OR и AND, соответственно. Т.е, там где у вас было на выходе 0 будет 1 и таблица истинности для функции И-НЕ будет выглядеть следующим образом:
Такое не нужно запоминать. Достаточно знать всего три правила, а сложные выражения читать по частям.
A or B(логическое 'или') — Если хотя бы одно из двух выражений будeтTrue, значение всего выражения тоже будет True.
«сейчас зима or сейчас весна or сейчас лето or сейчас осень» — Значение такого высказывания всегда будет True, потому что хотя бы одно из четырех будет выполнено.
A and B(логическое 'и') — равняетсяTrueтолько если все операнды будут True.
«сидишь and читаешь ответ and пьешь кофе» — Если хотя бы одно из высказываний неверно, всё выражение будет False. Оно требует выполнения всех условий, чтобы стать True.
- Отрицание.
not False→Truenot True→False
Ваш not (False or True) → { or, есть хотя бы один True } → not (True) → False
Не нужно зубрить эти таблицы.
В школе же не зубрят таблицы для всех вариантов выражений арифметических выражений, например (a*b) + c ? Вместо этого просто учат способы вычисления простых действий (сложения/вычитания, умножения/деления), а дальше просто любое относительно сложное выражение вычисляется "по действиям". Так и тут: сначала вычисляете выражение в скобках, потом то что за скобками, и т.д.
Для упрощения считайте, что False - это 0, True - это 1 (или любое число не равное нулю), or - сложение, and - умножение (кстати, or и and называют соответственно логическим сложением и умножением), not - просто замена любого отличного от нуля числа на 0, а 0 на 1.
Сравните, таблица истинности для or и таблица результатов сложения:
False or False == False # 0 + 0 = 0
False or True == True # 0 + 1 = 1
True or False == True # 1 + 0 = 1
True or True == True # 1 + 1 = 2 (но т.к. это не 0, значит True)
Аналогично для умножения:
False and False == False # 0 * 0 = 0
False and True == False # 0 * 1 = 0
True and False == False # 1 * 0 = 0
True and True == True # 1 * 1 = 1
В Python для and и or также действует то же правило приоритетов, как и для сложения с умножением: сначала выполняется and, потом or (не во всех языках программирования это так, например в Pascal, насколько я помню, у этих операций одинаковый приоритет, и часто приходится ставить дополнительный скобки).
Что будет действительно полезно - ознакомиться с законами булевой алгебры (это типа базовых законов в арифметике - например, что при умножении любого числа на 0 будет 0 - аналогичное правило есть и в логике): Булева алгебра
Чтобы не так страшно было от формул там, немного расшифрую: уголок вверх (конъюнкция) - and, уголок вниз (дизъюнкция) - or, ступенька или черта над буквой (отрицание) - not.
Полезно там обратить внимание на законы Де Моргана (внесение отрицания в скобки) - часто у новичков с этим возникают проблемы.
С опытом ты поймешь, что это всё намного легче чем кажется и тебе абсолютно не нужно учить эти таблицы. Представь такую задачу: тебе нужно проверить, правильный ли логин и пароль у пользователя. Ты напишешь что-то вроде этого
if check_login() and check_password():
# авторизация
else:
print('Неправильный логин или пароль')
Но если тебе не нужна авторизация, то ты можешь написать просто
if not (check_login() and check_password()):
print('Неправильный логин или пароль')
Скорее всего это сложно сейчас понять, поэтому открой среду разработки и поэксперементируй с разными данными. Если у тебя не установлен Python, то посмотри это видео https://youtu.be/NfZPJIEKjEA.


