整理了一些pythn面试可能遇到的题,提供给大家,希望能对大家有用!
1.下面的代码会输出什么?
defextend_list(vl,list=[]):list.ppend(vl)retrnlistlist1=extend_list(10)list2=extend_list(123,[])list3=extend_list('''')print(list1)print(list2)print(list3)
extend_list函数有两个参数,vl和默认参数list,返回值为list
如果你认为输出的值为:[10],[123],[];那你就上当了,这正是出题者想让你犯的错误。
正确答案是:[10,],[123],[10,];为什么呢?
关键点就在extend_list返回的值,它返回的是一个变量,绑定在一个固定的地址,list3传参之后改变了list,所以最后打印的时候,list1和list3的值相同。
那么为什么list2没变呢?因为list2传参的时候给传入了一个空的列表,list2所对应的list所绑定的地址发生了改变。
如果这样说你还不清楚的话,那么我借助代码来看一看。
defextend_list(vl,list=[]):list.ppend(vl)retrnlistlist1=extend_list(10)print(list1)#[10]print(id(list1))#140427568644424list2=extend_list(123,[])print(list2)#[123]print(id(list2))#140427568644360list3=extend_list('''')print(list3)#[10,'''']print(id(list3))#140427568644424print(list1)#[10,'''']print(list2)#[123]print(list3)#[10,'''']
id(变量名)可以查询变量所绑定的地址。
2.有一数组,从左到右渐增,从上到下渐增,给一个数字,判断它是否在这个数组中。
rr=[[1,4,7,10,15],[2,5,8,12,19],[3,6,9,16,22],\[10,13,14,17,24],[18,21,23,26,30]]defgetN(n,dt=Nne):hiledt:#当dt不为空,如果n大于dt数组第个元素的最后一项#删除此元素,再执行此比较ifn>dt[0][-1]:deldt[0]getN(n,dt=Nne)#如果n小于此时的dt数组第一个元素的最后一项#那么利用zip转换矩阵,将所有元素的最后一项都删除掉#然后再次用zip还原数组,回到第一步再次开始比较elifn<dt[0][-1]:dt=list(zip(*dt))deldt[-1]dt=list(zip(*dt))getN(n,dt=Nne)#如果n不大于也不小于此时dt数组第一个元素的最后一项#那么n就是这一项,返回Treelse:retrnTre#当dt为空时,n已经和原dt数组比较完毕,且没有找到相同的数字#返回FlseretrnFlse#如果是在当前文本打开,则执行printif__==''__in__'':print(getN(18,rr))
3.求两个数的最大公约数、最小公倍数。
这个是送分题,我们可以用最笨的办法
def(,b):
#两数的最大公因数最大为较小的数,所以我们遍历从1到较小的数friinrnge(1,b+1):
#如果和b除以i余数都为0,那么i就是和b的公因数if%i==0ndb%i==0:
#将i赋值给变量x,因为i会从1到b,所以只要满足条件的i,都会对x赋值
↑返回顶部↑