xylz,imxylz

          關(guān)注后端架構(gòu)、中間件、分布式和并發(fā)編程

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

          7-10. Encryption. Using your solution to the previous problem, and create a "rot13" translator. "rot13" is an old and fairly simplistic encryption routine whereby each letter of the alphabet is rotated 13 characters. Letters in the first half of the alphabet will be rotated to the equivalent letter in the second half and vice versa, retaining case. For example, a goes to n and X goes to K. Obviously, numbers and symbols are immune from translation.

          (b) Add an application on top of your solution to prompt the user for strings to encrypt (and decrypt on reapplication of the algorithm), as in the following examples:

              % rot13.py
              Enter string to rot13: This is a short sentence.
              Your string to en/decrypt was: [This is a short
              sentence.].
              The rot13 string is: [Guvf vf n fubeg fragrapr.].
              %
              % rot13.py
              Enter string to rot13: Guvf vf n fubeg fragrapr.
              Your string to en/decrypt was: [Guvf vf n fubeg
              fragrapr.].
              The rot13 string is: [This is a short sentence.].
           

           1#!/usr/bin/env python
           2#-*- coding:utf-8 -*-
           3#$Id: p0710.py 153 2010-06-21 04:19:15Z xylz $
           4
           5'''
           6This is a 'python' study plan for xylz.
           7Copyright (C)2010 xylz (www.imxylz.info)
           8'''
           9
          10endic = None
          11if not endic:
          12    endic = {}
          13    import string
          14    for cc in (string.lowercase,string.uppercase):
          15        for i,c in enumerate(cc):
          16            if i<13: endic[c]=cc[i+13]
          17            else: endic[c]=cc[i-13]
          18
          19def encrypt_decrypt(s):
          20    ret=[]
          21    for c in s:
          22        ret.append(endic.get(c,c))
          23    return "".join(ret)
          24
          25if __name__ == '__main__':
          26    while True:
          27        my_input = raw_input('Enter string to rot13: ')
          28        if not my_input: break
          29        print "Your string to en/decrypt was: [",encrypt_decrypt(my_input),"]."
          30
          由于是對稱的,所以在14,15行中只需要遍歷一次所有大寫字母就可以拿到所有對應(yīng)關(guān)系了,包括加密、解密。另外在22行里面用到了dict的get方法,這樣在非字母符號就可以保持原樣了。

          ©2009-2014 IMXYLZ |求賢若渴
          posted on 2010-06-21 12:25 imxylz 閱讀(17309) 評論(0)  編輯  收藏 所屬分類: Python

          ©2009-2014 IMXYLZ
          主站蜘蛛池模板: 湘潭市| 黄石市| 客服| 洞口县| 芜湖市| 砚山县| 都昌县| 云龙县| 罗城| 天津市| 台南市| 辛集市| 灵武市| 汉源县| 望谟县| 颍上县| 沂源县| 龙井市| 克拉玛依市| 景德镇市| 塔河县| 文水县| 墨脱县| 望江县| 伊宁市| 玉环县| 六枝特区| 石家庄市| 横峰县| 芦山县| 清水县| 马鞍山市| 武汉市| 武鸣县| 阿图什市| 黄骅市| 五莲县| 涟源市| 郑州市| 安吉县| 茂名市|