chen-cheng

要求编写登录接口 : 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()
View Code

 

 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 #_*_coding:utf-8_*_
2 __author__ = 'Alex Li'
3  
4  
5 for i in range(10):
6     print("loop:", i )
View Code
输出
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9
还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1 for i in range(10):
2     if i>5:
3         continue #不往下走了,直接进入下一次loop
4     print(i)

  有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

海枯石烂代码

count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)

 

    count +=1

 

其实除了时间,没有什么是永恒的,死loop还是少写为好 

上面的代码循环100次就退出吧

 count = 0

while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1
    if count == 100:
        print("去你妈的风和沙,你们这些脱了裤子是人,穿上裤子是鬼的臭男人..")
账号文件

 user.txt

1 xixi 123456
2 haha 234567
3 bibi 345678
4 aiai 345678
5 didi 345678
6 men 345678
View Code

锁定文件:

 lock_file.txt

1 xixi
2 bibi
View Code

 

代码文件:

 

 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("该用户不存在")
View Code

 

 

初次学习,看老男孩视频,做了挺久的,还存在很多bug,需完善^_^...

 

 

 

 

最简单的循环10次

1
2
3
4
5
6
#_*_coding:utf-8_*_
__author__ = 'Alex Li'
 
 
for 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 in range(10):
    if i<5:
        continue #不往下走了,直接进入下一次loop
    print("loop:", i )

需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出

1
2
3
4
for in range(10):
    if i>5:
        break #不往下走了,直接跳出整个loop
    print("loop:", i )

相关文章: