
#setencoding=utf-8
#用戶名和密碼輸入正確,則登陸成功
#用戶名正確密碼錯誤,只再輸入密碼,有3次機會
#錯誤3次,則把用戶名放入lock中
import os,sys
#存放用戶名和密碼的文件是E:\python\user.txt
accounts_file = 'E:\\python\\user.txt'
#被鎖的用戶要寫入此文件
lock_file = 'E:\\python\\lock.txt'
#先讀出來放內存中,免得每次輸入用戶后進行判斷都要打開文件
user =file(accounts_file)
account_list=user.readlines()
user.close()
#控制是否退出while大循環的標識
loginSucess =False
#這里用的大while循環,所以用戶名輸不對,就會一直輸,如果想限制用戶名輸入次數,那么while改成for
while True:
#raw_input是一個內置函數,獲取用戶輸入,與用戶建立交互
#strip()是忽略空格
username = raw_input('username:').strip()
#先判斷用戶名是否存在,用戶名如果存在才繼續,如果不存在,直接跳出循環,結束
if len(username)!=0:
#用戶名如果不為空的時候,判斷是不是存在
for i in account_list:
#i讀到的是一行,而一行有2列,第1列就是索引為0的才是用戶名,第二列索引為1的是密碼
#split()方法是分隔符,默認是空格,
i = i.split()
if username==i[0]:#用戶名正確
#用戶名正確的時候,只給3次輸入密碼的機會
for x in range(3):
password = raw_input('password:').strip()
if password==i[1]:
loginSucess=True#如果為True的時候,直接走上上級for下的if,歡迎完就退出
break
#如果密碼錯誤
#如果匹配正確或循環中有break就退出,,else不執行
else:
print '%s ,你已經輸入錯誤密碼3次了,going to lock ' %username
l = file(lock_file,'a')
l.write(username+'\n')
l.close()
view = file(lock_file)
print view.read()
if loginSucess is True:
print '登陸成功,welcome to my system!!!'
break #登陸成功就直接跳出while大循環
elif loginSucess is False: #這種是用戶名輸入錯誤,它的節點在用戶不為空的條件之下 ,這里不能用break,不能跳出while大循環,因為我要你一直輸,直到成功
print '用戶名輸入錯誤,請重新輸入。'
else: #用戶名也正確,輸入密碼不正確3次
print '%s,sorry ,輸入密碼3次錯誤你已被鎖' % username
break
else:#用戶名輸入為空的時候
continue