虽然明天就是中秋节了,而我依然在电脑面前码字,写总结。多写一些,你们中秋就多学一点,哈哈哈!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面试题。也祝愿大家中秋节快乐啊!