day01 作业 用户认证

本文介绍了一个简单的用户登录验证系统的设计与实现,包括用户输入、密码验证及错误处理等功能。系统通过读取已注册用户信息,并在多次尝试失败后锁定账户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

readme:

  

一、文件列表
    ——userAuthenticate.py
        ——usernamePassword.txt
        ——lockUser.txt
    ——level3Menu.py

二、主要完成的功能:
    1、登陆接口:
        a、功能详细情况
            1)输入用户名密码
            2)认证成功后显示欢迎信息
            3)输错三次锁定
            其中:
                1)已经注册的用户名和密码保存在usernamePassword.txt文件里面,格式为username,password
                2)输入三次错误后,锁定用户并退出程序
                2)只锁定已经注册了的用户名
                3)锁定的用户名放在lockUser.txt里面,格式为username
                4)当用户已经被锁定,当用户输入完成后显示 "该用户已经被锁定"
        b、文件列表
              ——userAuthenticate.py               主体功能文件
                ——usernamePassword.txt          保存已经注册的用户名和密码
                ——lockUser.txt                  保存锁定用户的用户名
        c、主体流程:
            1、读取usernamePassword.txt ,lockUser.txt 两个文件数据到内存
            2、提示用户输入用户名和密码
            3、判断用户输入的用户名是否已经被锁定
                    3.1、如果用户名已经锁定,重新让用户输入,重复1,2,3的步骤,直到三次,如果三次输入的用户名均被锁定,提示"你玩完了",并退出程序
                    3.2、如果其中有一次输入的用户名没有被锁定,则判断用户名和密码是否已经注册,如果注册,显示欢迎页面 "huan yin",挂起进程

二、文件完成功能
    1、userAuthenticate.py
        a、作用:登陆接口
            1)输入用户名密码
            2)认证成功后显示欢迎信息
            3)输错三次锁定
            其中:
                1)已经注册的用户名和密码保存在usernamePassword.txt文件里面,格式为username,password
                2)输入三次错误后,锁定用户并退出程序
                2)只锁定已经注册了的用户名
                3)锁定的用户名放在lockUser.txt里面,格式为username
                4)当用户已经被锁定,当用户输入完成后显示 "该用户已经被锁定"
userAuthenticate.py
  
'''
    作用:登陆接口
        输入用户名密码
        认证成功后显示欢迎信息
        输错三次锁定
'''


def StreamToDict(Stream):
    '''
    将流中的数据保存到字典中并返回字典
    :param Stream: 包含数据的流
    :return:包含数据的字典
    '''
    dataDict = {}
    for lineData in Stream:
        dataDict[lineData.split(',')[0].strip()] = lineData.split(',')[0].strip()
    return dataDict

def StreamToList(Stream):
    '''
    将流中的数据保存到列表中并返回列表
    :param Stream: 包含数据的流
    :return:包含数据的列表
    '''
    dataList = []
    for lineData in Stream:
        dataList.append(lineData.strip())
    return dataList

def listToFile(list,fileName):
    '''
    以追加的方式将list写到文件中,每一项占一行
    :param list:要写入文件的list
    :param fileName:要写入的文件
    :return:none
    '''
    try:
        fileStream=open(fileName,'a',encoding='utf-8')                          #以追加的形式往文件添加内容,当文件不存在,这句话会抛出异常,
    except:
        print("机器等待维修")
    else:
        for listItem in list:
            fileStream.write('\n'+listItem)
    finally:
        try:
            fileStream.close()  # 当文件不存在,这句话会抛出异常
        except:
            print("机器等待维修")
    pass

def test():
    '''
    test Coding
    :return:none
    '''
    try:
        usernamePasswordFile=open('usernamePassword.txt','r',encoding='utf-8')         #读取已经注册的用户名和密码,当文件不存在,这句话会抛出异常
        lockUserFile=open('lockUser.txt','r',encoding='utf-8')                          #读取已经锁定的用户名,当文件不存在,这句话会抛出异常,
    except:
        #print("机器等待维修")                                     #给用户以提示
        raise
    else:
        # 将用户名和密码保存到usernamePasswordDisct字典里面
        usernamePasswordDict=StreamToDict(usernamePasswordFile)     #usernamePasswordDict中保存了已经注册的用户名和密码,格式是{'username': 'password'}
        lockUserList=StreamToList(lockUserFile)                     #lockUserList中保存了已经注册的用户名
        lockUserListLength = len(lockUserList)                      #记录已经锁定用户的个数,再次锁定只需锁定新加的
    finally:
        try:
            usernamePasswordFile.close()  # 当文件不存在,这句话会抛出异常
        except:
            #print("机器等待维修")         #给用户以提示
            raise
    inputNumber=3   #输入密码次数
    while inputNumber>0:
        username=input("请输入用户名:")
        password=input("请输入密码:")
        if username not in lockUserList and username in usernamePasswordDict.keys() and usernamePasswordDict[username]==password:        #用户没有被锁定,用户名已经注册,密码正确
            print("huan yin !!")                    #显示欢迎页面
            while True:                             #程序停在这里
                pass
        else:
            inputNumber-=1
            if inputNumber>0:
                print('用户名或密码错误,请在输入一次,你还有%d次机会\n'%inputNumber)
            else:
                print("你玩完了\n")             #给用户以提示

    #用户名或密码输入错误,首先看用户名是否已经注册,如果是并且用户不在已经锁定的用户中(避免重复锁定),则锁定用户,否则什么都不做
    if username in usernamePasswordDict.keys() and username not in lockUserList:
        lockUserList.append(username)
    listToFile(lockUserList[lockUserListLength:],'lockUser.txt')            #更新锁定文件的内容,锁定只需锁定新加的
    exit(1)

