登陆入口

2018-01-17  本文已影响0人  真水无香zj01

一、要求:

二、程序流程图

image.png

三、代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Jeff Zhu
import getpass

usr_info = [
    ["Zhang San","asdf123","Logout"], #每个元素是一个列表,有3个子元素,分别是用户名,密码,状态
    ["Li Si","dsaff1","Logout"],      #状态有三种 Login,Logout,Locked
    ["Wang Wu","123456","Logout"],
    ["Zhao Er Ma Zi","888888","Logout"],
]

wrong_times = 0

while True:
    usr_name_input = input("请输入用户名>>>")

    for i in range(len(usr_info)):
        if usr_info[i][0] == usr_name_input:
            usr_index = i
            break
        else:
            usr_index = -1
    
    if usr_index != -1:     #用户存在
        if usr_info[usr_index][2] != "Locked": #判断用户是否被锁定
            while wrong_times < 3:
                #usr_pwd_input = input("请输入密码>>>")
                usr_pwd_input = getpass.getpass("请输入密码>>>") #提示用户输入密码
                if usr_pwd_input == usr_info[usr_index][1]:#密码正确
                    print("%s,Wellcome!"%usr_info[usr_index][0])
                    usr_info[usr_index][2] = "Login"#状态变更为Login
                    wrong_times = 0
                    break
                else:#密码错误
                    print("密码错,请重新输入")
                    wrong_times += 1
            else:
                print("连续输错3次,账户被锁定")
                usr_info[usr_index][2] = "Locked"
                wrong_times = 0
            if usr_info[usr_index][2] == "Login":
                break
        else:
            print("该账户已被锁定")#提示用户已被锁定
    else:
        print("用户不存在")#提示用户名不存在

四、小结

1、建立一个list把所有用户的用户名,密码和状态存进去,在流程分支控制时,可以作为标志位来使用。

2、getpass在pycharm中无法使用,需要到命令行中才能起作用,之前还以为是程序问题,总是死在获取密码那里,后来发现是pycharm的问题。

3、用户名查表那里,我使用了一个索引变量来指向查找的字符串,在C语言中经常使用此类技巧,不知Python中还有没有更好的方法。

上一篇 下一篇

猜你喜欢

热点阅读