这个问题是我在学习Udacity(一个网络课程平台)学习web development课程时遇到的一个问题:
题目大概是定义一个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