[Tutor] (no subject)

Steven D'Aprano steve at pearwood.info
Thu Nov 17 15:11:00 CET 2011


Nidian Job-Smith wrote:
> Hi all,
> I'm new to programming (thus Python), so after reading the basics, I wanted to practise what I've learnt . I've come across a beginners exercise which is to programme rot13.
> I've written some code but it doesn't seem to work....
> Here it is: 
> 
> def rot13(s):    char_low = ()    result = ""    if not s.isalpha():        return char    char_low = char_low.lower()    if char_low <= 'm':                dist = 13    else:                dist = -13    char = chr(ord(char) + dist)             def rot13_char(ch):  return ''.join( rot13(s) for char in ch )  
> Any idea where i'm wrong? 


Hi Nidian,

If possible, please send code as plain text emails, not so-called 
"rich-text" (actually HTML), as it tends to mangle the formatting and 
make it almost impossible to decipher for some people.

Also, please choose a meaningful subject line, to make it easier for 
people to follow the conversation.

Some comments on your code, if I have re-created the formatting correctly.

(1) You seem to have mixed up strings and characters. You have a 
function called "rot13" with an argument called "s" (for "string"), but 
it is intended to operate on a single character. On the other hand, you 
have a function called "rot13_char" with an argument "ch" (for 
"character"), but it operates on an entire string! You should reverse them:

rot13(s) => apply rot13 to an entire string, s
rot13_char(c) => apply rot13 to a single character, c


(2) You have a lot of inconsistent variable names. For example, in your 
version of "rot13_char" (which actually operates on an entire string, 
not a character), you have:

def rot13_char(ch):
     return ''.join( rot13(s) for char in ch )

Inside the join(), you have a loop "for char in ch" (for character in 
character???) but then you refer to "s". This should be written as:

def rot13(string):
     return ''.join(rot13_char(char) for char in string)


Likewise in the "rot13" function (better named rot13_char), you 
inconsistently refer to variables by different names. You must be 
consistent.


Does that give you enough hints to continue? If not, ask any more 
questions you like!



-- 
Steven


More information about the Tutor mailing list