1. 程式人生 > >python-編寫認證登錄

python-編寫認證登錄

-- 次循環 inf user_list readme img r+ 程序 通過

readme

(1)作業名稱:編寫認證登錄
(2)作者:wenjie
(3)作業需求:
讓用戶輸入用戶名密碼
認證成功後顯示歡迎信息
輸錯三次後退出程序
升級需求:
可以支持多個用戶登錄 (提示,通過列表存多個賬戶信息)
用戶3次認證失敗後,退出程序,再次啟動程序嘗試登錄時,還是鎖定狀態(提示:需把用戶鎖定的狀態存到文件裏)
(4)測試:
環境:pycharm + win10
1、輸入lockfile鎖定文件中的laowang,結果:提示用戶已鎖定
2、使用userfile中正確的用戶名密碼-->故意輸錯三次(鎖定)-->
重新輸入正確的用戶名密碼(提示用戶登錄,打印當前用戶列表
並是否繼續使用其他用戶登錄)-->輸入已登錄用戶(提示已登錄,
退出)-->輸入新的用戶(正確輸入,打印用戶列表)。。。

流程圖

技術分享圖片

代碼:

#!/usr/bin/env python
#coding=utf-8
import sys,getpass
i= 0
userfile_list = [] #定義一個空列表,用來存放(用戶名+密碼)
users_list = [] #定義一個空列表,用來存放已登錄的用戶
while i < 3:
# 獲取用戶名
print(‘=‘*20)
username = input("請輸入用戶名:").strip()
# 判斷用戶是否被鎖定
with open(‘lockfile‘,‘r‘) as lock_f: #打開lock文件,並賦予可讀寫權限
lock_list = lock_f.readlines() #readlines()逐行讀取全部內容
for lock_name in lock_list: #遍歷lock_list,如果用戶名在,則提示鎖定
lock_name = lock_name.strip(‘\n‘) #去除每行內容的換行符
if lock_name == username:
print("用戶已經鎖定,無法登錄!")
sys.exit(1)
# 判斷用戶是否已登錄
if username in users_list:
print("用戶%s已登錄,請勿重復!"%username)
sys.exit(1)
# 獲取密碼
print(‘=‘*20)
password = getpass.getpass("請輸入密碼:").strip()
with open(‘userfile‘,‘r‘) as user_f: #打開userfile,賦予讀權限
user_list = user_f.readlines()
for user_line in user_list:
(user,passwd) = user_line.strip(‘\n‘).split()
userfile_list.append(user+passwd) #將每個用戶密碼存入userfile_list
user_input = username + password
#判斷用戶名密碼
if user_input in userfile_list: #比較用戶輸入的用戶名密碼是否在userfile_list內
print("==========歡迎%s登錄!=========="%username)
users_list.append(username)
print("當前登錄的用戶有:")
for temp,j in enumerate(users_list,1):#打印當前登錄的用戶
print("%s. %s"%(temp,j))
choice = input("是否繼續使用其他用戶登錄?(繼續輸入:‘Y’or‘y’;輸入其他退出):")
if choice == ‘y‘ or choice == ‘Y‘:
i = 0 #如果選擇y或者Y,重置i為0,並結束本次循環
continue
else:
sys.exit(0)
else:
print("用戶名或者密碼錯誤請重新輸入,您還有%d次輸入機會"%(2-i))
i += 1
else:
with open(‘lockfile‘,‘a‘) as lock_f: #打開lockfile賦予追加權限
lock_f.write(username+‘\n‘)
sys.exit("您已輸錯三次,最後一次輸入的用戶已鎖定")

python-編寫認證登錄