路飞学城14天集训营作业1—登陆认证

作业一:登陆认证基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序

升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

初始版本:

 1 # -*- coding:utf-8 -*-
 2 # author: heimu
 3
 4 import os
 5
 6 user_dic = {"heimu_1":"111111","heimu_2":"222222","heimu_3":"333333"}
 7 lock_state = []
 8 count = 1
 9 if os.path.isfile("lock_state.txt"):
10     with open("lock_state.txt","r") as f:
11         lock_state = f.readline()
12 while count <= 3:
13     user_name_input = input("please input user name: ")
14     passwords_input = input("please input six digital passwords: ")
15     if user_name_input in lock_state:
16         print("Sorry,%s account has been locked" % user_name_input)
17         break
18     elif user_name_input in user_dic and user_dic[user_name_input] == passwords_input:
19         print("Welcome!%s" % user_name_input)
20         break
21     elif count < 3:
22         print("Authentication failure! Please input again.")
23     else:
24         print("You have failed three times,the program is going to exit !!!")
25         if user_name_input in user_dic:
26             with open("lock_state.txt","a") as f:
27                 f.write(user_name_input)
28     count+=1

经过大王的悉心教诲之后的版本

 1 # -*- coding:utf-8 -*-
 2 # author: heimu
 3
 4 import os
 5
 6 user_dic = {"heimu_1":"111111","heimu_2":"222222","heimu_3":"333333"}
 7 lock_state = []         # 存储黑名单
 8 count = 1
 9 first_input_user = None     # 记录第一次输入的账户名
10 is_same_user = True         # 标志位,用于判断三次输入的用户名是否相同
11
12 if os.path.isfile("lock_state.txt"):        # 如果文件存在则打开文件
13     with open("lock_state.txt","r") as f:   # 使用with语句,省去了每次得手动关闭文件
14         for line in f:                      # 迭代f文件,line循环一次表示一行
15             lock_state.append(line.strip()) # .strip 表示取出空格换行符之类的
16
17 # 主函数
18 while count <= 3:
19     user_name_input = input("please input user name: ")
20     passwords_input = input("please input six digital passwords: ")
21     if user_name_input in lock_state:       # 如果账户存在于黑名单,直接退出
22         exit("Sorry,%s account has been locked" % user_name_input)
23     if not first_input_user:                # 如果为None,代表为第一次输入账户
24         first_input_user = user_name_input
25     if first_input_user != user_name_input: # 代表本次输入的用户名和第一次用户名不一样
26         is_same_user = False                # 标志位设置为False,表示不再执行账户锁定操作
27     if user_name_input in user_dic and user_dic[user_name_input] == passwords_input:
28         print("Welcome!%s" % user_name_input)   # 登陆成功
29         break
30     else:
31         print("Authentication failure! Please input again.")    # 失败错误少于三次,打印认证失败语句
32     count+=1
33 else:
34     print("You have failed three times,the program is going to exit !!!")
35     if is_same_user:        # 锁定用户
36         if user_name_input in user_dic:     # 如果账户名存在于文件中,把账户名加入黑名单
37             print("%s账户已经锁定" % user_name_input)
38             with open("lock_state.txt","a") as f:
39                 f.write(user_name_input+‘\n‘)
40         else:
41             pass                            # 如果账户名不在文件中,就算重复三次也不加入黑名单

原文地址:https://www.cnblogs.com/heimu24/p/8541360.html

时间: 2024-09-30 09:03:02

路飞学城14天集训营作业1—登陆认证的相关文章

路飞学城-Python14天集训营-第二章

数据类型 整型 进制转换 >>> bin(10) #十进制转二进制 '0b1010' >>> oct(10) #十进制转八进制 '0o12' >>> hex(10) #十进制转十六进制 '0xa' 取余运算(%) >>> 5%2 1 >>> 16%3 1 >>> 15%5 0 算术运算(+ – * / // divmod **) >>> 2+3 #加 5 >>>

