#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