要求编写登录接口 : 1. 输入用户名和密码
2.认证成功后显示欢迎信息
3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序)
4.用户名正确,密码错误,提示密码错误,重新输入.(密码错误3次,锁定用户名并提示,退出程序)
readme
应用知识点:
一、文件的操作
open/文件操作
f=open('/tmp/hello','w')
#open(路径+文件名,读写模式)
#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式
如:'rb','wb','r+b'等等
读写模式的类型有:
- rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
- w 以写方式打开,
- a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
- r+ 以读写模式打开
- w+ 以读写模式打开 (参见 w )
- a+ 以读写模式打开 (参见 a )
- rb 以二进制读模式打开
- wb 以二进制写模式打开 (参见 w )
- ab 以二进制追加模式打开 (参见 a )
- rb+ 以二进制读写模式打开 (参见 r+ )
- wb+ 以二进制读写模式打开 (参见 w+ )
- ab+ 以二进制读写模式打开 (参见 a+ )
open对象常用的方法
- read():读取字节到字符串中
- readline():打开文件的一行,包括行结束符
- readline():打开文件,读取所有行
- write():将字符串写入文件,写入对象为字符串
- writelines():将列表写入文件,对象是列表。
- seek():偏移量
- tell():返回当前文件指针的位置
注意:
1、使用'W',文件若存在,首先要清空,然后(重新)创建,
2、使用'a'模式 ,把所有要写入文件的数据都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,将自动被创建。
下面是一个例子,创建一个新文件,然后写入字符串,如果写入字符为".",则写入结束,然后打印出文件内容。
1 #!/usr/bin/env python 2 import os 3 filename=raw_input("please input your filename:") 4 while True: 5 if os.path.exists(filename): 6 print "ERROR,the filename exists!" 7 else: 8 break 9 a=[] 10 while True: 11 line=raw_input(">") 12 if line==".": 13 break 14 else: 15 line=line+"\n" 16 a.append(line) 17 file=open(filename,"w+") 18 file.writelines(a) 19 file.close() 20 file1=open(filename,"r") 21 for i in file1: 22 print i.strip()
with语句 同时打开多个文件,还可以避免打开文件后忘记关闭,语法:
1 with open('file1', 'r', encoding='utf-8') as f , \ 2 open('file2', 'w', encoding='utf-8') as f_2 : 3 ...
本例中有2个文件,一个存用户名和密码,另一个存黑名单.在读取文件后怎样转变成python对象,然后对对象进行操作,是我遇到的第一个难点!
然后查了下资料,发现字符串split方法,可以把字符串,从逗号分隔符的地方断开,得到一个子字符串列表.这样一来,就可以对黑名单进行查找等操作了.
本例中有2个文件,一个存用户名和密码,另一个存黑名单.在读取文件后怎样转变成python对象,然后对对象进行操作,是我遇到的第一个难点!
然后查了下资料,发现字符串split方法,可以把字符串,从逗号分隔符的地方断开,得到一个子字符串列表.这样一来,就可以对黑名单进行查找等操作了.
1 ... 2 user_lis_bak = f.readline().split(',') 3 ...
Python 字典 setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。
1 dict.setdefault(key, default=None)
二,列表和字典
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
1 names = ['xiaoli',"xiaoming",'yuanlu']
通过下标访问列表中的元素,下标从0开始计数
1 >>> names[0] 2 'xiaoli' 3 >>> names[1] 4 'xiaoming' 5 >>> names[-1] 6 'yuanlu' 7 >>> names[-2] #还可以倒着取 8 'xiaoming'
字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
1 info = { 2 'xiaoli': "123456", 3 'xiaoming': "111111", 4 'yuanlu': "888888", 5 }
这里key是用户名,value是密码,一一对应,key是唯一的.
三,for loop 和 if...else
最简单的循环10次
1
2
3
4
5
6
|
#_*_coding:utf-8_*_
__author__
=
'Alex Li'
for
i
in
range
(
10
):
print
(
"loop:"
, i )
|
输出:
1
2
3
4
5
6
7
8
9
10
|
loop:
0
loop:
1
loop:
2
loop:
3
loop:
4
loop:
5
loop:
6
loop:
7
loop:
8
loop:
9
|
需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环
1
2
3
4
|
for
i
in
range
(
10
):
if
i<
5
:
continue
#不往下走了,直接进入下一次loop
print
(
"loop:"
, i )
|
需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1
2
3
4
|
for
i
in
range
(
10
):
if
i>
5
:
break
#不往下走了,直接跳出整个loop
print
(
"loop:"
, i )
|
有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。
海枯石烂代码
1
2
3
4
5
|
count
=
0
while
True
:
print
(
"你是风儿我是沙,缠缠绵绵到天涯..."
,count)
count
+
=
1
|
其实除了时间,没有什么是永恒的,死loop还是少写为好
上面的代码循环100次就退出吧
1
2
3
4
5
6
7
8
|
count
=
0
while
True
:
print
(
"你是风儿我是沙,缠缠绵绵到天涯..."
,count)
count
+
=
1
if
count
=
=
100
:
print
(
"去你妈的风和沙,你们这些脱了裤子是人,穿上裤子是鬼的臭男人.."
)
break
|
回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
my_age
=
28
count
=
0
while
count <
3
:
user_input
=
int
(
input
(
"input your guess num:"
))
if
user_input
=
=
my_age:
print
(
"Congratulations, you got it !"
)
break
elif
user_input < my_age:
print
(
"Oops,think bigger!"
)
else
:
print
(
"think smaller!"
)
count
+
=
1
#每次loop 计数器+1
else
:
print
(
"猜这么多次都不对,你个笨蛋."
)
|
user.txt
1 xixi 123456 2 haha 234567 3 bibi 345678 4 aiai 345678 5 didi 345678 6 men 345678
锁定文件:
lock_file.txt
1 xixi 2 bibi
代码文件:
1 username = input("请输入用户名:") 2 # 检查用户是否被锁住 3 lock_read = open("lock_file.txt","r") 4 for lock in lock_read: 5 lock_user = lock.strip() # 取出user里的用户信息 6 if username == lock_user: 7 print("你被锁住了") 8 break 9 else: 10 continue 11 lock_read.close() 12 13 if username != lock_user: 14 passworld = input("请输入密码:") 15 with open("user.txt") as user_info: 16 for user in user_info: 17 user_name = user.strip().split(" ")[0] 18 user_pass = user.strip().split(" ")[1] 19 print(user_name) 20 if username ==user_name: 21 print("登录成功。。") 22 else: 23 print("密码错误") 24 for count in range(0,2): 25 count = count + 1 26 passworld = input("请输入密码:") 27 if user_pass == passworld: 28 print("登录成功..") 29 break 30 else: 31 print("密码错误") 32 print(count) 33 if count == 2: 34 lock_write = open("lock_file.txt","a+") 35 lock_write.write("\n") 36 lock_write.write(username) 37 lock_write.close() 38 print('该用户已经被锁住,请联系管理员!!!') 39 break 40 if username != user_name: 41 print("该用户不存在")
初次学习,看老男孩视频,做了挺久的,还存在很多bug,需完善^_^...