This might not be quite what you've got in mind, but one big improvement you could make would be to use meaningful variable names and insert whitespace. def decrypt(): cyphertext = raw_input('Give me the word to decrypt:') shift = input('What was it shifted by?') cypher_chars = list(cyphertext) str(b) # this does nothing; you should remove it cypher_ords = [ord(x) for x in cypher_list] plaintext_ords = [] for i in cypher_ords: plaintext_ords.append(i - shift) plaintext_chars = [chr(i) for i in plaintext_ords] plaintext = ''.join(plaintext_chars) print 'Decryption Successful, your word is', plaintext, '!' Of course you could actually compress much of this into a one-liner. But for a new programmer, I'd suggest sticking with readable variable names that make it clear what's going on. Still, you could do that while compressing the code a bit: def decrypt(): cyphertext = raw_input('Give me the word to decrypt:') shift = input('What was it shifted by?') cypher_ords = [ord(x) for x in cyphertext] plaintext_ords = [o - shift for o in cypher_ords] plaintext_chars = [chr(i) for i in plaintext_ords] plaintext = ''.join(plaintext_chars) print 'Decryption Successful, your word is', plaintext, '!'