day1.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#user:Felix
#date:2016-10-11
#mail:wudonghang@wudonghang.com
#If you have questions or suggestions, please contact the author.

import getpass
import os
import json

#退出程序用,后续会重复调用。
def end():
print('\nProgram is over!')
exit()

#判断是否有用户文件
def file_exists():
if os.path.exists(userlist):
pass
else:
print('User list file not defined!')
end() #没有检测到用户文件,

#判断用户是否存在文件中
def user_exists():
if username not in userlist_message:
print('User name does not exist in the system!')
end()

#开始登陆流程
userlist = 'userlist'
file_exists()
username = input("Please input your username:")
with open(userlist, 'r') as userlist_json: #将文件内容读取出来
userlist_message = json.load(userlist_json) #转换json
user_exists()
#判断用户名密码是否正确,输入正确显示welcome+用户名,输入不正确3次后将跳出循环并锁定该用户。
real_password = userlist_message[username][0]['password'] #根据用户输入username取出json中的password
if int(userlist_message[username][0]['lock']) == 0:
print('Your user has been locked, please contact the administrator to unlock.!')
end()
elif int(userlist_message[username][0]['lock']) == 1:
pass
else:
print('Your user status is abnormal, please contact the administrator!')
end()
password = getpass.getpass(prompt='please input your password: ') #输入密码
for count in range(3):
if username == username in userlist_message and password == real_password:
print("Welcome! %s"%username)
end()
elif count == 2:
print('Sorry, your user name has been locked, temporarily not allowed to use!')
userlist_message[username][0]['lock'] = 0
json.dump(userlist_message, open(userlist, 'w'))
break #输错次数到3次跳出循环,并加入黑名单
else:
print("wrong username or password!") #提示密码输入错误
password = getpass.getpass(prompt='Please enter your password again: ') #重新输入一次密码
end()


userlist:
{"huangxu": [{"password": "huangxu123", "lock": 1}], "liuyao": [{"password": "liuyao123", "lock": 1}], "wudonghang": [{"password": "wudonghang123", "lock": 1}], "administrator": [{"password": "administrator123", "lock": 1}]}
readme:
###博客园地址:[Python之路,Day1 - Python基础1](http://www.cnblogs.com/wudonghang/p/d40bdbbd1a87e6c907ac76f8c6f4c024.html "我的博客园地址")
***
###程序简介:
>背景

[作业:](http://www.cnblogs.com/alex3714/articles/5465198.html#3519330 "大王留下的作业")

* 编写登陆接口

* 输入用户名密码

* 认证成功后显示欢迎信息

* 输错三次后锁定
***
>构想流程图

![](http://i.imgur.com/DYvmgC2.png)

***

>实现方式

1. 用户数据文件形式采用了json形式 (lock值为0时,用户为锁定状态)

json格式如下

{

"wudonghang": [

{

"password": "wudonghang123",

"lock": 0

}

],

"administrator": [

{

"password": "administrator123",

"lock": 1

}

]

}
2. 查询json文件数据方法

with open(userlist, 'r') as userlist_json:
userlist_message = json.load(userlist_json)

real_password = userlist_message[username][0]['password'] #查询文件中password
real_lock = userlist_message[username][0]['lock'] #查询用户锁定状态
3. 采集username以及password方法

input("Please input your username:") #输入用户名
getpass.getpass(prompt='Please enter your password again: ') #这里我采用了getpass模块

4. 利用for循环与if判断来实现对username和password的判断,以及用户lock值的修改

for count in range(3):

if username == username in userlist_message and password == real_password:

print("Welcome! %s"%username)

end() #登陆成功跳出程序

elif count == 2:

print('Sorry, your user name has been locked, temporarily not allowed to use!')

userlist_message[username][0]['lock'] = 0

json.dump(userlist_message, open(userlist, 'w'))

break #输错次数到3次跳出循环,并加入黑名单

else:

print("wrong username or password!") #提示密码输入错误

password = getpass.getpass(prompt='Please enter your password again: ') #重新输入一次密码

***

day1的更多相关文章

  1. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  2. day1作业--登录入口

    作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...

  3. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  4. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

  5. 团队项目——站立会议 DAY1

    团队项目--站立会议 DAY1        团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱        今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...

  6. Day1 login

    使用流程: 1.程序启动后,显示欢迎信息,提示用户输入用户名: 2.判断用户是否存在,不存在则提示重新输入,或者关闭程序:客户存在则提示客户输入密码: 3.判断密码是否正确,如果不正确则提示用户重新输 ...

  7. contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve

    http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...

  8. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

  9. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

随机推荐

  1. Android Monkey压力测试

    Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试. 1为什 ...

  2. 自己动手写插件底层篇—基于jquery移动插件实现

    序言 本章作为自己动手写插件的第一篇文章,会尽可能的详细描述一些实现的方式和预备知识的讲解,随着知识点积累的一点点深入,可能到了后期讲解也会有所跳跃.所以,希望知识点不是很扎实的读者或者是初学者,不要 ...

  3. centos6.4下安装php7+nginx+mariadb环境

    一,安装php71,创建php用户和用户组,并在github下载php7源码#新建php用户和php组# groupadd -r php && useradd -r -g php -s ...

  4. MongoDB的基本操作

    环境:CentOS6.8  Mongodb3.2.10 启动 启动mongoDB服务器 # service mongod start 启动mongoDB客户端 # mongo 该客户端是一个JavaS ...

  5. Coding 及 git 的工程使用方法

        在过去的两周,同学们除了在学习 C 语言之外,还在学习如何利用 git 将自己的代码上传到 coding 中.也有大量的同学,成功的上传了代码.但是,实际上大部分同学的用法都不合理.这里,以一 ...

  6. 纯CSS实现图片水平垂直居中于DIV(图片未知宽高)

    <div class="demo"><a href="#"><img src="http://nec.netease.c ...

  7. Sunny-ngrok 解决外网访问内网问题

       该博文已过时    请参考官网        http://www.ngrok.cc/ 一  .进入 网址 往下拉找到: 下载不同的版本. 二. 平台登陆地址:http://www.ngrok. ...

  8. linux-磁盘空间(du-df)

    当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. 简要介 ...

  9. 真正高效的SQLSERVER分页查询(多种方案)

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  10. 动力节点Java培训告诉你Java线程的多功能用法

    现在的java开发可谓是八仙过海各显神通啊!遥想当下各种编程语言萎靡不振,而我Java开发异军突起,以狂风扫落叶之态,作为Java培训行业的黄埔军校,为了守护Java之未来,特意总结了一些不被人所熟知 ...