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)