你用过的Python的库有哪些?分别用于工作中什么场景?
这个是上一期讲的面试题拓展
那今天来再拓展一下,讲一个算法题
利用python循环,输出1+11+111+1111+11111的值
这个题目应该是一个很简单的算法题,为什么我会拿这个来举例子呢?
这是我们技术交流群里的一个伙伴问的我一个问题,
然后我问他做测试做了多少年了,
他说他才大一,已经在开始学Python这一类的题目了。
很多面试题都不是很难,但就是很重要,对于我们面试,还有什么理由不去学它。
那我们今天来看一个Python简单的算法题,是不是大家去面试Python经常也会让你去写一个什么方法,实现一些什么简单的功能,这一类也会有的。
那其实像这些东西,都是一样的套路,在Python里面。
其他语言我不敢多少,在Python里面,如果我告诉你这些小技巧,不管他出什么算法题套路都差不多,无非就是一些递归,函数,循环,判断。
那如果我带着你写几个,你掌握这些套路之后,基本上Python编程面试会问到的题都很简单。
如果这个Python编程题你做出来了,真的在面试的过程中是很加分的,这个面试官肯定就很认可,呃,这个人能在面试的这几分钟,能把这样的算法题做出来,作为一个测试,我还是非常认可的,至少你很有潜力!
有些伙伴可能就会说,会。
Print(1+11+111+1111+11111)
得到的值确实是12345,不信的话可以去加一下。
那面试官一般不会出这样的简单的问题,你如果这样去答,会显得面试官有点尴尬,出这个题目没有那么简单。
遇到这个问题,第一个,我告诉你一个方法,大家不要去循环for什么,先定一个方法
def test()
这个方法名称我就随便写了,然后你观察一个细节,第一个数字是一个1,第二个数字是两个1,以此类推,第六个就是六个1
它是第五个1,那么你就要给它一个参数,这个方法你先写出来,具体方法里面的内容你再去写,比如说调用一个方法,test(5)当它等于5的时候,你给我输出的值就
def test(n):
pass
test(5)
第一个你肯定就要这样写,不要着急写代码。
那具体怎么写,你再用一个for循环,从1开始到n,这个n就是一个函数的调用。然后就是怎么去计算这个值。
函数不仅有参数还有一个最重要的叫返回值,所以说你需要别人调用你的这个函数,你给我这个答案结果到底是多少,是不是有这个答案,有这个返回值吧!
那你返回值返回什么,是不是返回我们的结果,’’‘算法结果’’'那结果我们肯定要定义一个变量,sum,初始变量定义一个结果等于0,最终它经过我们几行代码,变成1+11+111+1111+11111这一个结果,返回这个sum。至少这一步你要得写出来,一个优秀的程序员,他肯定有个思路
这些代码都是要有的吧,就像我们高考数学题最后一道题,比较难,但是你的思路是按步解分的。
那我们来接着看,1+11+111+1111+11111,第一个一个1,第二个两个1,一共加了几次?五次。
那我们就循环五次,最基本的Python编程语法,for i in range():
循环看不明白的伙伴,建议可以公号主页点击资料,领取一些编程基础的教程,免费分享。
循环五次,括号里就填5,如果我们来调这个方法n就是5,也不能写死,写成6,因为你之前如果再加六个1(+111111)
所以我们需要写成n+1
注释一下,这就表示#i:1,2,3,4,5
循环了五次,那每一次我们做了什么事情呢,每加一次这个sum初始值为0,它总得去加一些东西吧,比如说我第一次加的时候,加了1,第二次加的时候加了11,那么它就有一个什么样的特点呢,这个就是一个数学方面了。
在Python里面两个**代表一个数的多少次方
#1 —— 10的零次方
#11 ——10的一次方,加上10的零次方
#111 ——10的二次方再加上之前的内容
那我们肯定会写一行代码,sum总和肯定先加第一次的
sum+=10**(i-1)
这个就表示它从零开始去加,当n等于1的时候,10的i次方,i代表1,2,3,4,5
把i放到里面看一下,当i等于1的时候,(i-1)
当i等于1的时候这样写是没有问题的,那当它等于2,3,4,5的时候呢,那么我们就写一个while循环,当i大于零的时候,(while i>0:)我们一直循环去加,那么有一个什么样的条件呢?i必须要每次减去1,(i-=1)
当i等于2,2是大于0,那我们就sum等于101+100
当i等于0的时候,它已经不大于0 了,就跳出这个循环了,当i等于2的时候是不是就满足我们之前的东西了,等于3的时候一次类推。
完整的代码如下:
那我们来Print一下,运行一下这个结果
那如果我再加一个当i有六个1的时候,1+11+111+1111+11111+111111
这里改成6就好了
以后你去面试肯定会有这一类算法题给你的,冒泡排序,裴波那契数列,递归,肯定会有一个,如果说你想拿到15K以上的薪资,肯定会问你一样的问题。
再来,如果我又改一个需求,最后的数字都变成2,并且成为七位数。前面的数不变。
1+12+112+1112+11112+111112+1111112
你能改一下一两行代码,能实现这个效果吗?
这就涉及到我们的测试思维,开发思维,有时候这个开发思维对我们测试,有伙伴有疑问,那我不用经常写代码,有什么用,你有时候去测试一个用例,也需要用到这些思维,这个逻辑思维能力不管在哪个行业你都用得到。
好了,我们下一篇文章再来展开来讲测试、开发思维。
有兴趣的伙伴可以自己去改一下代码,实现后面的需求。
文章首发于微信公众号:程序员一凡,各类原创面试题解答思路精讲,软件测试学习资源,免费分享。