2020/12/10
Python 16期 Day13作业
题目1
编写文件修改功能,调用函数时,传入三个参数(修改的文件路径,要修改的内容,修改后的内容)既可完成文件的修改
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def alter_file(url, old, new):
import os
with open(r'%s' % url, mode='rt', encoding='utf-8') as read_f, \
open(r'%s$' % url, mode='wt', encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line.replace(old, new))
os.remove(r'%s' % url)
os.rename(r'%s$' % url, r'%s' % url)
题目2
编写tail工具
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def tail(url):
import time
with open(r'%s'%url,mode='rb') as f:
f.seek(0,2)
while True:
line = f.readline()
if len(line) == 0:
time.sleep(0.2)
else:
print(line.decode('utf-8'),end='')
题目3
编写登录功能
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def login(url):
while True:
user = input('请输入账号:')
pwd = input('请输入密码:')
with open(r'%s'%url, mode='r', encoding='utf-8') as f:
for i in f:
i = i.strip().split(':')
if user == i[0]:
if pwd == i[1]:
return user
else:
print('密码错误')
break
else:
print('用户名不存在')
题目4
编写注册功能
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def register(url):
while True:
print('输入exit退出')
user = input('请输入新用户名:')
pwd1 = input('请输入密码:')
pwd2 = input('请确认密码:')
if pwd1 != pwd2:
print('两次输入密码输入不同,请重新输入!')
else:
with open(r'%s'%url, mode='rt', encoding='utf-8') as f1:
for i in f1:
if i.strip().split(':')[1] == user:
print('用户名已存在,请重新输入!')
break
else:
with open(r'%s'%url, mode='at', encoding='utf-8') as f2:
f2.write("%s:%s\n" % (user, pwd1))
return user
题目5
写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def count(strs):
cint, cletter, cspace, cother = 0, 0, 0, 0
for i in strs:
if i.isdigit():
cint += 1
elif i.isalnum():
cletter += 1
elif i.isspace():
cspace += 1
else:
cother += 1
print('数字有%s个,字母有%s个,空格有%s个,其他的有%s个。' % (cint, cletter, cspace, cother))
题目6
写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def len5(target):
return True if len(target) > 5 else False
题目7
写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def list2(l):
return l if len(l) <= 2 else l[0:2]
题目8
写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def odd_digit(l):
return [l[i] for i in range(1, len(l), 2)]
题目9
写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def value2(d):
for i in d:
if len(d[i]) > 2:
d[i] = d[i][0:2]
return d
题目10
编写计数器功能,要求调用一次在原有的基础上加1
# 温馨提示 # 需要用到的知识点:闭包函数+nonlocal # 核心功能如下: def counter(): x+=1 return x 要求最终效果类似 print(couter()) # 1 print(couter()) # 2 print(couter()) # 3 print(couter()) # 4 print(couter()) # 5
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""题目作答区!"""
def couter2():
count = 0
def couter1():
nonlocal count
count += 1
return count
return couter1