Programming languages are not natural languages and have different (and much stricter) grammars.
In natural languages, we all understand that "if a is equal to b or c" actually means "if a is equal to a or a is equal to b", but in programming language the formaly similar statement "if a == b or c" is parsed "if (expression) == (other expression)". Then each expression is evaluated (replaced with it's current final value) and only then the equality test is done. So
if a == b or c:
is really:
d = b or c
if a == d:
Now the expression b or c returns the first of b or c which has a true value. Since in Python a non-empty string as a true value, your code:
if FavPokemon == ('Pikachu' or 'pikachu'):
is really:
name = ('Pikachu' or 'pikachu')
if FavPokemon == name:
and since 'Pikachu' is a non empty strings, this ends up as:
name = 'Pikachu'
if FavPokemon == name:
or more simply:
if FavPokemon == 'Pikachu':
The general rule is that if you want to test against multiple conditions, you have to write it explicitely, ie:
if a == b or a == c:
or
if a == b and x != y:
etc
Now if you want to test whether one object (string or whatever) is part of a collection of objects (tuple, list, etc), you can use the in operator:
a = 5
if a in (4, 5, 6):
# ...
But in your case, since what you want is to test against the capitalized or uncapitalized version of the same word, you could instead transform the user's input (FavPokemon) in a "normalized" version and test against the "normalized" version of your string, ie instead of:
if FavPokemon in ('Pikachu', 'pikachu'):
you could write:
FavPokemon = FavPokemon.lower()
if FavPokemon == 'pikachu':
Note that this will be a bit less strict than the in version as it will accept "pIkachU" or "PIKACHU" or just any combination of upper/lowercase - but for your use case that's usually what's expected.
if s == a or s == b?