Reputation: 13
I just realized that this code does not work the way I hoped it would worked...
for i in [0,2,4]:
if i%2==0:
print i
else:
print "There are no EVEN #s"
So what's the best way of coding this sort of structure
The idea is to run the "else" statement code if the "if" statement never becomes true through all the iterations of the "for" loop
Upvotes: 1
Views: 2403
Reputation: 2930
The code doesn't work as you would like it to because the if
and else
are not on the same level of scope. However, there is a for...else
syntax in Python that you were perhaps trying to use. For information on that, see here. To use the for...else
syntax, you need to have a break
statement inside the for
loop. If it breaks, then the else
is not called, otherwise the else
be called after the loop is done.
However, if you don't have a break
statement, then else
always runs.
Here is your code, corrected:
for i in [0,2,4]:
if i%2==0:
print i
break
else:
print "There are no EVEN #s"
As soon as the loop encounters an even number, the loop breaks. Otherwise, if the loop would fully execute (i.e. go through the entire list), then it would also run the else
. Just for reference, here is the loop on a list of odd numbers:
for i in [1,3,5]:
if i%2==0:
print i
break
else:
print "There are no EVEN #s"
Upvotes: 2
Reputation: 180411
If you just want to check if any even numbers exist and don't care about the value use any:
if any(i % 2 == 0 for i in [0,2,4,5]):
print "The list has even numbers"
else:
print "There are no EVEN #s"
any
will evaluate lazily returning True as soon as any even number is found or False if the list contains no even numbers.
Upvotes: 0
Reputation: 309929
I think that a more "pythonic" approach would be to filter the list and check if the filtered list has any elements to figure out what to print:
lst = [0, 2, 4]
filtered = [x for x in lst if x%2 == 0]
if filtered:
for item in filtered:
print item
else:
print "No evens"
Upvotes: 2
Reputation: 4049
just set a flag in the if statement that you can check after the for loop is finished running.
e.g.
flag = False
for i in [0,2,4]:
if i%2==0:
print i
flag = True
if not flag:
print "There is an ODD #"
Upvotes: 1