金典小程序之----模拟用户登录

此程序看起来简单至极,他是前面文件加密的升级版,但是还是折腾了我一下午,哎!可能是太笨了,因为里面的循环判断流程 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

 

posted @ 2018-01-11 16:51  jeep-鹏  阅读(932)  评论(0编辑  收藏  举报