首页 > 代码库 > homework(1)--for user log in

homework(1)--for user log in

前提:

  根据文本中的已有用户和密码,实现登陆的交互;在用户输入用户名后,会有一个检测用户是否被锁定的环节;如果用户三次密码输入错误,则该用户则会被添加到锁定文件中,无法登陆。

涉及到的知识点:

1.python对于文件的操作

f = open("lock","r+")

关于内建函数open()
open(name[, mode[, buffering]])
mode的常用值包括:r读文件(默认);w写文件(如果文件存在则截断之,如果文件不存在则自动创建文件);
a追加(在文件的末行追加字符)。在打开二进制文件的时候,要以二进制模式打开文件,把b添加到mode值,
这样可以增强可移植性。(在不区分二进制文件和文本文件的系统上,附加b仍然时有用的,它可以起到文档的目的。) 可选的buffering参数指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;{这一块需要实验进行测试,暂时未完全明白} 模式r+w+a+打开文件以便更新(同时读写)。注意w+会截断文件。
在区分文本文件和二进制文件的系统上,在模式中附加b会以二进制模式打开文件;在不区分的系统上,添加b没有效果。

#读取文件的几种方式: 

>>> f = open("lock","r+")
>>> f.read()
wurui   asdf\n   asjdfk\tafsf\n  fas\t\tfas  \n    999666\n\t 
>>> f.read()
‘‘
#文件读取完毕之后,再次读取就是空字符串,输出的是一个大的字符串。
>>> f.readline()
wurui   asdf\n
#输出的是文本中一行的内容,以\n为一个字符串的结尾,如果持续执行该命令,会依次输出文本中的每一行的内容,当读到最后,则输出为空。
>>> f.readlines()
[wurui   asdf\n,    asjdfk\tafsf\n,   fas\t\tfas  \n,     999666\n, 123]
#该方法是将文本中的所有内容当作一个列表,每一行的内容则是列表中的每个元素,并且每个元素都是字符串的形式。
#关于seek()简单的提一下:
>>> f.readlines()
[wurui   asdf\n,    asjdfk\tafsf\n,   fas\t\tfas  \n,     999666\n, 123]
>>> f.readlines()
[]
>>> f.seek(0)
0
>>> f.readlines()
[wurui   asdf\n,    asjdfk\tafsf\n,   fas\t\tfas  \n,     999666\n, 123]

以上对文件的读取操作,如果读到了文件的最后一行,下次继续读取都会出现空字符串的现象;需要使用f.close()方法,然后重新读取文件(或者直接使用f.seek(0)也可以直接重新读取文件 )。并且程序中 每次对文件操作完成之后,都需要试用f.close()关闭文件,以释放内存。

方便起见,python中出现了如下便捷操作:

>>> with open(workfile, r) as f:
...     read_data = f.read()
>>> f.closed
True
#该方法省去了f.closed(), 并且比try...finally更短。

 

2.字符串的定性处理

  此处要考虑的是如何将一个读取出来的字符串,进行去除 \n和 空格的处理,并生成一个列表。

string.strip(self, chars=None)   

作用:将字符串进行指定的切除;

使用说明:返回删除前导和尾随字符的字符串的副本,若chars未指定,则默认为空格(去除两端空格部分)。

返回字符串中的单词列表,使用sep作为分隔符字符串。如果给出maxsplit,则至多拆分maxsplit次(因此,列表中将最多有maxsplit+1个元素)。如果没有指定maxsplit或为-1,那么分割的数量没有限制(进行所有可能的分割)。[若想切除\n则要指定chars]

split(self, sep=None, maxsplit=-1)

作用:将字符串分割,然后分割后的各个部分作为字符串所生成的列表元素。

使用说明:sep指定分割对象。如果sep未指定,则连续的空格被视为一个单一的分隔符,分割后的各列表元素则将自动切除空格(不包括\t和\n)。

 

3. for ...  else 语句

  程序运行时,如果for循环体内,并没有执行到break,exit(),return或异常语句, 则继续执行 else中的语句; 如果没有else语句,则不管for循环是否正常执行完循环体,都会执行for语句下边的语句。

 

homework(1)--for user log in