On 01/-10/-28163 02:59 PM, Alex Hall wrote:
On 3/21/11, David<[email protected]>  wrote:
Hello list,

I am having trouble understanding the following function. What trips me
up is the "letter = letter.lower()" line.

As I understand, the function takes a letter and assigns True to a
letter if it is upper case.
No, the function takes a letter and returns that letter in its uppercase form.
lr="a"
lr.upper() #lr now = A
lr.lower() #lr now equals a
I should actually say that it takes a string and uppercases any
letters in it. It just happens that you are dealing with one letter
here.

Not even close. The CHAR_MAP is apparently a map from char to char, where both are presumably lower-case ones. My suspicion is the map looks like:

  CHAR_MAP = { "a":"n", "b", "o", ...   "z":"m"}

The code simply returns its input if it's not represented in the map. But if the letter is lowercase, it's just looked up in the map, and the result is returned. if the letter is uppercase, it's changed to lowercase, looked up, then changed back to uppercase.

The code could have been trivial if the map had simply had both lower and uppercase entries in it to begin with. The table would be twice the size, but the code would then have been trivial.

Of course, the maketrans function could have simplified it even more. Or you could just use the rot_13 encoder:

>>> import codecs
>>> f = codecs.getencoder("rot_13")
>>> f("Abcde")
('Nopqr', 5)



DaveA


But then he goes to

letter = letter.lower()

and all letters are converted back to lower again!?? The point is that,
to my understanding, the logic follows from the first block to
letter = letter.lower(). Isn't that true?

Thanks for helping me out,

David


def rotate13_letter(letter):
     """
     Return the 13-char rotation of a letter.
     """
     do_upper = False
     if letter.isupper():
         do_upper = True

     letter = letter.lower()
     if letter not in CHAR_MAP:
         return letter

     else:
         letter = CHAR_MAP[letter]
         if do_upper:
             letter = letter.upper()

     return letter
_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor




_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to