模拟登陆

花了近两周时间,终于搞定了这个模拟登陆程序编程。

感悟:有目的的练习,才叫“刻意练习”。有努力,就有收获。

废话不多说,先看我的代码


import os

data = '用户信息库.txt' # 先建好的用户信息库文件
data2 = '黑名单.txt' # 先建好的黑名单文件


def main(): # 定义一个首函数,判断用户是否已经注册
judg_user = input('你是否已经注册过了?y/n:').strip() # 询问用户是否已经注册
if judg_user.lower() == 'y':
func1() # 如果已经注册,那就跳转至登录程序
elif judg_user == 'n':
func2() # 如果还么注册,那么跳转至注册程序
else:
return


def func1(): # 定义一个用户登录程序
count = 1 # 定义登录次数变量
while count < 5: # 循环输入账户和密码,小于5次。如果这里小于4的话,后面第四次就没办法记录用户名了。
_username = input('请输入您的账号:')
h = open(data2, 'r', encoding='utf-8') # 用户输入户名后,首先打开黑名单文件。
if len(h.readline()) > 0: # 判断黑名单文件是否为空,不为空的话,进行判断
if _username in func3(): # 判断用户名是否在黑名单。这里定义了一个黑名单返回值函数
print('您的账号已被锁定。')
exit()
_password = input('请输入您的密码:')
d = {} # 定义个空字典,以存放用户信息,格式为字典键值对,以便后面用户信息的匹配判断
f = open(data, 'r', encoding='utf-8') # 打开用户信息库文件
for s in f.readlines(): # 读取每一行用户信息
d.update(eval(s)) # 将用户信息从文件里面读出来后转化成了字典格式
if _username in d.keys() and _password == d['%s' % _username]: # 判断用户名和密码是否匹配
print('welcome login....')
break
else:
print('Wrong username or password!')
count += 1 # 用户登录错误一次,count自增1,以记录用户登录错误次数

if count == 4: # 用户登录错误4次的话,直接将用户名加入黑名单
h = open(data2, 'a', encoding='utf-8')
h.write('%s\n' % _username)
print('您输入的次数超过了3次,账户将被锁定。')
h.close()
break


def func2(): # 定义的一个用户注册程序,并将用户信息存储进“用户信息库”,以备下次登录匹配
username = input('您的注册账号:')
userpassword = input('您的注册密码:')
f = open(data, 'a', encoding='utf_8')
f.write("{'%s':" % username)
f.write("'%s'}\n" % userpassword)
f.close()
print("恭喜!您已注册成功。请登录")
return func1()


def func3(): # 专门为遍历黑名单定义的一个函数
h = open(data2, 'r', encoding='utf-8')
for i in h.readlines():
return i
h.close()


main()

为了完成这个程序,让我学到了很多知识点。比如:回顾了文件操作模式‘w’/'a'/'r'/'w+'/'r+'/,在这几个里面来回了好几次,终于算是搞明白了。

最难的有两点:
一个是如何用户信息转化成字典,搞了我好几天。想来还是基础不牢固,前学后忘比较严重。
另一个是如何在用户输错了3次之后,锁定账户,并在再次登录时,提示用户被锁信息。这个点憋了3天。

创新的一点:func3中,直接返回了黑名单中的行值i,然后用in语法判断用户名是否在黑名单里,之前尝试直接用了for循环和==判断,都没成功,后来想用in试试,没想到成了。
代码如下:
     if len(h.readline()) > 0:  # 判断黑名单文件是否为空,不为空的话,进行判断
if _username in func3(): # 判断用户名是否在黑名单。这里定义了一个黑名单返回值函数
print('您的账号已被锁定。')
exit()
这一句:if len(h.readline()) > 0:
也是废了老大的神才想出来的,没想到也管用了。

不管怎么样,作为一个小白,通过自己的努力写出了这个代码,不说骄傲吧,但是真的很有成就感,哈哈。
好就都没有这种成就感了。

当然,我知道这里面肯定有很多bug ,当然也有很多需要提升的地方,希望各位大神的指点啊!

我,一个35岁的老男人,事业单位里的普通人,通过老男孩Python入门集训课,知道了这里,很幸运。谢谢老男孩的老师们。

我会努力的,我要继续努力,我的目标是学会这个Python编程语言,做个有技能的男人。

争取转行。


猜你喜欢

转载自www.cnblogs.com/hunson007/p/9157692.html