python 结束练习
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()