Python Challenge

第1题 字符串替换

将字符串里面的字母往后推两个,例如a变为c,z变为b,其它字符不变.

 1 def convert_string(aString):
 2         bString = ' '
 3         for i in aString:
 4             if ord('a')<=ord(i)<=ord('w') or ord('A')<=ord(i)<=ord('W'):
 5                 k = chr(ord(i)+2)
 6             elif i == 'y' or i == 'z':
 7                 k = chr(ord('a')+1+ord(i)-ord('z'))
 8             elif i == 'Y' or i == 'Z':
 9                 k = chr(ord('A')+1+ord(i)-ord('Z'))
10             else:
11                 k = i
12             bString += k
13         return bString

效果:

 

官方推荐用maketrans方法

intab = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
outtab = "cdefghijklmnopqrstuvwxyzabCDEFGFIJKLMNOPQRSTUVWXYZAB"

trantab = theString.translate(theString.maketrans(intab,outtab))

maketrans返回转换列表,转换规则是将字符串intab中的字符转换成outtab中对应位置的字符,translate按maketrans返回的转换列表执行转换操作.

 

 

第2题 从字符串中找字符

查看网页源代码,把那一堆字符保存到文件rare_char.txt文本文件中。

file = open("/home/zhanchao/Desktop/rare_char.txt")
filestr = file.read()
for i in filestr:
        if "a"<=i<="z":
                print(i)

 

第三题 正则表达式

一些基础:正则表达式

查看网页源代码,把那一堆字符保存到rare_char.txt文本文件。

结果是linkedlist,后面是.php。

import re
file = open('/home/zhanchao/Desktop/rare_char.txt')
filestr = file.read()

pat = r'[a-z][A-Z]{3}[a-z][A-Z]{3}[a-z]'
m = re.findall(pat,filestr)
for i in m:
        print(i[4],end = "")

 

第四题:网络

这个题我是看了答案的,一开始以为nothings是指一些质数或素数。。。没想到是网址

要用search而不是match因为match是从第一行开始匹配的。

最后得到peak.html

from urllib.request import urlopen
import re
uri = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=%s"
num = "12345"
#num = str(16044/2)
while True:
    content = urlopen(uri % num).read().decode()
    print(content)
    match = re.search("and the next nothing is (\d+)",content)
    if match == None:
        break
    num = match.group(1)

 

posted @ 2018-05-09 12:09  huangzc  阅读(214)  评论(0编辑  收藏  举报