python的两个笔试题

1.写一个函数,可以在有序的序列中插入数值

暂且不考虑序列是字符还是数字,当时不知为何第一个想到的就是二分查找,许久不曾接触基本的算法了,傻傻的拿起笔在纸上写了几句代码后才发现,在纸上的思路真的不是那么灵光了,于是干脆停笔只将所想到的解决思路写下来,第二个问题也是同样的方法处理。今天有空就重新回顾一下这个问题,先简单温习一下算法的基本过程,然后胡乱的凑了一些代码,基本功能反正是实现了:

程序执行输出如下:

感叹,东西经常不用就容易过期,学习语言也是一样,基础还是要不断的翻阅,才能稳固。

2.大体实现如下功能:

  • 获取某一版本网址中(jenkins)所有版本信息并过滤得到最新的版本号
  • 根据版本名称格式abc-版本号.apk下载版本包
  • 安装版本包到Android设备

这个问题分成几个步骤来分别实现,同时也再好好复习巩固一下相关的内容:

①首先通过urllib获取版本信息。为了方便这里用Mozilla的官方ftp作为操作的对象,例如(http://ftp.mozilla.org/pub/firefox/releases/51.0.1/win32/en-US/)是Firefox英文版下载路径,通过url来GET网页信息:

运行并查看输出信息,可以看到成功获取到了版本文件的信息:

对结果稍微处理一下,修改为对方要求的格式然后继续下一步,通过正则方式获取感兴趣的字符串

②通过re过滤需要的信息

获取所有匹配成功的结果列表。这里写的比较冗余,如果以后需要获取其他列的内容,可以直接添加括号就行。正则表达式一定要参考python IDE里面输出的内容,pycharm的输出是已经将\t\n处理过的结果,容易让人忽略其中的空格字符,例如原始IDE中输出的page内容如下:

过滤结果则正确输出了列表:

虽然这里的信息是一样的,但是不妨碍我们的测试。

③时间和版本信息都已经获取了,接下来寻找最新的版本,假设以编译时间来作为区分

通过冒泡方法找到最新的一次编译时间,然后返回已查获的时间在列表中的index值,对第2步得到的列表进行操作,返回的index值为0,符合预期。

④最后是构造版本包名称,然后下载。

包路径构造先且忽略,看一下下载,曾经的思路是通过调用系统wget命令或者通过urllib实现,在测试过程中发现os.popen()操作wget会立即返回,无法查看结果,所以使用urllib看一下效果:

一句话就可以了,网上大人介绍大文件时最好用requests模块的stream方式,我这里没有安装这个模块,暂且按下。

⑤安装,使用os.popen就可以实现了

这一块就不实际操作了,简单的用netstat -ano做个测试,得到结果可以正常打印基本就算完结了。整体的框架大致就是这样,看代码行数也不是很多,一张纸应该可以写个大概吧。

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据