![复制代码]()
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()
![复制代码]()