澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

过关心得,python中的字母转换

万籁俱寂之间了然到了贰个很逗比的网址:

1、K -> M  O ->Q  E -> G

Python Challenge 过关怀得(1卡塔 尔(阿拉伯语:قطر‎,pythonchallenge

       正式启幕第1关,那大器晚成关的UTiguanL的奇怪部分是map。

       那关的图样上有贰个剧本,上边写着K→M,O→Q,E→G,稍稍酌量就能够发掘那多少个假名都是根据字母表的逐个直后活动了两位,那么最投机取巧的办法正是把map的3个字母遵照这么些法则改换就能够了。即便这么些是小编想要的结果,但却并非自个儿想要的进程,依旧得服从标准的编程方法来,而且下边还会有别的的提醒,姑且先全体看完。

       图片下方有意气风发行提醒:三思而后解题。再下方是几行毫无准绳的字母组合,很确定是要透过上述准则转变的。

       对于这样的转变,很自然的想到的正是ASCII码。查阅资料后,开掘python中ASCII码和字符的互相调换使用的是ord()函数和chr()函数。然后要小心的是y和z应该是要转造成a和b,那么那四个正是上前挪动25位。写好程序以后察觉叁个主题素材,由于自家用来记录转变后内容的是二个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

过关心得,python中的字母转换。 

       运转后输出了退换后的唤醒: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关的左下角提示到,把UKoleosL里的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]就是从字符串开首切成片到第1位,即'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。

 

Challenge 过关切得(1卡塔尔国,pythonchallenge 正式开首第1关,这大器晚成关的U牧马人L的超过常规规部分是 map 。 那关的图样上有一个本子,上边写着KM,OQ,EG,...

由第生龙活虎关解得第二关入口:,页面如下:

[Level 1]

图片 4

Title: What about making trans?

图片下方有两段话,但独有第后生可畏段能辨识:

everybody thinks twice before solving this.

而图中K→M,O→Q,E→G,理清此中映射关系,思路就有了。

import string
table = str.maketrans(string.ascii_lowercase,string.ascii_lowercase[2:]   'ab')
s.translate(table)#s是要转换的字符串

改造第二段话赢得:

i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

转换url中的map,得到ocr,[Level 2]

 

Hint:每一个人在减轻那个主题材料在此之前先想四遍

图片 5

小结

选取调换表调换每叁个字符。

  1. string.ascii_lowercase代表叁拾伍个顺序小写字母
  2. static str.maketrans(x[, y[, z]]),方法再次来到用于str.translate()的调换表。
    只叁个参数时,类型必得是dict,键为Unicode ordinals(整数卡塔尔国或字符,值为随机长度字符串也许None,键对应的字符将被更动为值对应的字符(串卡塔 尔(阿拉伯语:قطر‎;借使有多少个参数,参数长度必得相等且x中每叁个字符对应转变y中每二个字符;假设有第多个参数,对应的字符转变为None。
  3. str.translate(table)回来经过给定的翻译表映射每一种字符的字符串的别本。

于是乎就遭遇了第二题,他列出了生龙活虎串文本:

Text: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.

 

Python Challenge Wiki

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.

各种字母的ASCII码值扩张2

情趣很显眼,用剧本上的法规解读大青的字符串。可见规律:全部字母向后活动两位。

1. 运用chr()和ord()列表剖判

  • "".join(map(lambda x: x.isalpha() and chr((ord(x) 2-ord("a"))& ord("a")) or x, input))
  • "".join([(c.isalpha() and chr(ord('a') (ord(c)-ord('a') 2)&) or c) for c in "map"])

接下来交到了下图:

图片 6图片 7

#加密字符串
s ='''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.'''
#初始化解密字符串(容器)
m = ''
#偏移量
p = 2
#循环处理字符串中的每个字符
for i in s:
    #对非字母的字符不加处理
    if i not in [' ','(',')',''','.']:
        #正常偏移范围内的处理
        if ord(i)<=ord('z')-p:
            m = m   chr(ord(i) p)
        #当偏移出字母的范围时,要从头开始
        else:
            m = m   chr(ord(i)-ord('z')   p   ord('a') - 1)
    else:
        m = m   i
print(m)
思路小解

相符的思路,在Ascii码和字符之间开展调换得到结果。

  1. str.isalpha()函数判断字符串是还是不是是字母。
  2. chr(i)重返表示Unicode码点为整数i的字符的字符串;ord(c)回去八个代表该字符的Unicode代码点的整数。
  3. map(function, iterable, ...),应用function方法,(并行卡塔 尔(阿拉伯语:قطر‎重临参数中的迭代成分。
  4. lambda表达式相当于创建叁个无名氏函数。
  5. str.join(iterable),重返迭代器里的具备字符串。

图片 8

# -*- coding:UTF-8 -*-

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."

# (ord(x) 2-ord('a'))&
# x的ASCII码值 2之后是第几个字母
print("".join(map(lambda x: chr(ord('a')   (ord(x) 2-ord('a')) % 26) if x.isalpha() else x, str)))

早先把偏移2向来代入总括,并且 if ord(i卡塔尔<=ord(‘z’卡塔 尔(阿拉伯语:قطر‎- p  以前写的是 if ord(i卡塔尔<ord(‘y’卡塔尔国,    动脑有一点不太好,假若换了偏移量,将在改多数地方,所以程序照旧“抽象”点呢,意味着“不太难堪”。

More

 

(1)

运算结果:“i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.”意思是将规律用于url地址上,map---->ocr

通过图形中的音信大家能意识到,其实正是将日前字母现在移动两位。

改变之后的Text:i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

进而第三关入口:

第意气风发自身先用了chr() ord()来调换:

再对url实行转变然后代替map步入下豆蔻梢头页面:ocr.html

                                                    2017.7.14

输出结果:

将url中的pc替换为pcc能够看来前黄金年代题的官方解

 

i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

 

还是告诉自身要用 string.maketrans() 函数。于是自个儿尝试了弹指间,开采那一个函数并子虚乌有。网络搜了弹指间,因为自个儿用的python3.x,string 包已经被重组了,所以就改为了如下代码:

 

test_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."

intab = "abcdefghijklmnopqrstuvwxyz"
outtab = "cdefghijklmnopqrstuvwxyzab"
trantab = str.maketrans(intab, outtab)

# print(test_str.translate(trantab))
print(test_str.translate(trantab))

出口结果:

i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

 

可是依然不知晓怎么改url。。。。。。

 

 

 

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:过关心得,python中的字母转换