I'm wondering if there is more elegant way to check if the string (str = 'abcccbbaabcbca') contains only 'a','b' or 'c' than iterating over it :
for i in str:
   if i in ['a','b','c']:
      pass
   else :
      print('wrong character')
You could use any with a generator expression:
if any(c not in 'abc' for c in _str):  # Don't use str as a name.
    print('Wrong character')
 
    
    Convert both strings to sets and check if they are equal. If yes, your string contains a AND b AND c:
valid = set(your_string) == set('abc')...
Use issubset to check if it contains ANY of a, b, c:
valid = set(your_string) <= set('abc')
or
valid = set(your_string).issubset('abc')
Subtract the sets to find out invalid characters:
bad_chars = set('abcXYcba') - set('abc') # set(X,Y)
 
    
    Using regular expressions:
import re
if re.search('[^abc]', string):
    print('wrong character')
 
    
    You can also use string.translate:
import string
s = 'abcccbbaabcbca'
# translate character to empty ""
t = string.maketrans("","")
# if non-abc character is found s.translate will become the bad characters
if s.translate(t, 'abc'):
    print ('wrong character')
As also pointed out from @PadraicCunningham
# for one off usage, you can skip making a translation table.
if s.translate(None, 'abc'):
…
