知识点:

1、读写文件

  (1)打开一个文件可以使用Python内置的open()函数,传入文件名和标示符

  (2)读写一个文件可以使用调用write()来写入文件,但是务必要调用 .close()来关闭文件

  (3)文件使用完毕后必须使用 .close()关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的

  (4)由于文件读写时都有可能产生IOError,一旦出错,后面的 .close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用with open() as 来自动帮我们调用close()

2、python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量

  • read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容
  • readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理
  • readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()

注意:这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,需要我们手动去掉

3、sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么这些代码还是会执行。捕获这个异常可以做一些额外的清理工作。0为正常退出,其他数值(1-127)为不正常退出,可抛异常事件供捕获

 

 

需求:输入用户名、密码,认证成功显示欢迎信息,输入错误三次后锁定用户

 

Readme:

  1、zh_file是存放用户id及密码的文件

  2、sd_file是存放被锁定的用户id的文档,默认为空

  3、程序会对zh_file里的合法用户id进行判断,若连续输入用户id错误达三次程序直接退出

  4、程序会输入对正确用户名后的密码进行判断,输入密码有3次机会,连续三次错误则会锁定用户id并且退出

 

流程图:

python excle close后提示占用_赋值

代码实现如下:

1 # zhonglixiansheng
 2 import sys                      #导入sys模块,让我们可以调用sys.exit()来退出程序
 3 username = input("请输入用户名:")  # 使用input 使用户输入并赋值给username变量
 4 password = input("请输入密码:")  # 使用input 使用户输入并赋值给password变量
 5 count = 0           #用户循环次数,初始值定义为0
 6 while count < 3:    #用户登录异常不超过3次就不断循环
 7     sd_file = open('H:\python_pycharm\sd.txt', 'r+')    #打开 sd.txt 文件,权限是读写,读取并赋值给sd_file变量;注意:这里不使用with open() as 是因为后面3次密码错误后要写入数据,所以不能自动关闭
 8     sd_list = sd_file.readlines()                       #使用.readlines()的方法逐行读取sd_file文件全部内容,并赋值给sd_list
 9     for sd_line in sd_list:         #使用for循环读取sd_file的内容
10         sd_line = sd_line.strip('\n')   #使用.strio()去掉换行符
11         if username == sd_line:   #判断用户输入的账号在sd_list文件中是否存在
12             print("用户%s已锁定!"%username)      #如果存在打印‘用户已锁定’
13             sd_file.close()                 #使用close()关闭sd_file文件
14             sys.exit(1)                               #调用.exit()来退出程序
15     with open('H:\python_pycharm\zh.txt', 'r') as zh_file:     #打开 zh.txt 文件,权限是可读,读取并赋值给sd_file变量,使用完毕后自动关闭文件
16         zh_lise = zh_file.readlines()                             #使用.readlines()的方法逐行读取zh_file文件全部内容,并赋值给zh_list
17     for zh_line in zh_lise:                             #使用for循环读取zh_file的内容
18         (user,passwd) = zh_line.strip('\n').split()     #分别获取账号和密码信息
19         if username == user:                        #判断账户是否在zh_file文件中是否存在
20             p = 0                               #输入密码的循环次数,初始值定义为0
21             while p < 3:                        #密码输入错误不超过3次就不断循环
22                 if password == passwd:          #判断密码是否一致
23                     print("用户%s登录成功" % username)    #密码一致打印用户登录成功
24                     sys.exit(0)                         #调用.exit()来退出程序
25                 else:
26                     if p != 2:              #p=2时,是最后一次机会,总共3次机会,分别是[0,1,2]
27                         password = input("密码错误,请重新输入,你还有%s次机会:"%(2-p))    #打印提示并重新输入密码
28                 p += 1                  #密码输入错误后,循环加1
29             else:
30                 sd_file.write('%s\n'%username)      #密码3次输入错误后,将账号写进sd_file文件
31                 print("用户%s已锁定!"%username)    #打印用户已锁定
32                 sd_file.close()               #使用close()关闭sd_file文件
33                 sys.exit(1)                         #调用.exit()来退出程序
34         else:
35             pass                            #当用户没匹配时,跳过并继续循环
36     else:
37         if count != 2:              #count=2时,是最后一次机会,总共3次机会,分别是[0,1,2]
38             username = input("用户名输入错误,请重新输入,你还有%s次机会:"%(2-count))       ##打印提示并重新输入账号
39     count += 1                  #账号输入错误后,循环加1
40 else:
41     print("用户名错误,已退出!")         #账号3次输入错误后,打印用户名错误
42     sys.exit(0)             #调用.exit()来退出程序

下面是zh.txt文件的内容: 

zhongli 123
man 123
girl 123

下面是sd.txt文件的内容:

zhongli