[Tutor] implementing rot 13 problems

Danny Yoo dyoo at hashcollision.org
Tue Mar 12 20:05:23 CET 2013


On Tue, Mar 12, 2013 at 9:00 AM, RJ Ewing <ewing.rj at gmail.com> wrote:
> Thank you all for the help. I really appreciated the suggestions. Some of
> the things you pointed out, I originally used, but started changing thing
> when it wasn't working. I got it to work, but if you could let me know if
> there is anything I should do to make this code more pythonesque that would
> be great.

Two suggestions:

1.  Since rot_text itself doesn't use any of the state of the object,
it makes sense to treat it as a plain function.

2.  Explicit array mutation here can be avoided here; it turns out
that writing it without mutation is a little easier to read, and is
less bug prone.

Here's what your code looks like with these two suggestions:

##################################
## rot1: char -> char
## Rotates a single character.
def rot1(char):
    if char.isupper() or char.islower():
        test = 'M' if char.isupper() else 'm'
    if char <= test:
        return chr(ord(char) + 13)	
    else:
        return chr(ord(char) - 13)		

## rot_string: string -> string
## Rotates all the characters.
def rot_string(s):
    return "".join([rot1(ch) for ch in s])
##################################


I've refactored the heart of the rotation logic into rot1().  Note
that it doesn't care about arrays or not: its own concern is the
rotation of a single character.


Good luck!


More information about the Tutor mailing list