python模块练习题

1、使用os模块写一个递归调用打印出e:\\home下的所有文件名的绝对路径?==》递归是函数的内容调用函数的本身

import os
def get_abspath(path):
    all=os.listdir(path)     #获取路径下的所有文件和目录以列表形式输出
    # print(all)
    for i in all:
        newpath=os.path.join(path,i)    #拼接所有文件和目录
        if  os.path.isfile(newpath):    #判断newpath是否是一个文件如果是就打印拼接路径
            print(newpath)
        else:
            get_abspath(newpath)  #否则调用本身这个函数再次传入这个目录路径直到是文件就打印这个文件路径

get_abspath('D:\python\dcs31\duoceshi31')

2、用正则方法实现统计e:\\python文件中指定字符如"python"的次数?(文件中的python字符)
 假设里面的数据为:
 pythonelloerror
 warnipythonngerror
 warning
 errorwapythonrning

import re
with open(r'D:\python\dcs31\test') as f:
    num=0
    all=f.readlines()       #显示文件所有内容
    # print(all)
    for i in all:
        # print(i)
        values=re.findall('python',i)
        # print(values)
        if 'python' in values:
            num+=1        #如果python字符在values中,那么num值就复制+1,for 变量循环一次就加一次
    print(num)

3、使用正则完成市面上手机规则的编写、随机生成11位数然后通过正则匹配出  1 【1358】【358】\d{8}符合规则的11位数手机号码?(手机号:11位)

import random,re,string
def phone_num():
    num=string.digits     #0-9随机取
    list1=['13']
    for i in range(9):
        list1.append(random.choice(num))
        # print(list1)
    a=''.join(list1)
    # print(a)
    b=re.findall('^1[1358][358]\d{8}',a)    #从第一个开始找,找到就返回以1开头的第二位是1358,第三位是358后面8位数字结尾
    # print(b)
    if  b:      #意思就是当b有数据返回的时候
        print(''.join(b))
    else:
        phone_num()        #否则重新调用
phone_num()

4、用正则实现写一段代码统计e:\\log文件中error和warning单词出现的次数分别为几次?
 文件内容如下:
 warningabchelloerror
 warningerror
 warning
 errorwarningwarning

import re
def re_find(*values):
    with open(r'D:\python\dcs31\test') as f:
        str1=f.read()
        # print(str1)

    dict1={}
    for i in values:
        list1=re.findall(i,str1)
        # print(list1)
        for j in list1:
            if  dict1.__contains__(j):
                dict1[j]+=1
            else:
                dict1[j]=1
        print(dict1)
re_find('error','warning')

 5、统计每个字段出现的次数,比如C4D,maya,su,max,AE 请用最熟悉的语言或者伪代码实现该需求
一个txt文件中已知数据为:
 C4D
 C4D/maya
 C4D
 C4D/su
 C4D/max/AE

import re
def count_str(*values):
    with open(r'D:\python\dcs31\test') as f:
        str1=f.read()
    dict1={}
    for i in values:
        list1=re.findall(i,str1)
        for j in list1:
            if dict1.__contains__(j):
                dict1[j]+=1
            else:
                dict1[j]=1
    print(dict1)
count_str('C4D','maya','su','max','AE')

 6、登录和注册
 要求如下:
 1、调用本地文件(user.txt)完成登录,如果存在则调用本地文件中用户和对应的密码进行登录,用户在本地文件中的格式如:admin:123456 xiao:123123
 2、登录用户不存在则调注册函数,将注册好的用户写入本地user.txt文件中,写入不能覆盖已有用户。
 3、用户名的长度大于等于6位,小于等于8位,用户密码大于等于6位小于等于8位。
 思路
 先读取文件中账号密码 存储到字典中
 判断输入的账号是否在字典中 在就继续输入密码 登录
 不在则调用注册函数 注册时判断账号是否在字典中 在就提示直接登录
 不在则输入账号密码注册 注册成功后账号密码写入字典写入文件中

dict1={}
def login():
    username=input('请输入您的账号:')
    with open(r'D:\python\dcs31\test') as f:
        list1=f.readlines()
        # print(list1)
        for i in list1:
            # print(i)
            list1=i.strip('\n').split(':')    #strip('\n) 取出换行符\n
            # print(list1)
            dict1.setdefault(list1[0],list1[1])
            # print(dict1)
        if  dict1.__contains__(username):
            pwd=input('请输入您的密码:')
            if  pwd==dict1[username]:
                print('登录成功')
            else:
                print('密码错误')
        else:
            print('该账号没有注册,请注册后再来!')
            commit_data()

def commit_data():
    username=input('请输入您要注册的账号:')
    if  len(username)>=6 and len(username)<=8:
        if  dict1.__contains__(username):
            print('该账号已注册,请直接登录!')
            login()
        else:
            pwd=input('请输入您的密码:')
            if len(pwd)>=6 and len(pwd)<=8:
                pwd1=input('请再次确认您的密码:')
                if  pwd==pwd1:
                    print('注册成功')
                    dict1.setdefault(username,pwd1)
                    with open(r'D:\python\dcs31\test','a',encoding='utf8') as f:
                        f.write('\n'+username+':'+pwd1)
                        login()

                else:
                    print('两次密码不一致!')
            else:
                print('您输入的密码必须是6-8位字符!')

    else:
        print('您的输入的账号必须是6-8位字符!')
if __name__ == '__main__':
    login()

 

posted @ 2023-03-27 21:09  jormen  阅读(364)  评论(0)    收藏  举报