时隔了几天,我终于实现了注册与登录这部分的功能,实现过程我都一一标上了注解,虽然看上去这里的代码并不多,但其实我已经写了几天啦,在经过不断反复的调试后终于实现了一函两用,这也应验了编程界的一句话:“没有做不到只有想不到”,这些方法虽看上去简单,但其实真正实践起来时并没有想象中的容易呢,或许可能是我的智商低吧,逻辑一直转不过弯,如果大家有更好的方式,也欢迎大家一起来交流! #coding: utf-8
__author__ = 'Naruto'
def rigster(flog): #用于注册\登录时输入账号密码,参数flog用于判断登录或注册n为登录y为注册
us = input("请输入您的账号:")
ps = input("请输入您的密码:")
check_acount(us,ps,flog) #将参数传给check_acount
def check_acount(arg,pw,flog): #判断用户是否存在或写入配置
num = 0 #用于增量,配置文件第一行用于标识信息,从第二行才开始遍历内容
account = "用户:%s 密码:%s" % (arg, pw) #将用户密码赋于account
dict={} #用于接收切割后的用户信息
with open('Eycheck.conf', 'a+') as df: #加载本地配置文件,并以读写形式追加
df.seek(0) #将文本指针指向0,表示从头开始遍历
line = df.readlines() #遍历文件内容并赋值给line
if line != '': #非空执行下面的代码
for i in line: #通过for循环将line的变量分别赋值给 i
num+=1 #增量
if num >=2: #从第二行开始遍历
user,psd =i.strip('\n').split() #将文本分割为 用户名:admin 密码:admin 的形式
dict[user[3:]]=psd[3:] #通过分片截取冒号以后的字符,也就是账号密码的值,并以key:value形式写入到字典中
for k,v in dict.items(): #用for循环分别将字典的键值写入到k,v
if arg == k and pw == dict[k]: #通过传入的参数(即用户信息)与字典的键值进行动态配对
if flog == "n": #判断登录或注册,n为登录
print("登录成功!")
return True
elif flog =="y": #判断登录或注册,y为注册
print("该用户已存在于数据库中,请直接登录!")
rigster("n")
elif arg ==k and pw != dict[k]:
if flog == "n": #判断登录或注册,n为登录
print("您输入的账号与密码不符")
rigster('n')
elif flog == "y": #判断登录或注册,y为注册
print("该用户名已被占用,请更换!")
rigster('y')
if arg not in dict: #通过上面的配对后都没有找到的情况下进行非操作,如为登录状态则返回该用户不存在,反之则将新用户写入到配置文本
if flog == 'n': #判断登录或注册,n为登录
print("该用户不存在,请重新输入!")
elif flog == 'y': #判断登录或注册,y为注册
df.write('\n' + account) # 如用户名不存在字典中则创建并返回成功!
print('账户创建完毕')
else: #当配置文件为空时写入配置信息
df.write('#===========这里是系统配置文件,请勿随意修改===========#\n' + account)
print("配置与用户信息写入完毕")
def start(): #加载启动的函数
choose = input("是否初次使用本系统? y|n:")
if choose == 'y':
rigster('y')
elif choose == 'n':
rigster('n')
#=============================================主程序启动=================================================#
if __name__== "__main__": #判断是否为主文件执行
start()
0 评论:
发表评论