python小练习之二
title: python小练习之二
tags: 新建,模板,小书匠
grammar_cjkRuby: true
python小练习之二
需求:实现用户登录,用户名和密码保存到文件里,连续输入三次密码错误,则退出
在需求上,略拓展了那么一丢丢:实现用户注册,用户名不存在则引导用户注册,用户注册时检测是否有用户名重复的情况
尚未实现的:检测用户是否存在的时候,没有实现用户名的精确匹配,比如,用户名aa和用户名aaa,如果aaa用户名注册过了,会认为aa用户也注册过了,这块需要修改
# coding:utf-8
class User(object):
    def __init__(self):
        self.userchoice = 0
        self.userlist = list()
        self.username = str()
        self.password = str()
        # 用户名是否被使用了
        self.nameused = 0
        # 用户的用户名+密码是否能匹配
        self.user_correct = 0
        # 用户是否存在
        self.user_exist = 0
        # 用户登录尝试次数
        self.login_try_count = 0
        # 用户登录允许最大尝试次数为3次
        self.login_limit_count = 3
    def GenUserList(self):
        self.userlist = list()
        with open("userlist", "a+") as fd_userlist:
            for line in fd_userlist:
                if line.rstrip("\n"):
                    self.userlist.append(line.rstrip("\n"))
    def WriteUserList(self, username):
        username = self.username
        with open("userlist", "a+") as fd_userlist:
            fd_userlist.write(self.username)
            fd_userlist.write("\n")
    def UsernameCheck(self, username):
        self.GenUserList()
        self.nameused = 0
        username = self.username
        if self.username in self.userlist:
            print '%s 用户名已经使用过了,请重新选择用户名' %(self.username)
            self.nameused = 1
        elif self.UserExist(self.username) == 1:
            self.nameused = 0
        return self.nameused
    def UserExist(self, username):
        with open("userprofile", "a+") as fd:
            for line in fd:
                if line.find(username) == 0:
                    self.user_exist = 1
                    return self.user_exist
                else:
                    self.user_exist = 0
                    return self.user_exist
    def UserRegister(self):
        input_username = raw_input("请输入用户名:")
        self.username = input_username.strip()
        if self.UsernameCheck(self.username) == 0:
            input_password = raw_input('请输入密码:').strip()
            self.password = input_password
            with open('userprofile', 'a+') as fd_userprofile:
                 # fd_userprofile.write('username:' + self.username + '|')
                 # fd_userprofile.write('password:' + self.password)
                 fd_userprofile.write(self.username + '|')
                 fd_userprofile.write(self.password)
                 fd_userprofile.write("\n")
                 self.WriteUserList(self.username)
        else:
            self.UserRegister()
    def UserCorrect(self, username, password):
        userProfile_dict_list = list()
        with open("userprofile", "a+") as fd:
            for line in fd:
                u, temp_p = line.split("|")
                p = temp_p.strip()
                userProfile_dict_list.append({'username': u, 'password':
                            p})
        length = len(userProfile_dict_list)
        for i in xrange(length):
            if username == userProfile_dict_list[i]['username']:
                if password == userProfile_dict_list[i]['password']:
                    self.user_correct = 1
                    return self.user_correct
                else:
                    self.user_correct = 0
                    return self.user_correct
            # return self.user_correct
    def UserLogin(self):
        userProfile_dict_list = list()
        input_username = raw_input("登录用户名:").strip()
        input_password = raw_input("登录密码:").strip()
        self.user_correct = self.UserCorrect(input_username, input_password)
        self.user_exist = self.UserExist(input_username)
        if self.user_correct == 1:
            print "欢迎登录:", input_username
        elif self.user_exist == 1:
           print "密码错误"
           self.login_try_count += 1
           print "%s 还有 %d 次尝试机会" %(input_username,\
                   self.login_limit_count - self.login_try_count)
           if self.login_try_count < 3:
               self.UserLogin()
           else:
               print "%s 已经尝试3次登录失败" %(input_username)
               self.UserExit()
        elif self.user_exist == 0:
            print "%s 用户不存在" %(input_username)
            print "请去注册"
            self.UserRegister()
    def UserExit(self):
        print "Bye Bye"
        exit(0)
    def ProcessUserChoice(self):
        if self.userchoice == 1:
            self.UserRegister()
        elif self.userchoice == 2:
            self.UserLogin()
        elif self.userchoice == 3:
            self.UserExit()
        else:
            self.userchoice = int(raw_input("请输入正确的选择,1或者2或者3:"))
            self.ProcessUserChoice()
    def InitInterface(self):
        failedCount = 0
        login_status = dict()
        u_profile_dict_list = list()
        while True:
            try:
               self.userchoice = int(raw_input("----------------\n"
                                    "1:注册\n"
                                    "2:登录\n"
                                    "3:退出\n"
                                    "----------------\n"
                                    "请选择:").strip())
               self.ProcessUserChoice()
            except Exception as e:
                print e
                self.InitInterface()
