Python学习笔记

第一次用pycharm写一个登陆程序很简单

# 2018/2/28
# 一个登陆程序,账号输入三次错误之后永久锁定,登陆成功错误数目清零
# 账号名为文件名,密码尝试次数为第一行,密码为第二行

主体函数

整个主体,还有功能的实现和函数(方法)会在下面分别贴出来

 
Flag = 1                                    # 首先使欢迎界面循环
while Flag:                                 # 登录成功或者主动退出时置0
    InputNumber = int(input(message))       # 等待用户输入,并将用户输入的数字变为int
    if InputNumber == 1:                    # 如果输入为1,进入登录界面
        LoginFlag = 1                       # 开放登录界面,退出时登录置0
        while LoginFlag:
            UserName = input("请输入用户名:")     # 缓存用户输入的用户名
            if judgeusername(UserName):         # 用函数判断用户名是否存在,存在返回1
                State = judgetimes(UserName)    # 返回用户登录状态
                if State == 1:                  # 1.登录成功,退出系统
                    Flag = 0
                    LoginFlag = 0
                elif State == 2:                # 2.登录失败,要求继续登录回到登录界面
                    continue
                elif State == 3:                # 3.用户已被锁定,退出登录
                    LoginFlag = 0
                else:
                    print("返回值错误!!!")      # 防止BUG,返回值错误时的提示
            else:                               # 用户名不存在
                i2 = input("用户名不存在,请输入数字\n1.继续登录\n0.退出登录\n")
                if i2 == '0':                    # 退出登录
                    Flag = 1
                    LoginFlag = 0
                elif i2 == '1':                  # 回到登录界面
                    continue
                else:                           # 输入错误,退出登录
                    print("输入错误已返回欢迎界面.")
                    LoginFlag = 0
    elif InputNumber == 2:                      # 进入注册界面
        RegisterFlag = 1                        # 退出注册时置0
        while RegisterFlag:
            UserName = input("请输入想要创建的用户名:")    # 缓存用户的注册名
            if not judgeusername(UserName):      # 检测用户名是否存在,存在返回1
                Password = input("请输入密码:")  # 用户名不存在让用户设置密码
                adduser(UserName, Password)          # 创建用户文件
                print("创建成功,现在可以使用创建的用户登陆")  # 提示用户可以登录
                RegisterFlag = 0                        # 退出注册
            else:
                i3 = input("用户名已存在,请输入数字\n1.继续注册\n0.退出注册\n")
                if i3 == '1':
                    continue                       # 继续注册
                elif i3 == '0':
                    RegisterFlag = 0               # 退出注册
                else:
                    print("输入错误已返回欢迎界面.")
                    RegisterFlag = 0                # 退出注册
    elif InputNumber == 3:
        print("欢迎使用本系统,欢迎下次使用.")
        Flag = 0                                    # 退出系统
    else:
        print("输入错误情从新输入")                 # 输入错误时继续

1  欢迎界面实现代码

 
message = '''
欢迎使用本系统,请输入数字:
1.登陆
2.注册
3.退出
'''
Flag = 1                                    # 首先使欢迎界面循环
while Flag:                                 # 登录成功或者主动退出时置0
    InputNumber = int(input(message))       # 等待用户输入,并将用户输入的数字变为int

1.1控制台显示情况

欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出

2  注册界面实现代码

elif InputNumber == 2:                      # 进入注册界面
    RegisterFlag = 1                        # 退出注册时置0
    while RegisterFlag:
        UserName = input("请输入想要创建的用户名:")    # 缓存用户的注册名
        if not judgeusername(UserName):        # 检测用户名是否存在,存在返回1
            Password = input("请输入密码:")           # 用户名不存在让用户设置密码
            adduser(UserName, Password)             # 创建用户文件
            print("创建成功,现在可以使用创建的用户登陆")  # 提示用户可以登录
            RegisterFlag = 0                        # 退出注册
        else:
            i3 = input("用户名已存在,请输入数字\n1.继续注册\n0.退出注册\n")
            if i3 == '1':
                continue                       # 继续注册
            elif i3 == '0':
                RegisterFlag = 0               # 退出注册
            else:
                print("输入错误已返回欢迎界面.")
                RegisterFlag = 0                # 退出注册

2.1查询用户名是否存在的函数

在整个程序运行之前需要先创建一个总用户名的txt文件(所有的用户的用户名都逐行存储在该文件中)

在注册时需要逐条查询用户名是否存在

def judgeusername(username):                # 测试用户名是否存在
    flag1 = 0                               # 返回值先置0
    fileobj = open("UserName.txt", "r")     # 打开用户名文件UserName.txt
    for line in fileobj:                    # 逐行查找用户名是否存在
        s = readline(line)                  # 缓存用户名
        if username == s:                   # 对比成功将返回值置1
            flag1 = 1
            break                           # 退出循环
    fileobj.close()                         # 文件关闭时还未查找到flag10
    return flag1                         

2.2 读行函数(去换行符)

缓存用户名时用到一个自己写的读函数,因为读的是文件中一行一行的字符串,所以结尾会有一个换行符,对比时会出错,所以需要去掉换行符

def readline(str1):             # 读函数,传过来的是字符串
    sl = list(str1)             # 字符串转列表
    sl = sl[:-1]                # 切片去掉换行符
    sl = ''.join(sl)            # 重新组合为没有换行符的字符串
    return sl

2.3 创建用户个人文件

当注册成功时,新建用户个人文件1.以用户名命名文件名2.保存用户密码3.用户尝试登录次数

