国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PythonChallenge過關心得(1)

2019-11-14 17:05:58
字體:
來源:轉載
供稿:網友

       正式開始第1關,這一關的URL的特殊部分是map

       這關的圖片上有一個本子,上面寫著K→M,O→Q,E→G,稍微思索就能發現這幾個字母都是按照字母表的順序向后移動了兩位,那么最投機取巧的方法就是把map的3個字母按照這個規則改動就行了。雖然這個是我想要的結果,但卻并不是我想要的過程,還是得按照正規的編程方法來,而且下面還有其他的提示,姑且先全部看完。

       圖片下方有一行提示:三思而后解題。再下方是幾行毫無規則的字母組合,很顯然是要通過上述規則轉化的。

       對于這樣的轉換,很自然的想到的就是ASCII碼。查閱資料后,發現python中ASCII碼和字符的相互轉換使用的是ord()函數和chr()函數。然后要注意的是y和z應該是要轉換成a和b,那么這兩個就是向前移動24位。寫好程序之后發現一個問題,由于我用來記錄轉換后內容的是一個list表,如果直接PRint的話不利于閱讀,繼續查閱資料后發現join()函數可以實現list到string的轉換,于是正式的代碼如下:

 

 1 code = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp./ 2 bmgle gr gl zw fylb gq glcddgagclr ylb rfyrq ufw rfgq rcvr gq qm jmle./ 3 sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.' 4  5 decode = [] 6 for i in code: 7     if ord('a') <= ord(i) <= ord('x'): 8         decode.append(chr(ord(i) + 2)) 9     elif ord('y') <= ord(i) <= ord('z'):10         decode.append(chr(ord(i) - 24))11     else:12         decode.append(i)13 print(''.join(decode))
View Code

 

       運行后輸出了轉換后的提示:i hope you didnt translate it by hand. thats what computers are for.doing it in by hand is inefficient and thats why this text is so long.using string.maketrans() is recommended. now apply on the url.

       果然按部就班的做完還是有好處的,提示里提到了string.maketrans()這個函數。根據python的官方文檔說明,string.maketrans(from,to)函數給translate()函數提供一個從from映射到to的翻譯表,而translate(s,table,[deletechars])函數則是從s中刪除出現在deletechars里(如果有的話)的字符,再根據table的的規則進行轉換。

       于是使用string下的maketrans()和translate()的代碼如下:

1 import string2 3 code = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp./4 bmgle gr gl zw fylb gq glcddgagclr ylb rfyrq ufw rfgq rcvr gq qm jmle./5 sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.'6 7 print(string.translate(code, string.maketrans('abcdefghijklmnopqrstuvwxyz', 'cdefghijklmnopqrstuvwxyzab')))
View Code

       在第2關的左下角提示到,把URL里的pc改成pcc可以看到前一關的各種解法。點開一看果然很多,還包括了其他語言的解法。值得一提的是,一個解法中使用string.ascii_lowercase和string.ascii_lowercase[2:] + string.ascii_lowercase[:2]的寫法代替了我的代碼中‘abcdefghijklmnopqrstuvwxyz'和’cdefghijklmnopqrstuvwxyzab‘這樣看起來比較亂也容易出錯的寫法。首先,這里的string.ascii_lowercase就是從a到z的所有小寫字母組合成的字符串,當然這里也可以寫成string.lowercase,大部分情況下兩者一樣,但是有些特殊情況后者會有變化,同理還有string.ascii_uppercase和string.uppercase。其次,這里還用到了python中的切片,切片這個概念在看python的基本概念的時候有接觸,但并沒有機會用到,正好借此機會鞏固一下。比如string.ascii_lowercase[2:]就是從string.ascii_lowercase[2]開始切片到字符串末尾,即從'c'到'z',而string.ascii_lowercase[:2]就是從字符串開頭切片到第2位,即'ab',如果有個string.ascii_lowercase[3:6],那么就應該是'def'。

       最后將map的翻譯寫進代碼:

1 import string2 'map'.translate(string.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:] + string.ascii_lowercase[:2]))
View Code

       得到了進入下一關的關鍵字:ocr

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮北市| 朝阳区| 温宿县| 玉门市| 平潭县| 奎屯市| 玉田县| 陇川县| 封开县| 阜阳市| 牟定县| 虹口区| 罗甸县| 和田市| 大城县| 万安县| 孝义市| 时尚| 闻喜县| 大宁县| 云龙县| 云阳县| 丰都县| 桐城市| 肃南| 黔江区| 将乐县| 玛曲县| 南乐县| 五寨县| 南昌市| 石景山区| 仁化县| 额济纳旗| 安龙县| 朝阳市| 天峻县| 神农架林区| 抚州市| 宁城县| 合阳县|