day1
#!/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()
{"huangxu": [{"password": "huangxu123", "lock": 1}], "liuyao": [{"password": "liuyao123", "lock": 1}], "wudonghang": [{"password": "wudonghang123", "lock": 1}], "administrator": [{"password": "administrator123", "lock": 1}]}
###博客园地址:[Python之路,Day1 - Python基础1](http://www.cnblogs.com/wudonghang/p/d40bdbbd1a87e6c907ac76f8c6f4c024.html "我的博客园地址")
***
###程序简介:
>背景
[作业:](http://www.cnblogs.com/alex3714/articles/5465198.html#3519330 "大王留下的作业")
* 编写登陆接口
* 输入用户名密码
* 认证成功后显示欢迎信息
* 输错三次后锁定
***
>构想流程图

***
>实现方式
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的更多相关文章
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- day1作业--登录入口
作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- Python学习路程day1
变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...
- 团队项目——站立会议 DAY1
团队项目--站立会议 DAY1 团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱 今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...
- Day1 login
使用流程: 1.程序启动后,显示欢迎信息,提示用户输入用户名: 2.判断用户是否存在,不存在则提示重新输入,或者关闭程序:客户存在则提示客户输入密码: 3.判断密码是否正确,如果不正确则提示用户重新输 ...
- contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve
http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...
- noip2011提高组day1+day2解题报告
Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
随机推荐
- Web 开发中很实用的10个效果
在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...
- Ext小总结
titleCollapse:true,//高级搜索点击隐藏显示 添加按钮 >弹出页面 1.添加按钮 //核销 在控制层页面添加页面路径>添加操作按钮>window.allOrder ...
- php特殊用法
1.将字符串转换成可执行的php代码(简单的代码)--eval() <?php $str="echo phpinfo();"; echo eval( $str);
- linux终端常用快捷键
Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit:处理多行标准输入时也表示EOF ) Ctrl + h 退格删除一个字符,相当于 ...
- zookeeper系列之通信模型(转)
本文的主题就是讲解Zookeeper通信模型,本节将通过一个概要图来说明Zookeeper的通信模型. Zookeeper的通信架构 在Zookeeper整个系统中,有3中角色的服务,client.F ...
- 微信学习总结 09 解析接口中的消息创建时间CreateTime
1 消息的创建时间 网页超链接的作用以及如何在文本消息中使用网页超链接 2. 具体实现 刘峰博主的博文已经分析的很清楚了,直接去看就行了 .http://blog.csdn.net/lyq8479/a ...
- <!DOCTYPE html>作用
1.定义: DOCTYPE标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档. <!DOCTYPE> 声明 ...
- PostgreSQL Apt Repository
PostgreSQL Apt Repository If the version included in your version of Ubuntu is not the one you want, ...
- java 部分注解说明(待补充)
内容 所代表的意思 @RequestMapping(params = "save") @ResponseBody 将内容或对象作为http响应正文返回,并调用适合HttpMessa ...
- Maven+Spring MVC Spring Mybatis配置
环境: Eclipse Neon JDK1.8.0 Tomcat8.0 先决条件: Eclipse先用maven向导创建web工程.参见本站之前随笔. 本机安装完成mysql5:新建用户xuxy03设 ...