1.文件操作有哪些模式?请简述各模式的作用
r 只读模式 r+ 读写 rb
w 只写模式 w+ 写读 wb
x 只写模式 x+ 写读 xb
a 追加模式 a+ 写读 ab
2.s = '**hello,world!**'请使用strip方法去掉字符串两端的'*'号
s = '**hello,world!**'
print(s.strip("*"))
3.用户输入一个任意数字n,求1-n之间所有数字中的奇数
def foo(num):
for i in range(1,num+1):
if i %2 != 0:
print(i)
if __name__ == '__main__':
input_num = int(input(">>:").strip())
foo(input_num)
--------------------------------------------
input_num = int(input(">>:").strip())
print(list(range(1,input_num,2)))
4.s = 'hskakhlkshfkskjakf',请去除s字符串中重复的字母
s = 'hskakhlkshfkskjakf'
s_bak = ""
for i in s:
if s.count(i) == 1 :
s_bak += i
else:
pass
s = s_bak
print(s)
5.思考题:
有一个类的init方法如下:
class Person:
def __init__(self,name,age,sex,weight):
self.name = name
self.sex = sex
self.age = age
self.weight = weight
假设有100个person的对象,
若两个对象的obj1,obj2的name和sex属性相同
即obj1.name==obj2.name and obj1.sex==obj2.sex
我们认为两个对象为同一个对象,已知一个列表中的100个对象,对这100个对象进行去重。
提示:
重写Person类重的两个内置方法
class Person:
def __init__(self,name,age,sex,weight):
self.name = name
self.sex = sex
self.age = age
self.weight = weight
def __eq__(self,obj):
if self.name == obj.name and self.sex == obj.sex:
return True
def __hash__(self):
return (self.name,self.sex).__hash__()
a1 = Person("alex",18,"male",60)
a2 = Person("alex",30,"male",60)
print(set([a1,a2]))
1.线程,进程,协程的区别?
进程是一个资源单位
线程是一个执行单位
协程在一个线程下工作,由用户自己控制,可以实现并发功能
2 GIL是什么,对于python有什么影响?
是一个解释器锁
同一时刻一个cpu只能运行一个线程,提高了内存安全
3 基于对列实现一个生产者消费者模型,要求:队列内元素不能超过5个,一旦有五个元素了,生产者不再生产,其他内容自由扩散
import queue,threading,time
q = queue.Queue(maxsize = 5)
def producer():
num = 1
while True:
if not q.full():
q.put(num)
print("put",num)
num = num +1
def consumer():
while True:
if not q.empty():
print("get",q.get())
p1 = threading.Thread(target=producer)
c1 = threading.Thread(target=consumer)
p1.start()
c1.start()