【原创】pythonchalleng——第10题
第十题的网址:http://www.pythonchallenge.com/pc/return/bull.html,下面是该题目的截图,特此留念。

我们找到a了,但是它也没有下标为30的元素呀……哦,有可能上面的元素之间存在某些关系,通过这些关系可以推导出a[30]的数值。我们接下来需要做的就是逻辑推理,Fighting!
5分钟……10分钟……15分钟…………
郁闷了……就是看不出什么有效的关系……还是求教于网络吧……不看不知道,一看吓一跳!它们的关系如下:
a[0]=11:1个1,把这些数字串起来,就是a[1]=1111:2个1,把这些数字串起来,就是a[2]=2121:1个2,1个1,把这些数字串起来,就是a[3]=12111211: 1个1,1个2,2个1,把这些数字串起来,就是a[4]=111221111221:3个1,2个2,1个1,把这些数字串起来,就是a[5]=312211……
这下大家知道其中的规律了吧,好了,现在就可以上代码了。
__author__ = 'hengha'import redef fun9(string):first=str(string)rex=re.compile(r'(\d)(\1*)')for k in range(30):data=rex.findall(first)temp=''for i,j in data:temp += str(1+len(j))+ifirst=tempprint len(first)if __name__== '__main__':fun9('1')
我们得到的答案就是5808,把URL中的bull替换为5808,看看会有什么效果。哈哈,顺利进入第11题,网址为:http://www.pythonchallenge.com/pc/return/5808.html
需要强调一下的是我们使用到了正则表达式的技术来提取符合要求的字符串,例如111和22等。我们可以理解\d的意思,就是代表数字,而\1则是引用编号为1的分组匹配到的字符串,即\1可以用来表示第一个匹配的数字,*表示这个数字可以重复0次或多次。因为\d已经匹配了一次,所以后面应该使用\1*,而不是\1+。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
