必威字符串移位操作。Python Challenge 过关注得(1),pythonchallenge

#coding=utf-8
”’
Author: 
首要用于转移字符串,类似凯撒密码的易
比如:
a右移2个位置,为c
d左移2个位置,则ndigits为-2
y右移2个位置,为a

”’

Python Challenge 过关注得(1),pythonchallenge

       正式开第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 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()的代码如下:

必威 21 import
string 2 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的翻写上代码:

必威 31 import
string 2 ‘map’.translate(string.maketrans(string.ascii_lowercase,
string.ascii_lowercase[2:] + string.ascii_lowercase[:2])) View Code

       得到了上下一致关之重大字:ocr。

 

http://www.bkjia.com/Pythonjc/1040202.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1040202.htmlTechArticlePython Challenge 过关注得(1),pythonchallenge
正式开始第1拖累,这等同牵涉之URL的特别有是 map 。
这关的图纸及闹一个本子,上面写在KM,OQ,EG,…

mods = [99, 122]

def shift(strVal, ndigits):
resultVal = []
for c in strVal:
strC = str(c)
if strC.isalpha():
targetAscii = ord(strC)+ndigits # 转换后底字符的ASCII
resultVal.append( chr( targetAscii if
targetAscii<=mods[strC.islower()] else targetAscii-26 ) )
else:
resultVal.append(strC)

return ”.join(resultVal)

if __name__==’__main__’:
print(ord(‘a’))
print(ord(‘y’))
print(ord(‘z’))
print(ord(‘A’))
print(ord(‘Z’))
print(shift(‘y’, 2))
print(shift(‘Y’, 2))

print(shift(‘map’, 2))
print(shift(‘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.’, 2))

相关文章