python maketrans and translate
剛剛開始學(xué)習(xí)python, 于是在OpenStack Hacker養(yǎng)成指南的指示下,登陸了http://www.pythonchallenge.com網(wǎng)站開始做題。
這個(gè)上面的題目都比較好玩, 能讓人思考, 這一關(guān)的答案就是下一關(guān)的入口, challenge1讓我學(xué)會(huì)了字符串處理中maketrans and translate的用法。
import string
hint_str = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
"""
len = len(string)
for i in string:
if i.isalpha():
new_c = (ord(i)+2)
if new_c > ord('z'):
new_c = ord('a')+(ord(i)+1-ord('z'))
print chr(new_c),
else:
print i,
"""
string1 = "abcdefghijklmnopqrstuvwxyz"
string2 = "cdefghijklmnopqrstuvwxyzab"
table = string.maketrans(string1, string2)
print string.translate(hint_str, table)
url = "map"
print string.translate(url, table)
首先maketrans會(huì)根據(jù)給定的兩個(gè)參數(shù)返回一個(gè)字符轉(zhuǎn)換表, 給出的兩個(gè)參數(shù)必須長(zhǎng)度相同, 如果轉(zhuǎn)換規(guī)則有沖突的, 那么后面的轉(zhuǎn)換規(guī)則會(huì)覆蓋前面的規(guī)則。
生成的轉(zhuǎn)換表就可以讓 translate函數(shù)來(lái)調(diào)用了,下面是translate的文檔說(shuō)明
translate(s, table, deletions='')
translate(s,table [,deletions]) -> string
?
Return a copy of the string s, where all characters occurring?in the optional argument deletions are removed, and the?remaining characters have been mapped through the given?translation table, which must be a string of length 256. ?The?deletions argument is
not allowed for Unicode strings.
如果指定了第三個(gè)參數(shù), 那么就會(huì)在最后返回的字符串中將第三個(gè)參數(shù)中包括的字符刪除掉, translate函數(shù)只有存在于table中的字符才會(huì)給出轉(zhuǎn)換, 負(fù)責(zé)會(huì)維持原來(lái)的字符不變。也就是說(shuō)在string.translate(hint_str, table)執(zhí)行過(guò)程中, 如果hint_str中含有a, 那么會(huì)變成c, 如果含有b會(huì)變成d, 里面的空格,引號(hào)等不會(huì)變, 原樣輸出。