When you execute something like '0' or '4', the or operator will verify if the first parameter ('0') is false-ish and, if it is not false, it returns the first value. Since '0' is not false (it is a non-empty string, which yields True when used as boolean), it will return the first value and the following one will not even be considered:
>>> '0' or '4'
'0'
If you repeat it, you will get the same result:
>>> '0' or '4' or '6' or '8'
'0'
Also, the in operator has greater precedence, so it will be executed before each or:
  
    
      '0' or '4' or '6' or '8' in '88'
         '0'
    
  
What you want to do in your condition is to verify if any of the values is in the result:
>>> '0' in str(i) or '4' in str(i) or '6' in str(i) or '8' in str(i)
True
>>> i = 17
>>> '0' in str(i) or '4' in str(i) or '6' in str(i) or '8' in str(i)
False
This is not the most elegant solution, but it is the best translation of your intentions.
So, what would be an elegant solution? As sugested by @sven, you can create a set (more about it) of the sought chars:
>>> sought = set("0468")
>>> sought
set(['0', '8', '4', '6'])
and then create a set of the digits in your number:
>>> i = 16
>>> set(str(i))
set(['1', '6'])
Now, just see if they are disjoint:
>>> i = 16
>>> sought.isdisjoint(set(str(i)))
False
>>> i = 17
>>> sought.isdisjoint(set(str(i)))
True
In this case, if the set are not disjoint, then you want to preserve it:
>>> found = []
>>> for i in range(100):
...     if sought.isdisjoint(set(str(i))):
...         found.append(i)
... 
>>> found
[1, 2, 3, 5, 7, 9, 11, 12, 13, 15, 17, 19, 21, 22, 23, 25, 27, 29, 31, 32, 33, 35, 37, 39, 51, 52, 53, 55, 57, 59, 71, 72, 73, 75, 77, 79, 91, 92, 93, 95, 97, 99]
Most of the time, every time you get yourself creating a for loop for filtering an iterator, what you really want is a list comprehension:
>>> [i for i in range(100) if sought.isdisjoint(set(str(i)))]
[1, 2, 3, 5, 7, 9, 11, 12, 13, 15, 17, 19, 21, 22, 23, 25, 27, 29, 31, 32, 33, 35, 37, 39, 51, 52, 53, 55, 57, 59, 71, 72, 73, 75, 77, 79, 91, 92, 93, 95, 97, 99]
Or, using a clumsier but more novice-friendly construct:
>>> [i for i in range(100) if not ( '0' in str(i) or '4' in str(i) or '6' in str(i) or '8' in str(i) )]
[1, 2, 3, 5, 7, 9, 11, 12, 13, 15, 17, 19, 21, 22, 23, 25, 27, 29, 31, 32, 33, 35, 37, 39, 51, 52, 53, 55, 57, 59, 71, 72, 73, 75, 77, 79, 91, 92, 93, 95, 97, 99]