你在金九银十的求职浪潮中如鱼得水,而我在码字—Python面试题
虽然明天就是中秋节了,而我依然在电脑面前码字,写总结。多写一些,你们中秋就多学一点,哈哈哈!Python面试题又来咯!找工作的你,还不赶紧看。
一 .反转一个整数,例如-123 --> -321
classSolution(object):defreverse(self,x):if-10<x<10:returnxstr_x=str(x)ifstr_x[0]!="-":str_x=str_x[::-1]x=int(str_x)else:str_x=str_x[1:][::-1]x=int(str_x)x=-xreturnxif-2147483648<x<2147483647else0if__name__=='__main__':s=Solution()reverse_int=s.reverse(-120)print(reverse_int)
二 .设计实现遍历目录与子目录,抓取.pyc文件?
第一种方法:
importosdefget_files(dir,suffix):res=[]forroot,dirs,filesinos.walk(dir):forfilenameinfiles:name,suf=os.path.splitext(filename)ifsuf==suffix:res.append(os.path.join(root,filename))print(res)get_files("./",'.pyc')
第二种方法:
importosdefpick(obj):ifob.endswith(".pyc"):print(obj)defscan_path(ph):file_list=os.listdir(ph)forobjinfile_list:ifos.path.isfile(obj):pick(obj)elifos.path.isdir(obj):scan_path(obj)if__name__=='__main__':path=input('输入目录')scan_path(path)
第三种方法
fromglobimportiglobdeffunc(fp,postfix):foriiniglob(f"{fp}/**/*{postfix}",recursive=True):print(i)if__name__=="__main__":postfix=".pyc"func("K:\Python_script",postfix)
三 .Python-遍历列表时删除元素的正确做法
遍历在新在列表操作,删除时在原来的列表操作
a=[1,2,3,4,5,6,7,8]print(id(a))print(id(a[:]))foriina[:]:ifi>5:passelse:a.remove(i)print(a)print('-----------')print(id(a))#filtera=[1,2,3,4,5,6,7,8]b=filter(lambdax:x>5,a)print(list(b))
列表解析
a=[1,2,3,4,5,6,7,8]b=[iforiinaifi>5]print(b)
倒序删除
因为列表总是‘向前移’,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的
a=[1,2,3,4,5,6,7,8]print(id(a))foriinrange(len(a)-1,-1,-1):ifa[i]>5:passelse:a.remove(a[i])print(id(a))print('-----------')print(a)
四 .字符串的操作题目
全字母短句 PANGRAM 是包含所有英文字母的句子,比如:A QUICK BROWN FOX JUMPS OVER THE LAZY DOG. 定义并实现一个方法 get_missing_letter, 传入一个字符串采纳数,返回参数字符串变成一个 PANGRAM 中所缺失的字符。应该忽略传入字符串参数中的大小写,返回应该都是小写字符并按字母顺序排序(请忽略所有非 ACSII 字符)
下面示例是用来解释,双引号不需要考虑:
(0)输入: “A quick brown for jumps over the lazy dog”
返回: “”
(1)输入: “A slow yellow fox crawls under the proactive dog”
返回: “bjkmqz”
(2)输入: “Lions, and tigers, and bears, oh my!”
返回: “cfjkpquvwxz”
(3)输入: “”
返回:“abcdefghijklmnopqrstuvwxyz”
defget_missing_letter(a):s1=set("abcdefghijklmnopqrstuvwxyz")s2=set(a)ret="".join(sorted(s1-s2))returnretprint(get_missing_letter("python"))
五 .可变类型和不可变类型
1,可变类型有list,dict.不可变类型有string,number,tuple.
2,当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存。
3,不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作。
六 .is和==有什么区别?
is:比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象。是否指向同一个内存地址
== : 比较的两个对象的内容/值是否相等,默认会调用对象的eq()方法
七 .求出列表所有奇数并构造新列表
a=[1,2,3,4,5,6,7,8,9,10]res=[iforiinaifi%2==1]print(res)
八 .用一行python代码写出1+2+3+10248
fromfunctoolsimportreduce#1.使用sum内置求和函数num=sum([1,2,3,10248])print(num)#2.reduce函数num1=reduce(lambdax,y:x+y,[1,2,3,10248])print(num1)
九 .Python中变量的作用域?(变量查找顺序)
函数作用域的LEGB顺序
1.什么是LEGB?
L: local 函数内部作用域
E: enclosing 函数内部与内嵌函数之间
G: global 全局作用域
B: build-in 内置作用
python在函数里面的查找分为4种,称之为LEGB,也正是按照这是顺序来查找的
十 .字符串 "123" 转换成 123,不使用内置api,例如 int()
方法一: 利用 str 函数
defatoi(s):num=0forvins:forjinrange(10):ifv==str(j):num=num*10+jreturnnum
方法二: 利用 ord 函数
defatoi(s):num=0forvins:num=num*10+ord(v)-ord('0')returnnum
方法三: 利用 eval 函数
defatoi(s):num=0forvins:t="%s*1"%vn=eval(t)num=num*10+nreturnnum
方法四: 结合方法二,使用 reduce,一行解决
fromfunctoolsimportreducedefatoi(s):returnreduce(lambdanum,v:num*10+ord(v)-ord('0'),s,0)
我依然会坚守岗位,继续更新我的Python面试题。也祝愿大家中秋节快乐啊!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。