Я думаю, вы хотите логику, как это:
animals = ["Cat", "Dog", "Fish", "Bird"]
if X in animals or Y in animals:
print X, Y
В вашем коде выражение («Кошка» или «Собака», «Рыбка» или «Птица») рассматривается как логическое выражение, которое, я уверен, вам не нужно. Как это происходит, это выражение оценивается как «Кошка», что объясняет ваше наблюдаемое поведение.
>>> 'cat' or 'dog'
'cat'
>>> 'cat' and 'dog'
'dog'
Это логические операции со строками. Непустые строки считаются истинными значениями. Пустые строки считаются ложными. Логические операторы Python возвращают значения того же типа, что и операнды (при условии, что оба операнда имеют одинаковый тип). Оценка короткого замыкания объясняет поведение для or
и and
здесь.
В любом случае бессмысленно выполнять логические операции со строками!