6-10练习

六、
1.(1)需求:批量生成9月份每天的txt文件;生成上面的文件之后,再一次在每个文件中写入文件名;

import os
dirname='2021年9月'
for i in os.listdir():
    if i ==dirname:
        break
    else:
        os.mkdir(dirname)
for i in range(1,31):
    file=open(f'{dirname}/2021-09-{i}.txt','w',encoding='utf-8')
    file.write(f'2021-09-{i}.txt')

(2)需求:将上面生成的所有文件名之后加上‘_NEW.’.

import os
os.chdir('2021年9月/')
for i in os.listdir():
    os.rename(i,'_NEW.'.join(i.split('.')))

2.需求:假设有一个英文文本文件,编写一个程序读取其内容,并将里面的大写字母变成小写字母,小写字母变成大写字母

#  with open('conFig.txt','w',encoding='utf-8') as cf:
#      cf.write('ghghGHGH\njkjjjKJKJK')

with open('conFig.txt','r+',encoding='utf-8') as cf:
    lines=cf.readlines()
    print(lines)
    cf.seek(0)
    for i in lines;
        cf.write(i.swapcase())   #swapcase()大写转小写,小写转大写
        

七—八、
1.测试列表推导和不用列表推导那一种速度更快

import time
class Runtime:
    def __enter__(self):
        self.start__time=time.time()
        return self.start__time
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.end_time=time.time()
        self.run_time=self.end_time-self.start__time
        print('运行时间',self.run_time)
with Runtime():
    li=[]
    for i in range(1000000):
        li.append(i)
with Runtime():
    li=[i for i in range(1000000)]

2.range不可以使用小数做步长,实现一个可迭代对象,可以实现小数步长

class Range:
    def __init__(self,start,end=None,step=1):
        if not isinstance(start,(int,float)):
            raise TypeError
        elif end!=None and not isinstance(end,(int,float)):
            raise TypeError
        elif not isinstance(step,(int,float)):
            raise TypeError
        elif end!=None and start>end:
            print('开始值不能大于结束值')
        elif step<0:
            print('步长不能小于0')
        else:
            if end==None:
                self.start=0
                self.end=start
            else:
                self.start=start
                self.end=end
            self.step=step
    def __iter__(self):
        return self
    def __next__(self):
        from decimal import Decimal
        if self.start>=self.end:
            raise StopIteration
        else:
            res=self.start
            self.start=Decimal(str(self.start))+Decimal(str(self.step))
            return res
for i in Range(1,10.2,0.6):
    print(i)

九、
1.利用装饰器,记录函数的运行日志(如:保存传入参数,返回结果,运行时间等信息)

import time
def log(f):
    log=[]
    def func(*args):
        logof={}
        logof['args']=args
        start=time.time()
        res=f(args)
        end=time.time()
        logof['result'] = res
        logof['runtime'] = end-start
        log.append(logof)
        print(log)
    return func
@log
def sum(res):
    m=0
    for i in res:
        m+=i
    return m
sum(1,2,3)
sum(1,7)

2.打开一个只读文件,如果文件不存在,则去创建这个文件

try:
    f=open('text.txt','r+',encoding='utf-8')
except:
    f=open('text.txt','a+',encoding='utf-8')
    f.write('猪小屁真可爱')
else:
    f.write('猪小屁真可爱')
finally:
    f.close

十、
1.检查用户名是否是由字母数字下划线组成

username=input('请输入用户名:')
import re
res=re.match(r'[a-zA-Z0-9_]*$',username)
if res==None:
    print('格式不正确')
else:
    print('格式正确')

2.检查邮箱是否符合规范

email=input('请输入邮箱:')
import re
res=re.match(r'[0-9a-zA-Z]+@[0-9a-zA-Z]+\.[0-9a-zA-Z]{2,5}',email)
if res==None:
    print('格式不规范')
else:
    print('格式规范')

3.检查用户的身份证号码是否符合规范(前六位是区号1-8;出生年月日1900-2019,01-12,01-31;)

identity=input()
import re
res=re.match(r'[1-8]\d{5}(?:19[0-9]{2}|20[0-1][0-9])(?:0[1-9]|1[0-2])(?:0[1-9]|1[[0-9]|2[0-9]|3[0-1])[0-9X]{4}$',identity)
if res==None:
    print('身份证不规范')
else:
    print('身份证规范')

综合应用:定义一个账户类,用于创建账户并生成随机卡号

print('----------------------欢迎使用一个银行系统----------------------')
print('加载中...')
import os
from util import register

##生成目录
dirname='database'
for i in os.listdir():
    if i ==dirname:
        break
else:
    os.mkdir(dirname)
  
##加载或生成数据文件
with open(f'{dirname}/account.txt','a+',encoding='utf-8') as f:
    f.seek(0)
    account_poor=f.readlines()
    print(account_poor)
    print('加载完毕')
    
    ##菜单
    while True:
        print('--------------------------------------------')
        menu=input('菜单:1.创建账户;2.退出')
        if menu=='1':
            res=register('姓名','密码','确认密码')  
            if res != None:  #保存每次运行的用户数据
                f.write(f"{res['卡号']} {res['姓名']} {res['密码']}0\n")
                f.flush()   
        elif menu=='0':
            break
        else:
            print('请输入正确的指令')
print('欢迎下次使用')

##util.py文件
import re 
import random
from datetime import datetime
##装饰器生成input
def inputs(f):
    def func(*args):
        res={}
        for i in args:
            res[i]=input(f'请输入{i}:')
        return f(res)
    return func
##创建账户
@inputs
def register(kwargs):
    message='注册失败,请重试'
    if re.match(r'\w{2,10}$',kwargs['姓名'])==None:
        print(f'姓名格式错误,{message}')
        return
    if re.match(r'\S{6,}$',kwargs['密码'])==None:
        print(f'密码格式错误,请输入6位数以上的密码并不包含空格,{message}')
        return
    if kwargs['密码']!=kwargs['确认密码']:
        print(f'两次密码输入不一致,{message}')
        return
    kwargs['卡号']=datetime.now().strftime('%Y%m%d%H%M%S')+str(random.randint(100,999))
    message=f'亲爱的{kwargs['姓名']},恭喜您注册成功\n,您的卡号是:{kwargs['卡号']}'
    print(message)
    return kwargs

 

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值