print(__name__)

if __name__ == '__main__':
    test()

lockUser.txt:

dawa1

usernamePassword.txt
dawa1,dawa1
dawa2,dawa2
dawa3,dawa3

转载于:https://www.cnblogs.com/LaowangNext/p/7722629.html

### 学习通作业过期问题的自动化脚本或解决方案 针对学习通平台上的作业过期问题,可以通过编写自动化脚本来定期检测并提醒用户即将到期的任务。以下是一个基于 Python 的简单实现方案: #### 方案概述 通过模拟登录学习通账号,抓取用户的课程列表以及对应的作业信息,并筛选出接近截止日期的作业进行通知。此方法依赖于学习通 API 或网页爬虫技术获取数据。 --- #### 实现步骤说明 1. **模拟登录** 使用 `requests` 库发送 HTTP 请求,携带用户名和密码完成身份认证。如果学习通提供了官方开放接口,则优先调用其 RESTful 接口;如果没有公开文档,则需解析 HTML 页面提取所需的数据[^3]。 2. **抓取作业信息** 登录成功后访问目标 URL 获取当前学期的所有课程及其关联的作业详情。这些信息可能包括但不限于: - 作业名称 - 提交状态 (已完成 / 待提交) - 截止时间 3. **设置定时任务** 利用 `schedule` 或者 `apscheduler` 定义周期性的检查逻辑,每天固定时间段触发程序运行,判断是否有未完成且距离截止日小于指定天数(如一天)的项目需要提示给使用者知道[^4]。 4. **推送消息至终端设备** 当发现符合条件的目标对象时,可通过邮件服务(SMTP协议),或者第三方即时通讯工具比如钉钉机器人/DingTalk Webhook等方式向学生本人发出警告信号以便及时采取行动防止错过最后期限。 下面给出一段伪代码作为参考: ```python import requests from bs4 import BeautifulSoup import schedule import time import smtplib from email.mime.text import MIMEText def login(username, password): session = requests.Session() payload = {'username': username, 'password': password} response = session.post('https://example.com/login', data=payload) if "欢迎" in response.text: print("Login Successful!") return session else: raise Exception("Failed to Login") def fetch_homeworks(session): homework_list_url = 'https://example.com/homework/list' res = session.get(homework_list_url) soup = BeautifulSoup(res.content.decode(), features="html.parser") assignments = [] for item in soup.select('.assignment-item'): title = item.find(class_='title').text.strip() due_date_str = item.find(class_='due-date').text.strip()[:-5].replace('年','-').replace('月','-').replace('日','') status = True if ('已提交'==item.find(class_='status').text.strip())else False try: from datetime import datetime as dt fmt='%Y-%m-%d %H:%M' deadline=dt.strptime(due_date_str ,fmt ) now_time_utc8=(dt.utcnow()+timedelta(hours=8)) diff_days=(deadline-now_time_utc8).days if(diff_days<=7 and not status):#提前一周预警 assignments.append({"name":title,"expire_in":diff_days}) except ValueError as ve : pass return assignments def notify_via_email(assignments,email_config={}): sender_address=email_config['sender'] receiver_addresses=[email_config['receiver']] content="<ul>" for assg in assignments: content+=f"<li>{assg['name']} 将会在 {abs(assg['expire_in'])} 天{'前'if assg['expire_in']>0 else '' }到期。</li>" content+="</ul>" msg=MIMEText(content,'html','utf-8') ... def job(): sess=None try: sess=login('<your_username>', '<your_password>') hwds=fetch_homeworks(sess) if(len(hwds)>0): send_notification(hwds,{"sender":"no-reply@example.com","receiver":"student@example.com"}) finally: if isinstance(sess,requests.sessions.Session): sess.close() schedule.every().day.at("09:00").do(job) while True: schedule.run_pending() time.sleep(60) ``` 注意以上仅为示意性质代码片段,请根据实际情况调整URL地址以及其他配置项参数值等内容后再实际部署应用环境当中使用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值