python maketrans and translate
剛剛開始學習python, 于是在OpenStack Hacker養(yǎng)成指南的指示下,登陸了http://www.pythonchallenge.com網(wǎng)站開始做題。
這個上面的題目都比較好玩, 能讓人思考, 這一關的答案就是下一關的入口, challenge1讓我學會了字符串處理中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會根據(jù)給定的兩個參數(shù)返回一個字符轉換表, 給出的兩個參數(shù)必須長度相同, 如果轉換規(guī)則有沖突的, 那么后面的轉換規(guī)則會覆蓋前面的規(guī)則。
生成的轉換表就可以讓 translate函數(shù)來調(diào)用了,下面是translate的文檔說明
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.
如果指定了第三個參數(shù), 那么就會在最后返回的字符串中將第三個參數(shù)中包括的字符刪除掉, translate函數(shù)只有存在于table中的字符才會給出轉換, 負責會維持原來的字符不變。也就是說在string.translate(hint_str, table)執(zhí)行過程中, 如果hint_str中含有a, 那么會變成c, 如果含有b會變成d, 里面的空格,引號等不會變, 原樣輸出。