|

楼主 |
发表于 2017-12-25 09:31:46
|
显示全部楼层
提供一个参考解答吧,其实本期的题目很简单的,各种方法都能实现,比如顺序编号、或者随机字符、或者算法实现都可以。
我写的这个是取随机字符,然后把对应关系用pickle保存。
- import random, pickle
- #加密部分:
- def encode_tinyurl(url):
- strings='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
- try:
- with open(r'C:\Users\xuj06\Desktop\pp.p','rb') as pkl:
- data = pickle.load(pkl)
- except:
- data = {}
- encoded = ''.join(random.choices(strings,k=6))
- while encoded in data:
- encoded = ''.join(random.choices(strings,k=6))
- print(f'URL: "{url}" has been encoded to tinyURL: "http://tinyURL.com/{encoded}".')
- data[encoded] = url
- with open(r'C:\Users\xuj06\Desktop\pp.p', 'wb') as pkl:
- pickle.dump(data, pkl)
- #解密部分:
- def decode_tinyurl(tinyurl):
- if len(tinyurl)>6: tinyurl=tinyurl[-6:]
- if len(tinyurl)<6:
- print(f'tinyURL: "http://tinyURL.com/{tinyurl}" is not existed.')
- return
- try:
- with open(r'C:\Users\xuj06\Desktop\pp.p','rb') as pkl:
- data = pickle.load(pkl)
- except:
- data = {}
- if tinyurl not in data:
- print(f'tinyURL: "http://tinyURL.com/{tinyurl}" is not existed.')
- return
- else:
- print(f'tinyURL: "http://tinyURL.com/{tinyurl}" has been decoded to URL: "{data[tinyurl]}".')
- return data[tinyurl]
复制代码 |
|