def Main():
    user = User()
    user.InitInterface()
if __name__ == "__main__":
    Main()
												
											python小练习之二的更多相关文章
- Python小练习(二)
		
按照下面的要求实现对列表的操作: 1)产生一个列表,其中有40个元素,每个元素是0到100的一个随机整数 2)如果这个列表中的数据代表着某个班级40人的分数,请计算成绩低于平均 ...
 - Python小代码_5_二维矩阵转置
		
使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...
 - python小例子(二)
		
1.在函数里面修改全局变量的值 2.合并两个字典.删除字典中的值 3.python2和python3 range(1000)的区别 python2返回列表,python3返回迭代器 4.什么样的语言可 ...
 - python小算法(二)
		
有两个序列a,b,大小都为n,序列元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小.(华为面试) def diff(sorted_list ...
 - python小工具myqr生成动态二维码
		
python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...
 - 机器学习算法与Python实践之(二)支持向量机(SVM)初级
		
机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 zouxy09@qq.com http://blog.csdn.net/ ...
 - python机器学习实战(二)
		
python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...
 - Python小数据池,代码块
		
今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. ...
 - Python入门基础学习 二
		
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
 
随机推荐
- Centos7中hadoop配置
			
Centos7中hadoop配置 1.下载centos7安装教程: http://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html (注意 ...
 - JAVA设计模式--装饰器模式
			
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
 - python函数学习(一)
			
1.parse_known_args()和parse_args()函数 该函数为命令行解析函数,调用时需要import argparse(命令行选项.参数和子命令的解析器). 以下内容摘自python ...
 - WordPress非插件实现评论回复邮件提醒通知
			
要想在第一时间知道有人在自己博客留言,然后在第一时间回复留言再第一时间通知邮件者,这就需要WordPress博客拥有邮件通知功能. 先看效果: 评论邮件通知的方法: 1.所有回复都发送邮件通知 登陆博 ...
 - 设计模式——装饰器模式(C++实现)
			
#include <iostream> #include <string> using namespace std; class Component { public: ; } ...
 - 20165226 学习基础和C语言基础调查
			
心得体会 驱动迭代 学习是一个老师与学生互动的过程,二者关系又恰如健身教练与学员,在进行基础知识的培训后还需借助工具加强相关方面的训练.学习提升的过程离不开学生在实践中发现问题并在老师的帮助下解决问题 ...
 - jsp的两种跳转方式和区别
			
1.forward跳转: 服务器端跳转,地址栏不改变: 执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源): request设置的属性在跳转后的页面仍可以使用: 使用&l ...
 - IMLite轻量级即时通信工具开发指南
			
花了一周时间开发了一个简单的即时通信工具,勉强算是程序原型.现在我把开发流程和一些个人的想法记录下来.本文首先介绍程序架构和通信接口,之后会聚焦到服务器的信号槽设计原则,接下来将解释有关TCP通信的粘 ...
 - Java String常用方法
			
字符串查找 两种查找字符串的方法,indexOf(String s)和lastIndexOf(String s). String str = "tyson-json"; int i ...
 - .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
			
一.前言 本篇开发环境?1.操作系统:CentOS7(因为ken比较偏爱CentOS7)2.SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识1.了解如何通过Hyper-V安 ...