I don't want to give away my answer (you learn better when you get that critical flash of insight yourself), but:
1. I did find it useful to consult the ASCII table to see the limits of the lower case and upper case characters - these are the two groups of characters you have to check against.
2. Since they are encouraging the use of the mod operator (%), I found it easiest to offset the original character from its ASCII limits to a 1-26 range to be able to use the mod operator correctly. Of course, you will then need to "de-offset" the character after you shift it to get a reasonable result.
3. My conditional loop itself is seven lines long with three checks, so it doesn't have to be long or complicated to work right. (I usually find that I have found the optimal solution to a programming task when my code is concise.)
It is easy (for me) to get confused when dealing with programming constructs like ord(c) vs c itself when there are several manipulations of data, as in this project, so I find it useful to print the value of every variable when troubleshooting and to use short test strings to see how I'm coming along.
Hope this is at least a bit helpful.

Update: Well, after a bit of looking around on Google and experimenting with my program, i eventually got there! I have to say, i'd not have got that way of using modulo (combined with subtracting...) without some heavy hints !