软件测试常见python3面试题(一)

不管大家愿意不愿意,现在面试测试多多少少都会出现一些编程题目,下面是小酋收集的一些常见python3面试题,助大家一臂之力。(后面将持续更新)

1、lambda 运用

sum= lambda a,b:a*b
print(sum(7,9))

2、统计字符串中每个字母的个数

from collections import Counter
a2="sdfjksajkasjdkjdsfkjlksfjkskjhklskjsdkjkfd"
res2 =  Counter(a2)
print(res2)

3、字符串"not 404 found 张三 99 深圳",结果输出“张三 深圳”

import re
a3= "not 404 found 张三 99 深圳"
list3 = a3.split(" ")
res3 = re.findall('d+|[a-zA-Z]+',a3)
for s in res3:
    if(s in list3):
        list3.remove(s)
newstr =  " ".join(list3)
print(newstr)

4、filter方法求出列表所有奇数并构造新列表,a4 =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

方式一:

a4 =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def fn(a):
    return a%2==1
newlist = filter(fn,a4)
newlist = [i for i in  newlist]
print(newlist)

方式二:

a5 =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newlist5 = [a for a in a5 if a%2==1 ]
print(newlist5)

5、对列表排序,按从大到小,a6=[5,11,99,33,89,78]

a6=[5,11,99,33,89,78]
a6.sort(reverse=True)
print(a6)

6、两个列表[1,5,7,9]和[2,2,6,8]合并为[1, 2, 2, 5, 6, 7, 8, 9]

lista=[1,5,7,9]
listb=[2,2,6,8]
lista.extend(listb)
lista.sort()
print(lista)

7、打印当前日期,如2021-03-04

datetimes = datetime.datetime.now()
datetimes = datetimes.strftime("%Y-%m-%d")
print (datetimes)

8、正则表达式匹配中,(.*)和(.*?)匹配区别?

import re
str1 = '<a>呵呵哒</a><a>萌萌哒</a>'
str1_1 = re.findall('<a>(.*)</a>',str1)  #贪婪匹配
str1_2 = re.findall('<a>(.*?)</a>',str1) #非贪婪匹配
print(str1_1)  #打印结果:呵呵哒</a><a>萌萌哒
print(str1_2)  #打印结果:呵呵哒 萌萌哒

9、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

al1 = [[1,2],[3,4],[5,6]]
al1 = [ x for y in al1 for x in y ]
print (al1)

10、as="张明 98分",用re.sub,将98替换为100

import re
as1="张明 98分"
asn = re.sub(r'd+','100',as1)
print(asn)

11、返回一个 IP 数组"192.0.0.33?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.3",并且按 IP 最后一位由大到小排序返回

string = "192.0.0.33?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.3"
string = string.replace('?','',1).replace('?','!',1).split('!')
#string.sort(key=lambda x:x[-1],reverse=True)
string.sort(key=lambda x:int(x.split('.')[3]),reverse=True)
print(string)

12、qstring = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

qstring = "ajldjlajfdljfddd"
nstring = set(qstring)
qstring = list(nstring)
qstring.sort(reverse=False)
qstring = "".join(qstring)
print(qstring)

13、python中copy和deepcopy区别

①复制不可变数据类型,不管copy还是deepcopy,都是同一个地址当浅复制的值是不可变对象(数值,字符串,元组)时和=“赋值”的情况一样,对象的id值与浅复制原来的值相同。

#复制的值是可变对象(列表和字典)

astr='嗨喽'
bstr = astr
cstr = copy.copy(astr)
dstr = copy.copy(bstr)
print(astr,id(astr))
print(astr,id(bstr))
print(astr,id(cstr))
print(astr,id(dstr))

②浅拷贝copy有两种情况:

第一种情况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。

第二种情况:复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表), 改变原来的值 中的复杂子对象的值  ,会影响浅复制的值。

#深拷贝deepcopy:完全复制独立,包括内层列表和字典

alist=[1,2,[5,6,7]]
blist = copy.copy(alist)
clist = copy.deepcopy(alist)
print(alist,id(alist))
print(blist,id(blist))
print(clist,id(clist))

#第一种情况

alist[1]=20
print(alist,id(alist))
print(blist,id(blist))
print(clist,id(clist))

#第二种情况

alist[2][0]=50
print(alist,id(alist))
print(blist,id(blist))
print(clist,id(clist))

14、使用lambda函数对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小

foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
foo.sort(key=lambda x:(x<0,abs(x)),reverse=False)
print(foo)

15、列表嵌套列表排序,年龄数字相同时,按名字排序

fee = [['张三',27],['李四',24],['王老五',24],['刘麻子',29]]
fee.sort(key=lambda x:(x[1],x[0]))
print(fee)

16、判断浮点数的运行结果是否相等

aa = 0.1
ab = 0.2
ac = 0.3
assert (aa + ab == ac) #可能丢失精度
assert Decimal(str(aa)) + Decimal(str(ab)) == Decimal(str(ac)) #不会丢失精度

-- End --

文末寄语: 人生的每一次抉择都将带你走向不同的道路,或好或坏无法预料。



留言