[Tutor] For - if - else loop; print selective output

Alan Gauld alan.gauld at btinternet.com
Wed Oct 24 18:49:06 CEST 2012

On 24/10/12 17:27, Saad Javed wrote:

> a = [['jimmy', '25', 'pancakes'], ['tom', '23', 'brownies'], ['harry',
> '21', 'cookies']]

> for i in a:
>      if (i[1] == '25' or i[1] == '26'):
>          print 'yes'
> else:
>      print 'Not found'

> I want it to print "yes" for each positive match but nothing for a
> negative match.

So far so good.

> However if all matches are negative, I want it to print
> "Not found" once (That bit the code already does).

Only by accident, as you've seen it always prints that if the loop 
completes. You need to keep a record of any matches and test for that 
after the loop:

matched = False
for i in a:
    if ....
       print 'yes'
       matched = True

if not matched:
    print 'Not found'

I confess I'm not keen on the else part of a for loop and never use it, 
I think it leads to more confusion than anything. It doesn't do what 
most folks seem to expect, it should probably be called 'end' or 
something similar rather than 'else' IMHO.

 >>> for n in range(5):
...    print n,
... else:
...    print 'done!'
0 1 2 3 4 done!
 >>> for n in range(5):
...    if n < 3: print n,
...    else: break
... else: print 'done!'
0 1 2


Alan G
Author of the Learn to Program web site

More information about the Tutor mailing list