python學習一:使用者登入,python學慣用戶登入
使用者登入需求:
1,使用者名稱,密碼要儲存在檔案中。
2,使用者可以嘗試登入三次,三次之後賬戶鎖定,使用者鎖定資訊儲存在檔案中,使用者輸入正確重設鎖定資訊。
程式碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
username = [] #-----------------------------------------------
for line in open('user.txt'):
line=line.replace('\n','').split() #從user.txt檔案中取出使用者名稱,儲存到列表username中
username.append(line[0]) #-----------------------------------------------
password = [] #-----------------------------------------------
for line in open('user.txt'):
line=line.replace('\n','').split() #從user.txt檔案中取出密碼,儲存到列表password中
password.append(line[1]) #-----------------------------------------------
counter = [] #-----------------------------------------------
for line in open('user.txt'):
line=line.replace('\n','').split() #從user.txt檔案中取出使用者賬戶狀態,儲存到列表counter中
counter.append(line[2]) #-----------------------------------------------
new_counter = [] #-----------------------------------------------
for n in counter:
new_counter.append(int(n)) #將counter中的元素轉換成數值型字元
counter = new_counter #-----------------------------------------------
flag = True
while flag:
if min(counter) < 3: #判斷所有使用者的狀態,只要有使用者可登入,就允許程式運行
usname = input("請輸入使用者名稱:")
if usname in username: #如果輸入的使用者名稱在使用者列表中
p = username.index(usname) #確定輸入的使用者名稱在列表中的位置
while True:
if counter[p] < 3: #判斷所選使用者是否鎖定
psword = input("請輸入密碼:")
if psword == password[p]:
print("恭喜!使用者名稱,密碼輸入正確!")
counter[p] = 0 #-----------------------------------------------
newuser = open("user.txt",'w')
for i in range(len(username)): #使用者密碼輸入正確,重設使用者狀態,並寫入使用者檔案
newuser.write('%s %s %d\n' % (username[i],password[i],counter[i]))
newuser.close() #-----------------------------------------------
flag = False #將最外層迴圈的值置為假,用來退出最終迴圈
break #退出當前迴圈
else:
print("使用者名稱密碼錯誤......")
counter[p] += 1 #計數器自加1
newuser = open("user.txt",'w') #-----------------------------------------------
for i in range(len(username)): #將使用者錯誤次數寫入使用者檔案
newuser.write('%s %s %d\n' % (username[i],password[i],counter[i]))
newuser.close() #-----------------------------------------------
break
else:
print("此使用者被鎖定......") #判斷使用者狀態為鎖定後提示使用者已定
break
else:
print("無此使用者,請重新輸入") #使用者名稱輸入錯誤,提示使用者重新輸入
else:
print("所有使用者均已被鎖定,無法開啟程式......") #判斷所有使用者狀態均鎖定,程式退出
break
使用者檔案:
songyang sy123 0 #第一列為使用者名稱,第二列為密碼,第三列為使用者狀態
admin ad123 0
程式重要位置解釋:
1,
username = [] #建立一個名稱為username的空列表
for line in open('user.txt'): #遍曆user.txt檔案的每一行
line=line.replace('\n','').split() #將user.txt檔案中的每一行的所有值分別存入line的列表,replace()函數
#是將每行結尾的分行符號替換成空格,split()函數是以空格為標誌,將檔案的每一行分割成列表
username.append(line[0]) #將line列表中的第一個元素儲存到username列表中,形成使用者名稱列表
2,
newuser = open("user.txt",'w') #以寫方式開啟使用者檔案,此時檔案中的內容會被讀入記憶體,程式會刪除檔案內容
for i in range(len(username)): #程式檢測username列表有幾個元素,迴圈幾次
newuser.write('%s %s %d\n' % (username[i],password[i],counter[i])) #將所有列表username,password,counter的內容寫入到檔案中
newuser.close() #關閉檔案
程式運行錯誤釋義:
此為相應選擇,迴圈等語句後忘記加“:”導致
此為相應報錯行沒有縮排導致。