学习python登录demo

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

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

海枯石烂代码

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
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,需完善^_^...

转载于:https://www.cnblogs.com/chen-cheng/p/8038795.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值