部分经典练习题 练习题。。。。。。。。

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

猜你喜欢

转载自www.cnblogs.com/maaosheng/p/11619050.html