02A "else" clauses

Should you always have an "else" clause?

Some students had read that it's a good idea
always to have an else clause when you're doing if-elif. Generally,
yes, it is a good idea ... at least if the else could do something
useful, like error checking. But don't just shoehorn an "else" in if
it doesn't make sense.

For example: in "print numbers as words" problem, several people did
things like:

for i in range(1, 6) :
if i == 1 :
print "one"
elif i == 2 :
print "two"
[ ... similar code for 3 through 5 ]
else :
print "What's going on? i was", i

That's a great use of an else. In this case, you're pretty sure that
you shouldn't ever get anything that's not 1 through 5, but if you
ever did, it means there might be a bug in your program and you'd want
to know about it.

Sometimes you'll have programs where you really only care about a few
values, and for the rest, you really don't need to do anything. It's
fine not to have an else in that case. So don't feel like you have to
put one there every time.

I also saw some solutions like:

for i in range(1, 6) :
if i == 1 :
print "one"
elif i == 2 :
print "two"
[ ... similar code for 3 through 4 ]
else :
print "five"

That's fine as a solution for this exercise, since in this case you
know i will always be between 1 and 5. But in a real program, it
wouldn't be quite as good. What if you wanted to change the program
later to add zero and six through nine? Then it would be weird to
have the else be for 5 rather than 9 or 0, so you'd probably end up
changing that part of the program.

Also, if someone else was reading the program for the first time and
trying to figure out how it worked, they'd have to stop and think
"Wait, why does it always print five if it's not 1 through 4?" Then
they'd have to go back and look at where the number comes from (the
for i in range) before that line would make sense. It's a little
easier to read if you treat all the numbers the same way, each with
its own "if" instead of having one be different.