做了一天多终于搞出来了,有点沮丧,自己需要学的有好多好多好多好多啊。
讲讲题目的思路吧,题目要求快速计算出一串式子的结果。提示说思考服务器怎样知道获得算式和提交答案的是一个人,然而我还是没啥思路,好吧,起码大方向给了。就看了提示里的Python requests库,又查了查相关资料,发现直接使用requests调用请求方法发送请求,每次都会创建一个新session(会话对象),没有之前请求的cookies信息。直接创建一个session对象来发请求,那么每次发请求用的都是这个会话对象,所有能够保存之前的会话信息(cookies数据),就能够保证获得算式和提交答案的都是一个人了。session其实是一个会话类,requests的所有请求方法,底层都是调用的这个类的对象。看来是要用python来写啊,这样就有初步的解决思路了。
但是咋计算那串式子呢?首先肯定得从所有的字符串中提取出来,那就用正则表达式匹配试试吧,尴尬的是我正则表达式忘得差不多了,只能再查资料学习了。正则表达式中,+号表示前面的字符必须至少出现一次,*号表示字符可以不出现,也可以出现一次或者多次,?号表示前面的字符最多只可以出现一次。特殊字符需要在钱买呢加上一个\进行转义。python的re模块有全部的正则表达式功能,其中,re.match函数从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,就返回none。re.search则是扫描整个字符串并返回第一个成功的匹配。两者都可以用group(num)或者group()匹配对象函数来获取匹配表达式。 一开始写的表达式一直匹配的不对,看了看应该是空格匹配有些不太对,怎么整也没整好,就偷懒把所有空格都替换了,so sad。好不容易把式子匹配完,并用eavl函数计算出结果。此时的我犯了一个很蠢的错误,想用post请求来提交数据(想当然的脑回路不要有啊),一直不对。纠结了好久终于想起来再去看看网页源代码,扫了一眼,顿时虎躯一震,想捶死自己的心都有了,原来是要用get请求啊!python里requests模块的get方法有几个常用的参数,url-接口地址,headers-定制请求头,params-传递测试接口要用的参数,用python中的字典形式(key:value)来进行参数的传递,timeout-设置接口连接的最大时间,超过该时间会出现超时错误。本题只使用了url和params两个参数。慢慢修改后,最后终于整出来了。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!