1 一、二分查找法算法 2 l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] 3 def find(l,aim,start=0,end=len(l)-1): 4 mid = (start+end)//2 5 if not l[start:end+1]: 6 return '找不到' 7 elif aim>l[mid]: 8 return find(l,aim,mid+1,end) 9 elif aim<l[mid]: 10 return find(l,aim, start ,mid-1) 11 else: 12 return mid 13 print(find(l,90)) 14 15 二、集合 16 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型, 17 去重,得到新列表,且新列表无需保持列表原来的顺序 18 l=['a','b',1,'a','a'] 19 print(set(l)) 20 21 保持原来的列表 22 l=['a','b',1,'a','a'] 23 li=[] 24 s=set() 25 for i in l: 26 if i not in s: 27 s.add(i) 28 li.append(i) 29 print(li) 30 31 三、去除文件中重复的行,肯定要保持文件内容的顺序不变 32 import os 33 with open('aaa','r',encoding='utf-8') as read_f ,\ 34 open('ter','w',encoding='utf-8') as write_f: 35 s= set() 36 print(type(s)) 37 for line in read_f: 38 if line not in s: 39 s.add(line) 40 write_f.write(line) 41 os.remove('aaa') 42 os.rename('ter','aaa') 43 44 45 四、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数, 46 并返回结果,如{‘num’:3,’str’:2,’space’:3,’others’:3}(5分) 47 48 def geshu(s): 49 shuzi=0 50 zimu =0 51 kongge = 0 52 default = 0 53 for i in s: 54 if i.isdigit(): 55 shuzi+=1 56 if i.isspace(): 57 kongge+=1 58 if i.isalpha(): 59 zimu+=1 60 else: 61 default+=1 62 print({'shuzi':shuzi,'zimu':zimu,'kongge':kongge,'default':default,}) 63 geshu('sasd dfdg') 64 geshu('2454213') 65 geshu('abc123') 66 67 六、要求一:使用列表解析,从文件a.txt中取出每一行,做成下述格式(2分) 68 [{‘name’:'apple','price':10,'count':3},{...},{...},...] 69 70 with open('aaa','r',encoding='utf-8') as f: 71 for line in f: 72 l=line.split() 73 line=[{'name':l[0],'price':l[1],'count':l[2]}] 74 print(line) 75 76 77 七、处理文件,用户指定要查找的文件和内容 78 将文件中包含要查找内容的每一行都输出到屏幕 79 def www(filename,content): 80 f= open(filename) 81 for line in f: 82 if content in line: 83 yield line 84 g=www('jiantingfile','aaa') 85 for line in g: 86 print(line,end='') 87 88 89 八、既可以拷贝文本又可以拷贝视频,图片等文件 90 f= open('三级菜单.png','rb') 91 data = f.read() 92 f = open('2.png','wb') 93 f.write(data) 94 print(data) 95 96 97 九、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。 98 def length(s): 99 if len(s)>5: 100 return True 101 else: 102 return False 103 print(length('asdsfsdf')) 104 print(length([1,2,3,4,5,6])) 105 print(length((1,5,'a'))) 106 107 108 十、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。 109 def func(l): 110 return l[1::2] 111 print(func([1,2,3,5,4,8,6,2,1])) 112 113 114 十一、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。 115 def func(s): 116 if s:#如果不为空 117 if type(s) is str: 118 for i in s: 119 if i=='': 120 return True 121 else: 122 for i in s: 123 if not i: 124 return True 125 else: 126 return True 127 print(func([])) 128 print(func('')) 129 130 131 十二、利用递归调用,取出[1,[2,3,[4,5,[6,7,[8,[9,10,[11,[12,[13,14,15]]]]]]]]中所有的 132 值(10分) 133 l=[1,[2,3,[4,5,[6,7,[8,[9,10,[11,[12,[13,14,15]]]]]]]]] 134 def func(l): 135 for i in l: 136 if type(i)==list: 137 func(i) 138 139 else: 140 print(i) 141 func(l) 142 143 144 十三、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件), 145 要求登录成功一次,后续的函数都无需再输入用户名和密码(10分) 146 注意:从文件中读出字符串形式的字典,可以用json或pickle 147 定义一个字典看用户登录状态 148 auth_status={ 149 'user':None, 150 'status':False#状态是没有登录 151 } 152 def wrapper(fun): 153 def inner(*args,**kwargs): 154 if auth_status['status']:#如果登录了,就执行fun函数 155 ret = fun(*args, **kwargs) # index/home 156 return ret 157 else:#如果没有登录,就实现认证功能 158 username = input('name:>>').strip()#获取用户名 159 password = input('password:>>').strip()#获取密码 160 f=open('login.txt','r',encoding='utf-8')#打开文件获取用户的信息 161 user_dic=f.read()#读出来的是字符串类型 162 zhddict=eval(user_dic)#转换成字典类型 163 #print(type(zhddict))#查看eval转换后的类型 164 if zhddict.get(username) and password == zhddict[username]:#如果用户名和密码都正确,就显示登陆成功,不正确就显示登录失败 165 print('login successful') 166 auth_status['user']=username #登陆成功后就把用户名放在user里 167 auth_status['status']=True # 状态改为True 168 ret = fun(*args,**kwargs)#index/home 169 return ret 170 else: 171 print('login faild') 172 return inner 173 @wrapper #语法糖 174 def index(): 175 print("欢迎来到首页") 176 177 @wrapper 178 def home(): 179 print("欢迎回家") 180 181 index() 182 index() 183 home() 184 index()