温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

你在金九银十的求职浪潮中如鱼得水,而我在码字—Python面试题

发布时间:2020-08-12 20:36:55 来源:ITPUB博客 阅读:154 作者:千锋Python唐小强 栏目:编程语言

虽然明天就是中秋节了,而我依然在电脑面前码字,写总结。多写一些,你们中秋就多学一点,哈哈哈!Python面试题又来咯!找工作的你,还不赶紧看。

你在金九银十的求职浪潮中如鱼得水,而我在码字—Python面试题

一 .反转一个整数,例如-123 --> -321

class Solution(object):
 def reverse(self,x):
 if -10<x<10:
 return x
 str_x = str(x)
 if str_x[0] !="-":
 str_x = str_x[::-1]
 x = int(str_x)
 else:
 str_x = str_x[1:][::-1]
 x = int(str_x)
 x = -x
 return x if -2147483648<x<2147483647 else 0
if __name__ == '__main__':
 s = Solution()
 reverse_int = s.reverse(-120)
 print(reverse_int)

二 .设计实现遍历目录与子目录,抓取.pyc文件?

第一种方法:

import os
def get_files(dir,suffix):
 res = []
 for root,dirs,files in os.walk(dir):
 for filename in files:
 name,suf = os.path.splitext(filename)
 if suf == suffix:
 res.append(os.path.join(root,filename))
 print(res)
get_files("./",'.pyc')

第二种方法:

import os
def pick(obj):
 if ob.endswith(".pyc"):
 print(obj)
def scan_path(ph):
 file_list = os.listdir(ph)
 for obj in file_list:
 if os.path.isfile(obj):
 pick(obj)
 elif os.path.isdir(obj):
 scan_path(obj)
if __name__=='__main__':
 path = input('输入目录')
 scan_path(path)

第三种方法

from glob import iglob
def func(fp, postfix):
 for i in iglob(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[:]))
for i in a[:]:
 if i>5:
 pass
 else:
 a.remove(i)
 print(a)
print('-----------')
print(id(a))
#filter
a=[1,2,3,4,5,6,7,8]
b = filter(lambda x: x>5,a)
print(list(b))

列表解析

a=[1,2,3,4,5,6,7,8]
b = [i for i in a if i>5]
print(b)

倒序删除

因为列表总是‘向前移’,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的

a=[1,2,3,4,5,6,7,8]
print(id(a))
for i in range(len(a)-1,-1,-1):
 if a[i]>5:
 pass
 else:
 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”

def get_missing_letter(a):
 s1 = set("abcdefghijklmnopqrstuvwxyz")
 s2 = set(a)
 ret = "".join(sorted(s1-s2))
 return ret
 
print(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 = [ i for i in a if i%2==1]
print(res)

八 .用一行python代码写出1+2+3+10248

from functools import reduce
#1.使用sum内置求和函数
num = sum([1,2,3,10248])
print(num)
#2.reduce 函数
num1 = reduce(lambda x,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 函数

def atoi(s):
 num = 0
 for v in s:
 for j in range(10):
 if v == str(j):
 num = num * 10 + j
 return num

方法二: 利用 ord 函数

def atoi(s):
 num = 0
 for v in s:
 num = num * 10 + ord(v) - ord('0')
 return num

方法三: 利用 eval 函数

def atoi(s):
 num = 0
 for v in s:
 t = "%s * 1" % v
 n = eval(t)
 num = num * 10 + n
 return num

方法四: 结合方法二,使用 reduce,一行解决

from functools import reduce
def atoi(s):
 return reduce(lambda num, v: num * 10 + ord(v) - ord('0'), s, 0)

我依然会坚守岗位,继续更新我的Python面试题。也祝愿大家中秋节快乐啊!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI