Я не думаю, что это связано с левой или правой стороной, но больше о том, как и / или оцениваются.
Прежде всего, в python 0 равно False, а 1 - True, но этоВозможно, что True и False будут переназначены, но по умолчанию 0 == 0 или 0 == False оба - True.
При этом вы можете посмотреть, как и / или оценивается условие оператора.
To summerise: операторы и всегда ищут значение False (0), если он находит его по первому оцениваемому параметру, он останавливается, но если он находит True или 1, ему нужно было оценитьвторое условие, чтобы увидеть, если это не так.Потому что False и , что-то еще всегда будет ложным.Эта таблица может помочь вам, посмотрите, когда у меня 0 (Ложь), ответ всегда 0 (Ложь)
*and* truth table
0 0 = 0
0 1 = 0
1 0 = 0
1 1 = 1
или немного отличается, но с той же механикой: или будет искать первый True (1), который он найдет.Поэтому, если он сначала находит False, он оценивает второй параметр, если он сначала находит True (1), то он останавливается.Здесь, когда у вас 1 (True) ответ всегда равен 1 (True)
*or* truth table
0 0 = 0
0 1 = 1
1 0 = 1
1 1 = 1
Вы можете посмотреть на другого оператора, просто таблицу истинности оператора Google, и у вас будет много других и более подробных примеров.
Для вашего примера:
#FOR BOOLEANS
print(False and 0) #prints False because *and* only need one False
print(0 and False) #prints 0 , because 0 = False and *and* only need one False
print(False or '') #prints '' because *or* is looking for a 1(True) but here both are False so he print the last one
print('' or False) #prints False (same reason as the one above) and he print the last one.
print(1 or True) #prints 1 because it's *or* and he found a True(1)
print(True or 1) #prints True same reason as above 1 = True so...
print(True and 1) #prints 1 because *and* is looking for a False and the first condition is True so he need to check the second one
print(1 and True) #prints True same as above 1 = True so and check for second paramater.