老男孩Day1作业(一):编写登录接口
要求:編寫登錄接口
1. 輸入用戶名和密碼
2. 認(rèn)證成功后顯示歡迎信息
3. 輸錯三次后鎖定
?1)編寫思路
編寫思路參考下面GitHub鏈接中的流程圖
https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作業(yè)/Day1_作業(yè)_登錄接口流程圖.png
?2)具體實現(xiàn)
1 # -*- coding:utf-8 -*- 2 3 # Author:Chuixin Zeng 4 5 # 字典和列表的區(qū)別:列表是有順序的,使用索引訪問;而字典中的條目是用鍵來訪問的 6 7 # 初始化空字典 8 _user_dict = {} 9 # 初始化空列表list,有了空的列表之后,程序就可以向這個列表中增加元素 10 _user_list = [] 11 # 初始化登錄不存在用戶名的初始值為0 12 _login_error_count = 0 13 14 # 使用while開始無限制的循環(huán) 15 while True: 16 # 交互式輸入登錄用戶名和密碼 17 _user_naming = input("Pls input your username:") 18 _user_password = input("Pls input your password:") 19 # 讀取用戶登錄數(shù)據(jù)文件UserPassword.txt 20 _users_data = open('UserPassword.txt') 21 # 循環(huán)遍歷打開的數(shù)據(jù),對打開的數(shù)據(jù)進(jìn)行格式化操作,然后把格式化以后的數(shù)據(jù)保存到創(chuàng)建好的_user_dict字典當(dāng)中 22 for user_data in _users_data: 23 # 使用strip去除user_data數(shù)據(jù)行中的前后空格 24 _user_list = user_data.strip() 25 # 將去除前后空格之后的數(shù)據(jù)行_user_list使用逗號進(jìn)行分割,并重新保存到_user_datas中 26 _user_datas = _user_list.split(',') 27 # 將_user_datas數(shù)據(jù)行中的第0個位置的數(shù)據(jù)(即用戶名),去除前后空格后,賦給新的變量_user_name 28 _user_name = _user_datas[0].strip() 29 # 將_user_datas數(shù)據(jù)行中的第1個位置的數(shù)據(jù)(即密碼),去除前后空格后,賦給新的變量_user_pass 30 _user_pass = _user_datas[1].strip() 31 # 將_user_datas數(shù)據(jù)行中的第2個位置的數(shù)據(jù)(即鎖定狀態(tài),0代表未鎖定,1代表鎖定),去除前后空格后,賦給新的變量_user_locked 32 _user_locked = _user_datas[2].strip() 33 # 將_user_datas數(shù)據(jù)行中的第3個位置的數(shù)據(jù)(即密碼輸入錯誤次數(shù)),去除前后空格后,賦給新的變量_user_error_count 34 # 將_user_datas[3]的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換為int 35 _user_error_count = int(_user_datas[3].strip()) 36 # 將前面定義好的變量信息,保存到字典中,為前面的值指定鍵名,即鍵:值對應(yīng)的關(guān)系,鍵名可以隨便起,建議考慮易讀性 37 # 如果下面的鍵名出線下劃波浪線,并不代表有語法錯誤,而是編輯器認(rèn)為拼寫的英文不是正確的英文單詞,不影響腳本執(zhí)行 38 # 按照Python的編程規(guī)范,在逗號和冒號后面需要加一個空格 39 _user_dict[_user_name] = {'name': _user_name, 'password': _user_pass, 40 'locked': _user_locked, 'errorcount': _user_error_count} 41 42 # 關(guān)閉打開的UserPassword.txt文件 43 _users_data.close() 44 45 # 判斷用戶賬戶是否已經(jīng)被鎖定,將前面交互界面輸入的用戶名和字典里保存的用戶名列進(jìn)行匹配 46 # 將前面交互式輸入的用戶名和字典中的userlocked鍵進(jìn)行匹配,如果用戶名對應(yīng)的鍵為1,就是被鎖定了,退出登錄 47 if _user_naming in _user_dict.keys(): 48 if _user_dict[_user_naming]['locked'] == '1': 49 print("The account was locked,pls contact administrator!") 50 break 51 # 將前面輸入的用戶名、密碼和字典中的用戶名、密碼進(jìn)行匹配,如果成功,則輸出登錄系統(tǒng),然后退出 52 if _user_naming == _user_dict[_user_naming]['name'] and _user_password == _user_dict[_user_naming]['password']: 53 print("Welcome to System!") 54 break 55 else: 56 # 如果用戶名在字典里,但是密碼不對,將前面輸入的用戶名所對應(yīng)字典中的錯誤次數(shù)進(jìn)行自增 57 _user_dict[_user_naming]['errorcount'] += 1 58 # 如果用戶名輸入正確的情況下,密碼輸入錯誤的次數(shù)小于3次,給用戶重新嘗試的機(jī)會 59 if _user_dict[_user_naming]['errorcount'] < 3: 60 print("The password was wrong,pls try again,your have three chance!") 61 # 追加寫入新的數(shù)據(jù)到UserPassword.txt,其中的errorcount會隨著失敗嘗試次數(shù)的增加而增加,三次就是2,即0,1,2 62 _write_data = open('UserPassword.txt', 'w+') 63 # 將字典里面的值取到_user_value中,進(jìn)行循環(huán)遍歷 64 for _user_value in _user_dict.values(): 65 # 往腳本開頭定義好的空列表里面逐行寫入數(shù)據(jù) 66 _user_list = [_user_value['name'], _user_value['password'], str(_user_value['locked']), 67 str(_user_value['errorcount'])] 68 # 將寫入到_user_list的數(shù)據(jù)再次進(jìn)行格式化后賦給_users_list 69 _users_list = ','.join(_user_list) 70 # 將_users_list中的數(shù)據(jù)寫入到UserPassword.txt中,并在每一行數(shù)據(jù)的結(jié)尾進(jìn)行換行 71 _write_data.write(_users_list + '\n') 72 # 關(guān)閉UserPassword.txt文檔 73 _write_data.close() 74 75 else: 76 # 如果密碼不正確的次數(shù)已經(jīng)超過3次,就輸出賬戶被鎖定 77 print("You try three times,Account locked") 78 # 輸出賬戶鎖定的同時,將字典中l(wèi)ocked鍵的值設(shè)置為1,這個地方改成1,前面判斷Locked狀態(tài)的IF才生效 79 _user_dict[_user_naming]['locked'] = 1 80 # 賬戶設(shè)置為鎖定之后,將用戶對應(yīng)的錯誤密碼次數(shù)清零,我理解的是鎖定屬性為1了,錯誤次數(shù)可以清零 81 _user_dict[_user_naming]['errorcount'] = 0 82 _write_data = open('UserPassword.txt', 'w+') 83 for _user_value in _user_dict.values(): 84 _user_list = [_user_value['name'], _user_value['password'], str(_user_value['locked']), 85 str(_user_value['errorcount'])] 86 _users_list = ','.join(_user_list) 87 _write_data.write(_users_list + '\n') 88 _write_data.close() 89 break 90 91 92 else: 93 # 如果用戶名不存在,則輸出信息 94 print("Pls ensure input currect account or password,you can try three times!") 95 # 程序開頭設(shè)置了初始化不存在用戶名的值為0,這里進(jìn)行自增 96 _login_error_count += 1 97 # 如果不存在的用戶嘗試次數(shù)超過3次,則中斷程序 98 if _login_error_count > 2: 99 break?3)Github筆記
第一天的筆記的地址是:
https://github.com/ChuixinZeng/PythonStudyCode/tree/master/PythonCode-OldBoy/Day1/隨堂練習(xí)
第一天作業(yè)的地址是:
https://github.com/ChuixinZeng/PythonStudyCode/tree/master/PythonCode-OldBoy/Day1/作業(yè)
?4)Readme.md文檔
https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作業(yè)/Readme_登陸接口.md
轉(zhuǎn)載于:https://www.cnblogs.com/ChuixinZeng/p/JamieZeng_Day1.html
總結(jié)
以上是生活随笔為你收集整理的老男孩Day1作业(一):编写登录接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名词解释(容器、并发,插件,脚本)及程序
- 下一篇: 不定宽度居中