def adduser(name, password):
    fw = open("UserName.txt", "a")          # 打开总用户名文件
    fw.write(name+'\n')                     # 将新建用户加入该文件中
    fw.close()                              # 关闭总用户名文件
    filename = name+".txt"                  # 得到用户个人文件名
    fnw = open(filename, "w")               # 新建用户个人文件
    fnw.write("0\n"+password)               # 写入尝试登录次数以及密码
    fnw.close()                             # 关闭用户个人文件

2.4 控制台

2.4.1 注册成功时
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2
请输入想要创建的用户名:ChaoMingzhi
请输入密码:chriszzz1
创建成功,现在可以使用创建的用户登陆


欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2.4.2 注册失败时
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2
请输入想要创建的用户名:ChaoMingzhi
用户名已存在,请输入数字
1.继续注册
0.退出注册
1
请输入想要创建的用户名:ChaoMingzhi
用户名已存在,请输入数字
1.继续注册
0.退出注册
0


欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出

3  登录界面实现代码

if InputNumber == 1:                    # 如果输入为1,进入登录界面
    LoginFlag = 1                       # 开放登录界面,退出时登录置0
    while LoginFlag:
        UserName = input("请输入用户名:")     # 缓存用户输入的用户名
        if judgeusername(UserName):         # 用函数判断用户名是否存在,存在返回1
            State = judgetimes(UserName)    # 返回用户登录状态
            if State == 1:                  # 1.登录成功,退出系统
                Flag = 0
                LoginFlag = 0
            elif State == 2:                # 2.登录失败,要求继续登录回到登录界面
                continue
            elif State == 3:                # 3.用户已被锁定,退出登录
                LoginFlag = 0
            else:
                print("返回值错误!!!")      # 防止BUG,返回值错误时的提示
        else:                               # 用户名不存在
            i2 = input("用户名不存在,请输入数字\n1.继续登录\n0.退出登录\n")
            if i2 == '0':                    # 退出登录
                Flag = 1
                LoginFlag = 0
            elif i2 == '1':                  # 回到登录界面
                continue
            else:                           # 输入错误,退出登录
                print("输入错误已返回欢迎界面.")
                LoginFlag = 0

3.1  判断用户名是否存在

上面已经贴过了,一样的原理

3.2 判断用户尝试登录次数

def judgetimes(username):
    site = username+".txt"              # 得到用户个人文件名
    f = open(site, "r")                 # 打开用户个人文件
    ft = f.readlines()                  # 用列表缓存用户个人资料
    f.close()
    times = int(ft[0][0])               # 第一行第一个字符为用户尝试登录数
    if times < 3:                       # 012可以继续登录
        password = input("请输入密码:")   # 缓存用户输入密码
        if password == ft[1]:            # 密码对比成功
            print("用户登陆成功,即将进入,请稍后.")
            changechar(ft, 0, 0, '0')  # 用函数**将列表ft中尝试登录次数改为0
            writefile(ft, site)        # 用函数**ft写入个用户个人文中
            return 1                    # 成功登录,退出所有循环
        else:                           # 密码对比失败
            times += 1                  # 尝试登录次数+1
            wtimes = chr(times+48)      # 数字和字符的更改  数字1ASCⅡ码为49
            changechar(ft, 0, 0, wtimes)    # 同上
            writefile(ft, site)             # 同上
            if times < 3:                   # 尝试登录次数小于3
                print("密码输入错误"+wtimes+",输入错误达到三次将被锁定\n")
                i1 = input("请输入数字:\n1.继续登录\n0.退出登录\n")
                if i1 == '0':
                    return 3            # 接刚才的主函数中的state
                elif i1 == '1':
                    return 2
                else:
                    print("输入错误,已回到欢迎界面")
                    return 3
            else:
                print("密码输入错误已达3,该账户已被锁定,请联系管理员.")
                return 3
    else:
        print("该账户已被锁定,请联系管理员.")
        return 3

3.2.1 更改列表中的某个字符
def changechar(l, m, n, a):                 # l表中的第m行,第n个字符,换为字符a
    ltemp = list(l[m])                      # 将列表中的第m行变为列表
    ltemp[n] = a                            # 更改第n个字符为a
    ltemp = ''.join(ltemp)                  # 重新拼接
    l[m] = ltemp 
3.2.2 更改用户个人文件
def writefile(l, site):                    # 将列表l的内容写入路径为site的文件
    fw = open(site, 'w+')                  # 打开用户个人文件 
    for line in l:                         # 逐行写入
        fw.write(line)          
    fw.close()                              # 关闭文件

3.3 控制台

3.3.1 登录成功
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
1
请输入用户名:ChaoMingzhi
请输入密码:chriszzz1
用户登陆成功,即将进入,请稍后.
3.3.2 登录失败
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
1
请输入用户名:ChaoMingzhi
请输入密码:1
密码输入错误1次,输入错误达到三次将被锁定


请输入数字:
1.继续登录
0.退出登录
1
请输入用户名:ChaoMingzhi
请输入密码:1
密码输入错误2次,输入错误达到三次将被锁定


请输入数字:
1.继续登录
0.退出登录
0


欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
1
请输入用户名:ChaoMingzhi
请输入密码:1
密码输入错误已达3次,该账户已被锁定,请联系管理员.


欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
1
请输入用户名:ChaoMingzhi
该账户已被锁定,请联系管理员.


欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
 

4  退出界面

4.1 退出界面实现代码
 
elif InputNumber == 3:
    print("欢迎使用本系统,欢迎下次使用.")
    Flag = 0                                    # 退出系统
4.2 控制台
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
3
欢迎使用本系统,欢迎下次使用.
 

5 欢迎界面输入错误

5.1 实现代码

 
else:
    print("输入错误情从新输入")                    # 输入错误时继续

5.2 控制台

欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
4
输入错误情从新输入


欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出

第一次写博客,堪比写论文,文笔也很服气,如果大神有空帮我

看下哪些地方有什么可以改进的,小弟感激不尽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值