金典小程序之----模拟用户登录
此程序看起来简单至极,他是前面文件加密的升级版,但是还是折腾了我一下午,哎!可能是太笨了,因为里面的循环判断流程 flag 等还是比较多的,题目的要求是写一个程序,先判断他在桌面上的txt文件是否存在,存在的话让用户重新注册,输入用户名和密码,最后加上一些判断条件,然后将正确的用户和密码存储到txt文件中,密码需要使用hashlib加密后存储。
上各种坑吧!希望后面可以看懂。
坑一总结:
文件的读取有两种方法:现在是第一种比较原始:首先是使用readlines读取所有的已经注册的用户,得到的是一个类似于下面代码的一个列表,看了好久太笨了,怎么样把所有的名字单独取出来呢?
这不是可以用for循环吗?靠前面还在往死里考虑用字典,后来发现想多了字典遍历出来之后是两个单独的元素,不是列表类型的,最后使用了for循环列表,然后使用split方法分隔,
终于取到名字了。当然后面发现了一个同样方法可以使用的os模块写在后面吧!
os模块获取用户名:
import os #首先获取用户名 user = [] filename = r'C:\Users\jeep-peng zhang\Desktop\2.txt' if os.path.exists(filename):#判断路径是否存在 for line in open(filename,'r'): a = line.split(',') user.append(a[0]) print(user)
原始获取好像差不多:
user_name = [] file = r'C:\Users\jeep-peng zhang\Desktop\2.txt' f=open(file,'r',encoding='gbk') stat = f.readlines() for line in stat: #循环他的每一个元素 a = line.split(',') #以逗号分隔开 user_name.append(a[0])
charactor='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_' new_password='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' import hashlib # file = r'C:\Users\jeep-peng zhang\Desktop\2.txt' # f=open(file,'r',encoding='gbk') # user = f.readline().strip().split(',') # user_name = user[0] # f.close()#这样写的话不能读取到已经注册的用户 user_name = [] file = r'C:\Users\jeep-peng zhang\Desktop\2.txt' f=open(file,'r',encoding='gbk') stat = f.readlines() for line in stat: #循环他的每一个元素 a = line.split(',') #以逗号分隔开 user_name.append(a[0]) while True: user_namefind = input('请输入您的注册名(数字字母字符4个):') flag = True if len(user_namefind)<4: print('您输入的字符不满4个请重新输入') flag=False elif user_namefind[0] not in new_password: print('首个字符必须是字母哦请重新输入') flag =False else: for i in user_namefind: if i not in charactor: print('您的输入有非法字符请重新输入') flag = False break # else: # if user_namefind in user_name: # print('该注册名已被注册请重新输入') # flag=False#若程序执行多次查看是否在for处多次循环 else: if user_namefind in user_name: print('该注册名已被注册请重新输入') flag=False#若程序执行多次查看是否在for处多次循环 if flag: flag_new = False#注意标志位的设立 print('该用户名%s可以使用,请设置密码'%user_namefind) while True: user_password = input('请输入您的密码长度为6位包括字母数字下划线') if len(user_password)<6: print('您的密码太短,请重新输入') else: flag_new = True#构造一个退出模式 for i in user_password: if i not in charactor: print('有非法字符重新输入') flag_new=False break if flag_new ==True:#判断是否为非法字符,若不是退出 break if flag and flag_new:#注册加密(注意先后顺序) f = open(file,'a',encoding='gbk') user_password = user_password.encode('gbk') user_md5 = hashlib.md5(user_password).hexdigest() f.write(user_namefind+','+user_md5+'\n') f.close() print('恭喜注册成功') break