python之明密文转换
2014-02-25 23:25
387 查看
这个问题是我在学习Udacity(一个网络课程平台)学习web development课程时遇到的一个问题:
题目大概是定义一个ROT13函数,然后将输入字母转换为相应后移13个位置的字母,比如输入Hello,输出应该是Urryb,大小写不变,别的符号不变。
本能想到用一个对应的二元组的List来进行映射:这里使用的zip,它的功能是将两个列表合并成一个二元组,元组中每个元素是原来列表的元素
下面我准备用zip尝试解决这个问题
s = "abcdefghijklmnopqrstuvwxyz"
t = "nopqrstuvwxyzabcdefghijklm"
list = zip(s,t)
def ROT13(str):
for (i,o) in list:
str = str.replace(i,o)
print str
运行模块,结果如下
>>> ROT13("abcdefghijklmnopqrstuvwxyz")
abcdefghijklmabcdefghijklm
也就是说从a到m的没变,从n到z的转换成功
我又举了个其他例子:
>>> ROT13("nopqrstuvwxyzabcdefghijklm")
abcdefghijklmabcdefghijklm
同样只替换n到z
在这儿我感觉到这个replace可能是先找出所有a,替换,然后再找出所有b.....,然后当a~m都替换成n~z后,就和后面的那部分是一样的,接下来字符串中所有的字母都会转换成a~m
想到这儿,我把代码改了一下
将list = zip(s,t)改为 list =zip(t,s)
结果是:
>>> ROT13("abcdefghijklmnopqrstuvwxyz")
nopqrstuvwxyznopqrstuvwxyz
只替换a~m了,上述假设貌似有点道理
为了进一步验证我的想法,我又把代码改了一下s = "abc"
t = "bca"
list = zip(s,t)
def ROT13(str):
for (i,o) in list:
str = str.replace(i,o)
print str
这样,如果上述猜想是正确地,那么ROT13("abca")之后应该是aaa
具体转化过程是abc->bbc->ccc->aaa
题目大概是定义一个ROT13函数,然后将输入字母转换为相应后移13个位置的字母,比如输入Hello,输出应该是Urryb,大小写不变,别的符号不变。
本能想到用一个对应的二元组的List来进行映射:这里使用的zip,它的功能是将两个列表合并成一个二元组,元组中每个元素是原来列表的元素
L1 = [1,3,5,7] L2 = [2,4,6,8] #使用zip将两个列表合并 print zip(L1,L2) for (a,b) in zip(L1,L2): print (a,b) L3 = [2,4,6] #当长度不一的时候,多余的被忽略 print zip(L1,L3)#extra items are ignored #map则不会忽略,例如下例。当L1和L3长度不一的时候, #会用第一个参数来填充。 print map(None,L1,L3)
下面我准备用zip尝试解决这个问题
s = "abcdefghijklmnopqrstuvwxyz"
t = "nopqrstuvwxyzabcdefghijklm"
list = zip(s,t)
def ROT13(str):
for (i,o) in list:
str = str.replace(i,o)
print str
运行模块,结果如下
>>> ROT13("abcdefghijklmnopqrstuvwxyz")
abcdefghijklmabcdefghijklm
也就是说从a到m的没变,从n到z的转换成功
我又举了个其他例子:
>>> ROT13("nopqrstuvwxyzabcdefghijklm")
abcdefghijklmabcdefghijklm
同样只替换n到z
在这儿我感觉到这个replace可能是先找出所有a,替换,然后再找出所有b.....,然后当a~m都替换成n~z后,就和后面的那部分是一样的,接下来字符串中所有的字母都会转换成a~m
想到这儿,我把代码改了一下
将list = zip(s,t)改为 list =zip(t,s)
结果是:
>>> ROT13("abcdefghijklmnopqrstuvwxyz")
nopqrstuvwxyznopqrstuvwxyz
只替换a~m了,上述假设貌似有点道理
为了进一步验证我的想法,我又把代码改了一下s = "abc"
t = "bca"
list = zip(s,t)
def ROT13(str):
for (i,o) in list:
str = str.replace(i,o)
print str
这样,如果上述猜想是正确地,那么ROT13("abca")之后应该是aaa
具体转化过程是abc->bbc->ccc->aaa
相关文章推荐
- wxpython ubuntu statusbar not showing
- python for android : 手机摇一摇
- 《Python》学习笔记
- Python3的变化
- 使用 Python 模拟登录查询
- pip安装python包出错:ctype = ctype.encode(default_encoding) # omit in 3.x!
- python 科学计算学习一:numpy快速处理数据(1)
- 【PythonChallenge】Level 5
- python 信号处理句柄第二个参数的作用
- 使用ctypes调用kernel32.dll中的函数
- Python的switch实现
- python中常见的日期换算
- 解决Python提示No module named 'pkg_resources'错误
- python参考手册--第10、11章执行环境、调试
- 【Python编程】网页URL提取实例
- Python的常见几道数学运算题
- Python 处理理时间超详细转的
- Python源码剖析----第三章(下)
- storm安装(2)ZeroMQ、JZMQ、Python、Java环境的安装
- Python第三站-深入文件与异常(数据持久化)