zoukankan      html  css  js  c++  java
  • python 每周作业

    day2:python的简介与认识
    day2:# 1、写一个登录程序
    # username
    # passwd
    # 让用户输入账号和密码,输入用户和密码输入正确的话
    # 提示你 xxx,欢迎登录,今天的日期是xxx,程序结束
    # 错误的话,提示账号/密码输入错误
    # 最多输入3次,如果输入3次都没有登录成功,提示失败次数过多。
    # 需要判断输入是否为空。
    # http://www.nnzhp.cn/archives/162 参考这个博客
    count=0
    username = 'fancy'
    passwd = 123456
    import datetime
    today = datetime.date.today()
    welcome = '%s 欢迎登录,今天的日期是 %s' %(username,today)
    while count<3:
        username = input('请输入用户名:')
        passwd = input('请输入密码:')
        if username == 'fancy' and passwd == '123456':
            print(welcome)
            break
        elif username.strip() ==''or passwd.strip() =='':
            print('账号或密码不能为空')
        elif username!='fancy' or passwd !='123456':
            print ('账号/密码输入错误')
        count+=1
    else:
        print('失败次数超过3次')
    View Code

     day3:python数据类型

    day3-1:#第一个作业
    # 1、校验密码是否合法的程序。
    # 输入一个密码
    # 1、长度5-10位
    # 2、密码里面必须包含,大写字母、小写字母和数字
    # # http://www.nnzhp.cn/archives/160 取交集的这种方式可以实现
    # 3、最多输入5次

    lower_letter = []
    upper_letter = []
    for i in range(ord('a'),ord('z')+1):
        lower_letter.append(chr(i))
    for i in range(ord('A'),ord('Z')+1):
        upper_letter.append(chr(i))
    num = {'0','1','2','3','4','5','6','7','8','9'}
    num = set(num)
    lower_letter = set(lower_letter)
    upper_letter = set(upper_letter)
    # print(num)
    # print(lower_letter)
    # print(upper_letter)
    for i in range(5):
        passwd = input('输入密码:').strip()
        pd = set(passwd)
        if 4<len(passwd)<11:
            if pd & lower_letter and pd & upper_letter and pd & num:
                print('密码输入成功')
                break
            else:
                print('密码必须包含大小写和数字')
        else:
            print('密码长度应该为5-10')
            continue
    else:
        print('您输入次数超过5次')
    View Code

    day3-2:

    # 写一个录入学生作业情况的一个程序
    # 1、查看学生作业情况
    # 2、录入学生作业情况
    # 3、可以让输入3次,需要为空的情况
    # homeworks = {
    # '张三':
    # {'2018.3.22':"未交",'2018.3.23':'wei交'},
    # '田雨':{'2018.3.22':"未交",'2018.3.23':'wei交'},
    # }
    homeworks = {
        '张三': {'已交':'2018.1.23'},
        '李四': {'已交':'2018.2.13'},
        '王五': {'未交':'2018.3.01'}
    }
    for i in range(3):
        name = input('学生姓名:
    ').strip()
        submit = input('是否交作业:
    ').strip()
        date = input('交作业日期:').strip()
        if name==''or submit==''or date=='':
            print('录入信息不能为空')
        elif name in homeworks:
            homeworks[name]={submit:date}
            print(homeworks)
            break
        else:
            homeworks.setdefault(name,{submit:date})
            print(homeworks)
    else:
        print('输入超过三次,机会已用完')
    View Code

    day4:字符串,文件的操作

     day4-1

    #1、写一个自动生成密码文件的程序
    # 1、你输入几,文件里面就给你产生多少条密码
    # 2、密码必须包括,大写字母、小写字母、数字、特殊字符
    # 3、密码不能重复
    # 4、密码都是随机产生的
    # 5、密码长度6-11
    # http://www.nnzhp.cn/archives/150
    # 随机数怎么用 参考 random模块怎么用
    import random,string      #导入random,string模块
    lower = string.ascii_lowercase
    digits = string.digits
    upper = string.ascii_uppercase
    pun = string.punctuation
    x = lower + digits +upper + pun     #定义含大写,小写,数字和特殊字符的字符串
    f = open('text.txt','a+')       #以a+方式打开文件
    num= input('输入您要生成密码的条数:')
    for i in range(int(num)):
        lens = random.randint(2, 7)    #随机选择2—7位长度
        other = random.sample(x, lens)  #定义other变量为连接随机位数的字符串,从x中截取
        passwd =[random.choice(lower), random.choice(digits), random.choice(upper), random.choice(pun)]+other #密码的组成,其中分别从大小写,数字及特殊字符中随机选一个
        random.shuffle(passwd)  #打乱密码顺序
        new_passwd = ''.join(passwd)   #将列表转换成字符串
        f.write(new_passwd+'
    ')    #把密码写入文件
    f.close()   #关闭文件
    View Code

     day4-2

    # 写一个注册的程序,账号和密码都存在文件里面。
    # choice = input('请输入你的选择:1,注册2、删除用户3、登录')
    # #注册
    # 输入
    # 账号
    # 密码
    # 密码确认
    # # #需要校验用户是否存在,两次输入的密码,是否一致,为空的情况
    # #账号和密码都存在文件里面
    # #删除
    # 输入一个用户名
    # #需要校验用户是否存在
    # #登录
    # 输入账号密码登录
    user_info = {}    #定义一个字典,存放username,pwd
    with open('users.txt') as f:
        for line in f:
            line = line.strip()  #第一行取到:fancy,123456
      所以需要把‘
    ’去掉
            temp = line.split(',')  #将取到的每一行放在一个列表里,以逗号分隔
            username = temp[0]  #取列表的username
            pwd = temp[1]   #取列表的password
            user_info[username] = pwd
    for i in range(3):
        choice = input('请输入你的选择:1.注册2.删除用户3.登录 
    ').strip()
        if choice =='1':
            username = input('账号:
    ').strip()
            pwd = input('密码:
    ').strip()
            cpwd = input('重复密码:
    ').strip()
            if username and pwd and cpwd:
                if username in user_info:
                    print('用户名已存在,请重新注册')
                else:
                    if pwd == cpwd:
                        user_info[username] = pwd    #字典里username的值(即密码)与输入的密码进行比较
                        print('恭喜你,%s注册成功' %username)
                    else:
                        print('两次输入的密码不一致')
            else:
                print('用户名或密码不能为空')
        elif choice == '2':
            username = input('请输入账号:').strip()
            if username:
                if username in user_info:
                    user_info.pop(username)
                    print(user_info)
                    print('删除成功')
                else:
                    print('用户名不能为空')
        elif choice =='3':
            username = input('请输入账号:').strip()
            pwd = input('请输入密码:').strip()
            if username and pwd:
                if username in user_info:
                    if user_info.get(username) ==pwd:    #从字典里取password跟输入的密码比对
                        print('登录成功')
                    else:
                        print('账号密码错误')
                else:
                    print('用户名不存在')
            else:
                print('用户名或密码不能为空')
    else:
        with open('users.txt','w') as fw:   #循环3次结束后,清空文件写进新内容
            for uname,pwd in user_info.items():  #把文件清空,写入字典里的最新内容
                fw.write(uname+','+pwd+'
    ')
    View Code

    day5:函数,文件操作的补充

    day5-1

    #1、写一个生成双色球号码的一个程序,生成的号码写到文件里面
    # 中奖号码由6个红色球号码和1个蓝色球号码组成
    # 篮球范围:01-16
    # 红球范围:01-33
    # def swq(num):
    # random.ranint(1,16)
    # #tikti.txt
    # 篮球:xx 红球号码是xx 01 08 09 12 13 19
    # 篮球:xx 红球号码是xx 01 08 09 12 13 19
    import random
    def ssq():
        str_red = []
        while len(str_red)!=6:
            red = str(random.randint(1, 33)).zfill(2)
            if red not in str_red:
                str_red.append(red)
        blue = str(random.randint(1,16)).zfill(2)
        str_reds = ' '.join(str_red)
        res = '篮球:%s''00''红球号码是:%s
    ' %(blue,str_reds)
        return res
    def file(l):
        with open('ssq.txt','w',encoding='utf-8') as fa:
            fa.writelines(l)
    def main():
        all_res = []
        num = input('输入要生成的条数:').strip()
        if num.isdigit():
            while int(num)!=len(all_res):
                res = ssq()
                if res not in all_res:
                    all_res.append(res)
        else:
            print('请输入整数')
        file(all_res)
    main()
    View Code

    day5-2

    商品管理的程序,商品信息都存在一个json串里面

    1、查询商品信息 #校验商品是否存在
    2、新增商品 # #校验商品是否存在 #校验价格是否合法
    3、修改商品信息 ##校验商品是否存在
    if chice =="1":
    query_goods()
    elif choice = ="2":
    add_goods()

    import json
    
    FILE_NAME = 'goods.json'
    def op_file(name,content=None):
        if content:
            with open(name,'w',encoding='utf-8') as fw:
                json.dump(content,fw,indent=4,ensure_ascii=False)
        else:
            with open(name,encoding='utf-8') as fr:
                res = json.load(fr)
                return res
    all_goods = op_file(FILE_NAME)
    
    def check_price(price):
        price = str(price)
        if price.isdigit():
            price = int(price)
            if price>0:
                return True
        else:
            if price.count('.')==1:
                tmp = price.split('.')
                #0.0
                left = tmp[0]
                right = tmp[1]
                # 1.00
    
                if left.isdigit() and right.isdigit() and int(right)>0:  #1.0
                    return True
                elif left.isdigit() and right.isdigit() and int(left)>0: # 0.1
                    return True
        return False
    
    def get_good_info():
        while True:
            good_name = input('商品名称:').strip()
            price = input('price:').strip()
            count = input('count:').strip()
            color = input('color:').strip()
            if good_name and price and count and color:
                if not check_price(price):
                    print('价格输入不合法,必须大于0')
                elif not count.isdigit() and int(count)<1:
                    print('数量不合法')
                else:
                    return good_name,price,count,color
            else:
                print('输入不能为空!')
    
    def add_good():
        good_name,price,count,color = get_good_info()
        if good_name not in all_goods:
            all_goods[good_name]= {
                'price':price,
                'count':count,
                'color':color
            }
            op_file(FILE_NAME,all_goods)
            print('添加完成!')
        else:
            print('商品已经存在!')
    
    def update_good():
        good_name,price,count,color = get_good_info()
        if good_name in all_goods:
            all_goods[good_name]= {
                'price':price,
                'count':count,
                'color':color
            }
            op_file(FILE_NAME,all_goods)
            print('修改完成!')
        else:
            print('商品不存在!')
    
    def query_good():
        good_name = input('商品名称:').strip()
        if good_name in all_goods:
            print(all_goods.get(good_name))
        else:
            print('商品不存在')
    
    def delete_good():
        good_name = input('商品名称:').strip()
        if good_name in all_goods:
            all_goods.pop(good_name)
            op_file(FILE_NAME,all_goods)
        else:
            print('商品不存在')
    
    def main():
        for i in range(3):
            choice = input('请输入你的选择'
                           '1、添加'
                           '2、修改'
                           '3、删除'
                           '4、查看'
                           '5、退出')
            if choice=="1":
                add_good()
            elif choice=="2":
                update_good()
            elif choice=="3":
                delete_good()
            elif choice=="4":
                query_good()
            elif choice=="5":
                quit('程序退出')
            else:
                print('输入错误,请重新输入!')
                return main()
    main()
    View Code

    day6:操作数据库及常用模块

    day6-1

    # logs目录下,有一部分文件是空的
    # 1、删除log目录下,所有的空文件
    # 2、删除5天前的文件
    import os,datetime,time
    def strToTimestamp(str=None,format='%Y-%m-%d'):
        if str:   #如果传时间
            tp = time.strptime(str,format)   #把格式化时间转成时间元组
            res = time.mktime(tp)   #把时间元组转成时间戳
        else:
            res = time.time()
        return int(res)
    def getDate():
        before = datetime.datetime.today() + datetime.timedelta(days=-5)    #获取5天前的格式化时间
        bef = before.strftime('%Y-%m-%d')     #截取年月日%Y-%m-%d
        new_bef = strToTimestamp(bef)      # 5天前的时间,把格式化时间转成时间戳
        for abs_path,dir,file in os.walk(r'C:UsersFancyDesktopliuyulingday6logs'):
            for f in file:
                files = os.path.join(abs_path,f)    #拼接文件的绝对路径
                size = os.path.getsize(files)      #获取文件的size
                new_f = f.split('.')[0].split('_')[1]    #截取文件名xxxx.log
                if size==0:
                    os.remove(os.path.abspath(files))
                    continue
                if strToTimestamp(new_f)<new_bef:
                    os.remove(os.path.abspath(files))
                    print('有内容的文件为:%s' %files)
    getDate()
    View Code

    day6-2

    # 写代码实现,把我的数据库里面的stu表中的数据,导出到excel中
    #编号 名字 性别
    #编号 名字 性别
    import pymysql,xlwt
    def conSql(host,user,passwd,db,sql,port=3306,charset='utf8'):
        coon = pymysql.connect(
            host='118.24.3.40',user='jxz',passwd='123456',
            port=3306,db='jxz',charset='utf8'
        )
        cur = coon.cursor()    #建立游标
        cur.execute('select * from stu')    #执行查询语句
        data = cur.fetchall()    #获取所有结果
        return data
        cur.close()
        coon.close()
    
    def importExcel():
        book = xlwt.Workbook()   #新建一个excel
        sheet = book.add_sheet('导入信息')    #加sheet页名
        data = conSql('118.24.3.40','jxz','123456','jxz','select * from stu')
        # print(type(data))     #打印data的类型为元组
        title = ['编号','名字','性别']
        for i in range(len(title)):     #获取表头的长度
            sheet.write(0, i, title[i])   #写表头,0表示写入的是第一行即表头,i表示列,title[i]表示写入的值
        for i in range(len(data)):#写内容
            if i != 0:#判断如果不是表头,即写内容
                for j in range(len(title)):
                    sheet.write(i, j, data[i][j])  #循环写入每行数据
        book.save('importData.xls')   #结尾要用.xls结尾
    importExcel()
    View Code

    day6-3

    # 注册
    # 登录
    # 数据都存在数据库里面
    # id username passwd
    # 注册的时候,密码存的是加密之后的密码
    # username pwd cpwd, 都是必填的
    # 用户不能重复
    # 登录
    # 账号
    # 密码
    # 登录成功之后打印当前的日期
    import hashlib,time,datetime
    def pdMd5(str):
        new_str = str.encode()   #把字符串转成bytes类型
        m=hashlib.md5()   #实例化对象
        m.update(new_str)   #对转换好的bytes类型进行加密
        return m.hexdigest()
    def usersSelect():   #实现从数据库查出username,passwd
        import pymysql
        coon = pymysql.connect(
            host='118.24.3.40',
            user='jxz',
            passwd='123456',
            port=3306,
            db='jxz',
            charset='utf8'
        )
        cur = coon.cursor()
        select =cur.execute("select username,passwd from lyl")
        users = cur.fetchall()   #获取sql查询结果,结果是一个二维元组
        users = dict(users)   #将元组转化成字典,方便后面判断username和password
        return users
        return select
        cur.close()
        coon.close()
    
    def insertSql(username,passwd):
        import pymysql
        coon = pymysql.connect(
            host='118.24.3.40',user='jxz',passwd='123456',
            port=3306,db='jxz',charset='utf8'
        )
        cur = coon.cursor()
        insert = cur.execute("insert into lyl(username,passwd)VALUES('%s','%s')" %(username,passwd))
        data = cur.fetchall()
        coon.commit()    #insert语句时,要使用.commit()方法
        # print(data)
        cur.close()
        coon.close()
    def main():
        import hashlib
        for choice in range(3):
            choice = input('请输入你的选择:1注册,2登录').strip()
            if choice=='1':
                username=input('输入用户名:').strip()
                if username in usersSelect().keys(): #users要调用
                    print('该账号已存在,请重新注册')
                else:
                    passwd = input('输入密码:').strip()
                    cpwd = input('再次输入密码:').strip()
                    if passwd==cpwd:
                        md5_pwd = pdMd5(passwd)
                        insertSql(username,md5_pwd)  #把用户名,密码写进数据库,密码加密
                        print(md5_pwd)
                        print('恭喜,注册成功')
                    else:
                        print('两次密码输入不一致,请重新输入')
            if choice=='2':
                username = input('请输入用户名:').strip()
                if username in usersSelect().keys():    #判断username是否存在,存在的话输入密码
                    passwd = input('请输入密码:').strip()
                    if usersSelect().get(username)==passwd:
                        print('恭喜,登录成功%s' %datetime.date.today())
                    else:
                        print('密码输入错误,请重新输入')
                else:
                    print('用户名不存在,请重新输入')
    
    main()
    View Code

    优化版本:

    import hashlib,pymysql,datetime
    def my_db(sql):
        import pymysql
        coon = pymysql.connect(
            host='118.24.3.40', user='jxz', passwd='123456',
            port=3306, db='jxz', charset='utf8')
        cur = coon.cursor() #建立游标
        cur.execute(sql)#执行sql
        if sql.strip()[:6].upper()=='SELECT':
            res =  cur.fetchall()
        else:
            coon.commit()
            res = 'ok'
        cur.close()
        coon.close()
        return res
    
    def my_md5(str):
        import hashlib
        new_str = str.encode() #把字符串转成bytes类型
        # new_str = b'%s'%str  #把字符串转成bytes类型
        m = hashlib.md5()  #实例化md5对象
        m.update(new_str)  #加密
        return m.hexdigest()  #获取结果返回
    
    def reg():
        username = input('username:').strip()
        pwd = input('pwd:').strip()
        cpwd = input('cpwd:').strip()
        if username and pwd and cpwd:
            sql = 'select * from nhy where name="%s";'%username
            # select * from nhy where name='nhy';
            res = my_db(sql)
            if res:
                print('该用户已经存在!')
            else:
                if pwd == cpwd:
                    md5_pwd = my_md5(pwd)
                    insert_sql = 'insert into nhy (name,pwd) value ("%s","%s");'%(username,md5_pwd)
                    my_db(insert_sql)
                    print('注册成功!')
                else:
                    print('两次输入的密码不一致')
        else:
            print('必填项不能为空!')
    
    def login():
        username = input('username:').strip()
        pwd = input('pwd:').strip()
        if username and pwd:
            md5_pwd = my_md5(pwd)
            sql = 'select * from nhy where name="%s" and pwd="%s";'%(username,md5_pwd)
            # select * from nhy where name='nhy';
            res = my_db(sql)
            if res:
                print('欢迎,登录成功!今天是%s'%datetime.date.today())
            else:
                print('账号/密码错误!')
        else:
            print('必填项不能为空!')
    login()
    View Code

     day7:操作数据库,Redis,接口开发,操作excel

    day7-1:

    # 修改excel,把app_student.xls里面的数据,
    # 1、如果这一行数据里面有乱码,那么就给他删掉
    # 2、再加上一列,是否毕业
    # 3、如果班级是天蝎座的话,毕业这一列写成毕业
    # 4、其他班级的写成未毕业

    import xlrd,xlwt,os
    # def main():
    book = xlrd.open_workbook('app_student.xls')   #读文件
    sheet = book.sheet_by_index(0)  #获取第一页
    book1 = xlwt.Workbook()   #新建
    sheet1 = book1.add_sheet('sheet1')
    header = sheet.row_values(0)   #获取表头
    header.append('是否毕业')  #加一列
    for index,h in enumerate(header):   #写表头
        sheet1.write(0,index,h)
    row = 1
    for i in range(1,sheet.nrows):  #获取每行数据,为一个list,从2行开始循环
        line = sheet.row_values(i)
        if '?'in str(line):#判断每一行里是否有?
            continue
        else:
            if line[5]=='天蝎座':
                line.append('毕业')
            else:
                line.append('未毕业')
        for index,col in enumerate(line):  #写入没有乱码的内容
            sheet1.write(row,index,col)
        row +=1
    os.remove('app_student.xls')
    book1.save('app_student.xls')
    # main()
    View Code

    day7-2:

    # 改写注册接口的:
    # 1、改写我的注册接口,让它的密码存成密文的。
    # 2、数据不再存在mysql里面,存到redis里面,redis的key就用string类型
    # 3、lyl 7869d295e566295b51eec5d6bed67c14
    # 4、校验用户是否存在
    # user:lyl

    将实现该功能的文件分类,便于管理和调用,目录列表如下:

    分别介绍下各个文件的作用:

    1.start.py:启动文件,该程序运行时,只需要运行start.py即可。

       

       2.setting.py:配置文件,把一些具体的配置信息都写在该文件里,其他文件用到时,直接导入后调用即可。

       

       3.interface.py:接口文件,把所有的接口写在该文件里。

       

      4.tools.py:该文件写各种方法,提供被调用,比如该文件里:连接redis函数,加密函数。

       

      5.readme.txt:该文件写一些说明信息,接口信息等。

       

    day8:requests模块,urllib,及异常处理

    day8-1:

    # http://doc.****.cn/index.php?s=/5&page_id=17
    # 这个抽奖接口,每天只能抽奖3次,而且必须先登录才能抽奖
    # 写一个函数,让他自动抽奖
    # 1、先登录,获取到sign
    # 2、然后再调用抽奖接口
    # 3、抽奖接口每天只能抽3次,抽奖的时候如果提示你抽奖次数已经用完
    # 那么你就连上redis,修改抽奖次数



  • 相关阅读:
    10.23 JSTL
    10.22 EL执行表达式
    10.21 EL表达式(只能在jsp中使用)
    10.20 网站访问量统计(application)
    10.19 JSP内置对象作用域
    10.16 Session和Cookie的区别
    10.15 转发与重定向
    剑指Offer_26_二叉搜索树与双向链表
    剑指Offer_25_复杂链表的复制
    剑指Offer_24_二叉树中和为某一值的路径.md
  • 原文地址:https://www.cnblogs.com/fancyl/p/8820462.html
Copyright © 2011-2022 走看看