babusi babusi - 6 months ago 27
Python Question

Python if string contains "foo" do this

I have a twitter bot that responds to tweets containing certain strings from array

t
. I'm trying to write a conditional statement that restricts it from responding to tweets containing strings from another array,
a
. In theory it should work but it doesn't. The bot disregards the if/else statement. My code is as follows:

#I search for tweets to my bot's handle
twt = api.search(q='@samplehandle')

#list of specific strings we want to omit from responses
a = ['java',
'swift']


#list of specific strings I want to check for in tweets and reply to
t = ['I love code',
'python rocks',
'javascript']

for c in twt:
for b in a:
if b not in c.text:
for s in twt:
for i in t:
if i in s.text:
sn = s.user.screen_name
m = "@%s This is a lovely tweet" % (sn)
s = api.update_status(m, s.id)

else:
print "Null"


Thank you

Answer

Instead of having a ton of nested for loops your program will be much more manageable if you make use of a function to determine if a tweet contains words in a specific list. I also changed your variable names because there's no way to work with a, b, c, d,

#list of specific strings we want to omit from responses
badWords = ['java', 'swift']

#list of specific strings I want to check for in tweets and reply to
goodWords = ['I love code', 'python rocks', 'javascript']


def does_contain_words(tweet, wordsToCheck):
    for word in wordsToCheck:
        if word in tweet:
            return True
    return False

for currentTweet in twt:
    #if the tweet contains a good word and doesn't contain a bad word
    if does_contain_words(currentTweet.text, goodWords) and not does_contain_words(currentTweet.text, badWords):
        #reply to tweet