1

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

5
  • 1
    If you never break (or return), the else always runs. Commented Aug 14, 2014 at 22:53
  • 1
    In order to avoid the else statement in a for loop you need to break the loop. You'd need a state variable that started as False, was set to True in your conditional block, and then a conditional break. Commented Aug 14, 2014 at 22:53
  • I ve used that logic before, but just out of curiosity is there another way of using try,except, catch? or something Commented Aug 14, 2014 at 22:55
  • @Riddler just add a break when you find the first even number. There are other ways of doing this, of course. Also, it would be helpful to actually include how you hoped the code would work, and how it works instead. Commented Aug 14, 2014 at 22:58
  • You'll need to implement your logic. One way will be to count even numbers first, and check count after the loop. Or you can set flag when even number is found. Commented Aug 14, 2014 at 22:58

4 Answers 4

2

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"
Sign up to request clarification or add additional context in comments.

Comments

2

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"

Comments

1

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 #"

1 Comment

It'd probably be more pythonic to let flag = True in the start, and in the if statement in the loop set flag = False, so then in the final if statement you can have if flag instead of if not flag.
0

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.

3 Comments

That's a nice solution.
@Newb,thanks, might not be what the OP desires but a nice thing to learn about and will be useful at some stage no doubt.
Yup, it might be arguably not quite on topic, but at least I learned something new.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.