第一次面试题考试
把装饰器记录下来,日后反复看
装饰器的作业需要复习,登陆验证还有调用函数名的两道题
还有斐波那契数列的递归函数
还有三级菜单的递归函数
把面试题粘过来,然后把答案都写上,反复看,
老男孩Python全栈7期练习题(面试真题模拟)
一、选择题(32分)
1、python不支持的数据类型有 C (a)
A、char
B、int
C、float #这个是浮点数
D、list
2.D (e )
x = “foo”
y = 2
print(x+y) #可以打印,试出来的结果报错
A.foo B.foofoo C.foo2 D.2 E.An exception is thrown
3、关于字符串下列说法错误的是ABD (B)
A、字符应该视为长度为1的字符串
B、字符串以\0标志字符串的结束
C、既可以用单引号,也可以用双引号创建字符串
D、在三引号字符串中可以包含换行回车等特殊字符
4、以下不能创建一个字典的语句是C
A、dic1 = {}
B、dic2 = {123:345}
C、dic3 = {[1,2,3]:'uestc'}
D、dic3 = {(1,2,3):'uestc'}
5. C (d)
Kvps = {‘1’:1,’2’:2}
theCopy = kvps #赋值运算,这两个是一样的
kvps[‘1’] = 5
sum = kvps[‘1’] + theCopy[‘1’] #所以是5+5=10
Print sum
A.1 B.2 C.7 D.10
6、以下何者是不合法的布尔表达式:D (B )
A.x in range(6) B.3=a
C.e>5 and 4==f D(x-6)>5
7、下列表达式的值⼀定为True的是B
A.5+4j>2-3j B.3>2==2
C. e>5 and 4==f D.(x-6)>5
8、已知x=43,ch=‘A’,y = 1,则表达式(x>=y and ch<‘b’ and y)的值是B
A、0
B、1
C、出错
D、True
9、下列表达式中返回 为True的是:C
A、3>2>2
B、’abc’>’xyz’
C、0x56 > 56
D、(3,2)>(‘a’,’b’) #元祖要比较大小只能都是纯数字才可以,否则字符串和数字不可以比较会报错
10、下列Python语句正确的事(多选)A,D
A、min = x if x < y else y
B、max = x > y ? x : y #这一句不应该有问号
C、if(x>y) print(x) #这一句少一个冒号
D、while True:pass
11.若k为整形,下述while循环执⾏的次数为: D (A,B )
##这一题没听懂
#当K是整数的时候然后还要>1,才符合条件,以后遇到类似的问题,就用笔算或者是用程序打印,可以写一段代码算出来,如下:
# k = 1000
# count = 0
# while k>1:
# k = k/2
# count+=1
# print(count)
#
k=1000
while k>1:
print k
k=k/2
A.9 B.10
C.11 D.100
12、以下叙述正确的是:A (B )
A、continue语句的作用是结束整个循环的执行
B、只能在循环体内使用break语句 #这一句要背下来
C、在循环体内使用break语句或continue语句的作用相同
D、从多层循环嵌套中退出时,只能使用goto语句
13、关于python中的复数,下列说法错误的是B
A、表示复数的语法是real+image j
B、实部和虚部都是浮点数
C、虚部必须后缀j且j不区分大小写
D、方法conjugate返回复数的共轭复数
14、下面的语句哪个会无限循环下去:B
A、for a in range(10):
time.sleep(10)
B、while 1<10:
time.sleep(10)
C、while True:
break
D、a = [3,-1,',']
for i in a[:]:
if not a:
break
15、下面的代码,哪些会输出1,2,3三个数字(多选,选错不得分):A,B,D
A 、for i in range(3): (B ,D)
print(i) #0,1,2
B、aList = [0,1,2]
for i in aList:
print(i+1)
C、i = 1
while i < 3:
print(i)
i+=1
D、for i in range(3):
print(i+1)
16、Python如何定义一个函数:C
A、class <name>(<type> arg1,<type> arg2,…<type> argN)
B、function <name>(arg1,arg2,…argN)
C、def <name>(arg1,arg2,…argN)
D、def <name>(<type> arg1,<type> arg2,…<type> argN)
二、填空题(10分)
1、以下函数需要在其中饮用一个全局变量k,请填写语句:
def fun()
global k_________________
k = k+1
2、L=range(100)
1) 取第一到第三个元素__for i in range(3)___
(
list(L[:3])__
)
2) 取倒数第二个元素___L[-2]__
3) 取后十个元素__for i in range(-10,-1,-1)___
(list(L[-10:])
list(L[-10:])
)
__
4) 把L复制给L1用___L1=L.copy__ ##补充一下:L1=L 这是赋值
3、判断dict有没有某个key用的方法是_dict.get(key,None)___##首推使用 in,key in dic___
4、获取list的元素个数,和向末尾追加元素的方法分别是_len(list),list.appeng()_____ _______
5.以下的代码的输出将是什么: __list1=10,list2=123,list3=a_____
def extendList(val,list=[]):
list.append(val)
return list
list1 = extendList(10) ##list1和list3都没有自己的列表的参数,
list2 = extendList(123,[])
list3 = extendList(‘a’) ##所以都是用默认的list[],默认的都是同一个,
# 所以要变就一起变,因为打印的时候时候它就已经变了,所以得到的结果就是一样的
print “list1 = %s”%list1 [10,‘a’]
print “list2 = %s”%list2 [123]
print “list3 = %s”%list3 [10,‘a']
6.下⾯程序的输出结果是:_'yes'________7
x=True
y=False
z=False
if x or y and x:
print "yes"
else:
print "no"
三、简答题(20分)
1、如何判断一个变量是不是字符串
直接用print打印出type即可 type(a) is str
2、is 和 == 的区别
is 是比较内存地址,
==是比较的值
3、Python⾥⾯如何实现tuple和list的转换。
tuple(list)
tuple(l)
list(tuple)
list(t)
4、list和tuple有什么不同
list是不可哈西可变 is ok 的数据类型,有增删改查的方法
tuple是可哈西不可变 is ok 的数据类型,tuple的子元素不可变,但子元素里面包含的孙元素如果是可变的数据类型,那么是可以改变的
5、如何得到列表list的交集与差集。
把列表转换成集合,在集合里两个集合用‘-’可以得到差集,‘^’得到交集
#s&b(交集),a-b(差集)
6、Python中定义函数时如何书写可变参数和默认参数?
*args,**kwargs
7、*args和**kwargs在什么情况下会使⽤到?请给出使⽤**kwargs的事例
在函数中需要传多个实参的时候会使用到*args和**kwargs,#补充(在参数不确定的情况下会使用到)
例如:
def func(*args,**kwargs):
print('hello')
return int
ret = func(b,a,key=q,)
print(ret)
8、请描述unicode,utf-8,gbk等编码之间的关系?
unicode是万国码,里面包含了所有国家和地区的字符
utf-8是在unicode的基础上精简的,因为unicode表示字符的时候太占内存了,过于庞大,
gbk是在assicc码的基础上创建的只能表示中文的字符的编码,仅仅限于国内地区使用
9、如何使用python删除一个文件
import os
os remove(文件路径)
10、def func(a,b,c=0,*args,**kwargs):
pass
*args,**kwargs的作用是什么?两者都是接收实参传过来的参数,*args接收除了位置参数之外的默认参数,
**kwargs接收除了位置参数和默认参数之外的其他的参数
四、写代码(38分)
1、d={‘a’:1,’b’:2,’c’:3}请打印出key、value对(3分)
for key,value in d.items:
print(key,value)
##专业写法: for k in d:
# print(k,dic[k])
2、请写出⼀段Python代码实现删除⼀个list⾥⾯的重复元素。(6分)
li = [1,2,2,2,43,3,3,3,6]
set(li)
print (set)###这个也做得不对。。。。列表强转集合忘了怎么转了
#答案已写出来,需要背下来,强转不专业
# l = [{'1':'2'}]
# set(l)
#
# new_l = []
# for i in list:
# if i not in new_l:
# new_l.append(i)
#
3、使⽤Python/C 上机解决以下题⽬(13分)
1)
斐波那契数列1,2,3,5,8,13,21.....根据这样的规律,编程求出400万以内最⼤的斐波那契数,并求出他
是第⼏个斐波那契数。
sum1 = 0
count = 1
count2 = count+count
while count2<4000000:
sum = count+count2
count = sum+count2
count2 = sum+count
sum1 += 3
print(sum,count,count2)
print(sum1+1) #这是索引值,第34个。
print(count2) #这是4000000里面最大的数字
###这一题我居然做出来了!应该是做对了!超开心的!
count = 0
a,b =1,2
while a+b<4000000:
c = a+b
a = b
b = c
count +=1
print(count)
print(c)
2)
dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"}
dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"}
要求写⼀段代码,实现两个字典的相加,不同的key对应的值保留,相同的key对应的值相加后保
留,如果是字符串就拼接,如上⽰例得到结果为:
dictc = {"a":1,"b":5,"c":3,"d":9,"e":7,"m":9,"f":"hello","k":"world"}
# dic1={'a':0,'b':4,'l':'qwe','w':8}
# dic2={'a':4,'c':3,'l':'rt'}
dic3={}
for key in dic1 for key1 in dic2:
if key == key1:
key3=dic1[key]+dic2[key1]
dic3.update(key3)
else:dic3.update(key,key1)
print(dic3)
###做错了,运行不出来,但是逻辑上是可以行得通的。。。
第一种方法:
aandb = set(dicta.keys()&set(dictb.keys())
for i in aandb:
dictc[i] = dicta[i]+dictb[i]
set(dicta.keys())-set(dictb.keys())
第二种方法:
dictc = dicta
for key in dictb:
if key in dictc:
dictc[key] = dictc[key]+dictb[key]
else:
dictc[key] = dictb[key]
print(dictc)
5、什么是装饰器?写⼀个装饰器,可以打印输出⽅法执⾏时长的信息(8分)
装饰器就是在不改变原函数调用的前提下对该函数进行装饰和修改
import time
def wrapper(func):
def inner(*args,**kwargs):
start=time.time()
time.sleep(0.5)
end=time.time()
print(end-start)
ret =func(*args,**kwargs)
return ret
return inner
@wrapper
def func1():
print('hello')
func1()
#####这个应该也是写错了,装饰器前两天好不容易搞懂了(那天的听写还抄了15遍呢。。。),这一做题就又不行了。
#已改过了,要背下来,隔几天要拿出来过一过
6、请写出log的实现(主要功能是打印函数名)(8分)
@log
def now():
print ‘2017-08-31’
>>>now()
输出:
call now():
2017-08-31
#
#
def log(func):
def inner(*args,**kwargs):
print('call now()')
ret = func(*args,**kwargs)
return ret
return inner
@log
def now():
print ('2017-08-31')
now()
###这个不明白题意,也写错了。
#已改正,必须要背下来,隔几天就要拿出来看看
附加题(20分)
有⼀个数据结构如下所⽰,请编写⼀个函数从该结构数据中返回由指定的字段和对应的值组成的字
典。如果指定字段不存在,则跳过该字段。(10分)
data={"time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{ "fld1":1,
"fld2":2},
"xxx2":{ "fld3":0,
"fld5":0.4},
"fld6":11,
"fld7":7,
"fld46":8}
fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19
def select(data,fields):
# TODO:implementation
return result
def select(data,fields):
fields_lst = fields.split(‘|’)
for key in data:
if type(data[key]) == dict:
pass
return result
fields='fld2|fld3|fld7|fld19'
def select(data,fields):
result = {}
field_lst = fields.split('|')
for key in data:
if key in field_lst:
result[key] = data[key]
elif type(data[key]) == dict: #data[key] = { "fld1":1,"fld2":2}
for inner_key in data[key]:
if inner_key in field_lst:
result[inner_key] = data[key][inner_key]
return result
print(select(data,fields))