1. 程式人生 > 實用技巧 >一個簡單的註冊、登入程式

一個簡單的註冊、登入程式

#一個簡單的註冊。登入程式。已實現反射,使用者只需要輸入數字即可選擇功能。可保留註冊資訊。定義了一個只有退出功能的函式。
class User:
def __init__(self, name, pwd):
self.name = name
self.pwd = pwd
class Authentic:
def __init__(self):
self.userFile = "user.txt"
def user_exist(self): #將儲存使用者名稱密碼的檔案開啟,資訊儲存在生成器裡,便於後面使用:
# 1.註冊時驗證是否有同名的。2.登入時驗證使用者名稱、密碼。不需要傳參。
with open(self.userFile,"r",encoding="utf-8") as f:
for line in f:
line = line.strip()
line_new = line.split("#")
yield line_new
def register(self): #註冊功能
while True:
username=input('請輸入使用者名稱:')
for lst in list(self.user_exist()):
if lst[0]== username:
print('已有同名的,請重新輸入!')
return #如果輸入錯誤,就要退出重新選擇。如何只返回到
#“username=input('請輸入使用者名稱:')”這一行呢?
password=input('請輸入密碼:')
password2=input('請確認密碼:')
if password==password2:
user=User(username,password)
with open(self.userFile,"a",encoding="utf-8")as f:
temp = "\n" + username + "#" + password
#'\n'解決存入時不換行的問題。但有個缺點,txt檔案的第一行總是空行。
f.write(temp)
print('註冊成功,請轉人登入介面。')
return False
else:
print('你兩次輸入的密碼不一致,請重新輸入!')
def login(self):
username=input('請輸入使用者名稱:')
pwd=input('請輸入密碼:')
for lst in list(self.user_exist()):
if lst[0]== username and lst[1]==pwd:
print('登入成功!')
break
else:
print('使用者名稱或密碼錯誤,請檢查後重新輸入!')
def ex(self): #定義了只有退出功能的函式,使用者只需輸入'3',即可退出。
exit() #函式名不能是exit。
def run(self):
opt_lst= [['登入','login'],['註冊','register'],['退出','ex']]
#解決了中文字串與對應的函式名稱不一致的問題。
while True:
for index,item in enumerate(opt_lst,1):
#給列表設定索引,便於使用者輸入數字。
print(index,item[0],item[1])
num = int(input('請輸入您要操作的序號 :').strip())
for index,item in enumerate(opt_lst,1):
if num==index:
if hasattr(obj,item[1]): #此處必須反射物件(obj)中的函式。
if getattr(obj,item[1]):
getattr(obj,item[1])()
if __name__ == '__main__':
obj = Authentic()
obj.run()