路飞学城-Python开发集训-第2章

学习心得: 笔记: print(bin(343)) #0b101010111   返回整数的二进制表示 python2默认支持的编码是ASCII python3默认支持的编码是UTF8 科学计数法: print(1.2395e8) #123950000.0 e8代表10的8次方,这个e换成大E也是OK的 浮点数:         浮点精确度问题: 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的而浮点数运算则可能会有四舍五入的误差. python默认的17位精度,也就是小数点后1

路飞学城-python开发集训-第1章

第一章节,因为之前看过,所有比较熟悉.首先是介绍了一下ALEX自己和他的50块钱的眼模.其实就是介绍了一下python语言的发展史. 然后就是讲了一些基础的概念,比如什么是变量,什么是常量. 编程语言的类型,比如解释型,比如编译型. 然后讲了一些数据类型,例如数字.字符串.布尔值等等. 最重要的就是讲了流程控制语句. 这贴几个自己敲的代码. 猜年龄小游戏. # __*__ coding: utf-8 __*__ __author__ = "David.z" my_age = 31 co

路飞学城-Python开发集训-第3章

三元运算: 三元运算又称三目运算,是对简单的条件语句的简写. #简单条件语句 if 条件成立: val=1 else: val=2 #改成三元运算 val=1 if 条件成立 else 2 小例子: a = 2 b = 5 val = a if a <b else b print(a) 原文地址:https://www.cnblogs.com/sq5288/p/9076275.html

我在路飞学城学python

人生苦短,我用python! 这句python的名言,给了我学习python的决心,一直一来,很想学好一门编程,无论是职业或是兴趣,我觉得有必要会,必须学会. 曾经以为python很简单,决定自学成才,找了很多python的博客.论坛.还有QQ群,看了不少别人的笔记.学习心得.分享的源代码,还买了相关教材书,可是,几年过去了,也只会看着实例写写代码,并不会独立的去实现想要的程序和功能. 不想再浪费太多的时间来自学了,需要有专业的老师来指导学习,于是,我先报名,参加了路飞学城,路飞学城14天集训营

Python开发入门14天集训营&#183;第1章Python基础语法-编写登陆认证程序

作业题目: 编写登陆认证程序 作业需求: 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里) 1 #!/usr/bin/env python 2 # -*- coding=utf-8 -*- 3 """ 4 @author:Wllen 5 @file:user_pass.py 6

路飞学城-python开发培训--第一章

1 语言介绍: 解释性语言,与Java编译性区别 2 发展史   略 3 安装 Win一路next, 配置环境变量 ,验证是否安装成功 4 变量及其变量作用,范围 1)命名: 以数字,字母和下划线组成. 2)不能以数字开头, 3)避免使用系统关键字 5交互 input 语句 name = input("what is your name ?") age = int(input("how old are you ?")) job = input ("what

1107: 零起点学算法14——三位数反转

1107: 零起点学算法14--三位数反转 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 4915  Accepted: 2378[Submit][Status][Web Board] Description 水题 Input 输入1个3位数(题目包含多组测试数据) Output 分离该3位数的百位.十位和个位,反转后输出(每组测试数据一行) Sample Input 250 Sample Out

KVM+Openstack+Ceph+Docker 云计算周末集训营

介绍 由3w教育发布,面向从事云计算的在职运维人员,或者想进入云计算领域的相关IT工作人员,或者是对云计算感兴趣的开发人员.<要求: 参加本课程需要学员具备熟练使用Linux操作系统6个月以上的经验> 分为12个节,周期为1.5个月:每周两节(周六和周日):小班制:结束后会下发产出文档和视频,供学生在课后复习和练习参考使用. 时间: 2016年2月27日 学习地点: 北辰泰岳大厦19层 地址: 北京市朝阳区北苑路北甲13号院(地铁5号线北苑路北A口出来,向北 100米) 资费: 6800元 联