老男孩Day1作業(一):編寫登錄接口

要求:編寫登錄接口

1. 輸入用戶名和密碼

2. 認證成功后顯示歡迎信息

3. 輸錯三次后鎖定


?1)編寫思路

編寫思路參考下面GitHub鏈接中的流程圖

https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作業/Day1_作業_登錄接口流程圖.png


?2)具體實現

 1 # -*- coding:utf-8 -*-
 2 
 3 # Author:Chuixin Zeng
 4 
 5 # 字典和列表的區別:列表是有順序的,使用索引訪問;而字典中的條目是用鍵來訪問的
 6 
 7 # 初始化空字典
 8 _user_dict = {}
 9 # 初始化空列表list,有了空的列表之后,程序就可以向這個列表中增加元素
10 _user_list = []
11 # 初始化登錄不存在用戶名的初始值為0
12 _login_error_count = 0
13 
14 # 使用while開始無限制的循環
15 while True:
16     # 交互式輸入登錄用戶名和密碼
17     _user_naming = input("Pls input your username:")
18     _user_password = input("Pls input your password:")
19     # 讀取用戶登錄數據文件UserPassword.txt
20     _users_data = open('UserPassword.txt')
21     # 循環遍歷打開的數據,對打開的數據進行格式化操作,然后把格式化以后的數據保存到創建好的_user_dict字典當中
22     for user_data in _users_data:
23         # 使用strip去除user_data數據行中的前后空格
24         _user_list = user_data.strip()
25         # 將去除前后空格之后的數據行_user_list使用逗號進行分割,并重新保存到_user_datas中
26         _user_datas = _user_list.split(',')
27         # 將_user_datas數據行中的第0個位置的數據(即用戶名),去除前后空格后,賦給新的變量_user_name
28         _user_name = _user_datas[0].strip()
29         # 將_user_datas數據行中的第1個位置的數據(即密碼),去除前后空格后,賦給新的變量_user_pass
30         _user_pass = _user_datas[1].strip()
31         # 將_user_datas數據行中的第2個位置的數據(即鎖定狀態,0代表未鎖定,1代表鎖定),去除前后空格后,賦給新的變量_user_locked
32         _user_locked = _user_datas[2].strip()
33         # 將_user_datas數據行中的第3個位置的數據(即密碼輸入錯誤次數),去除前后空格后,賦給新的變量_user_error_count
34         # 將_user_datas[3]的數據類型強制轉換為int
35         _user_error_count = int(_user_datas[3].strip())
36         # 將前面定義好的變量信息,保存到字典中,為前面的值指定鍵名,即鍵:值對應的關系,鍵名可以隨便起,建議考慮易讀性
37         # 如果下面的鍵名出線下劃波浪線,并不代表有語法錯誤,而是編輯器認為拼寫的英文不是正確的英文單詞,不影響腳本執行
38         # 按照Python的編程規范,在逗號和冒號后面需要加一個空格
39         _user_dict[_user_name] = {'name': _user_name, 'password': _user_pass,
40                                   'locked': _user_locked, 'errorcount': _user_error_count}
41 
42     # 關閉打開的UserPassword.txt文件
43     _users_data.close()
44 
45     # 判斷用戶賬戶是否已經被鎖定,將前面交互界面輸入的用戶名和字典里保存的用戶名列進行匹配
46     # 將前面交互式輸入的用戶名和字典中的userlocked鍵進行匹配,如果用戶名對應的鍵為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         # 將前面輸入的用戶名、密碼和字典中的用戶名、密碼進行匹配,如果成功,則輸出登錄系統,然后退出
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             # 如果用戶名在字典里,但是密碼不對,將前面輸入的用戶名所對應字典中的錯誤次數進行自增
57             _user_dict[_user_naming]['errorcount'] += 1
58             # 如果用戶名輸入正確的情況下,密碼輸入錯誤的次數小于3次,給用戶重新嘗試的機會
59             if _user_dict[_user_naming]['errorcount'] < 3:
60                 print("The password was wrong,pls try again,your have three chance!")
61                 # 追加寫入新的數據到UserPassword.txt,其中的errorcount會隨著失敗嘗試次數的增加而增加,三次就是2,即0,1,2
62                 _write_data = open('UserPassword.txt', 'w+')
63                 # 將字典里面的值取到_user_value中,進行循環遍歷
64                 for _user_value in _user_dict.values():
65                     # 往腳本開頭定義好的空列表里面逐行寫入數據
66                     _user_list = [_user_value['name'], _user_value['password'], str(_user_value['locked']),
67                                   str(_user_value['errorcount'])]
68                     # 將寫入到_user_list的數據再次進行格式化后賦給_users_list
69                     _users_list = ','.join(_user_list)
70                     # 將_users_list中的數據寫入到UserPassword.txt中,并在每一行數據的結尾進行換行
71                     _write_data.write(_users_list + '\n')
72                 # 關閉UserPassword.txt文檔
73                 _write_data.close()
74 
75             else:
76                 # 如果密碼不正確的次數已經超過3次,就輸出賬戶被鎖定
77                 print("You try three times,Account locked")
78                 # 輸出賬戶鎖定的同時,將字典中locked鍵的值設置為1,這個地方改成1,前面判斷Locked狀態的IF才生效
79                 _user_dict[_user_naming]['locked'] = 1
80                 # 賬戶設置為鎖定之后,將用戶對應的錯誤密碼次數清零,我理解的是鎖定屬性為1了,錯誤次數可以清零
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         # 程序開頭設置了初始化不存在用戶名的值為0,這里進行自增
96         _login_error_count += 1
97         # 如果不存在的用戶嘗試次數超過3次,則中斷程序
98         if _login_error_count > 2:
99             break

?3)Github筆記

第一天的筆記的地址是:

https://github.com/ChuixinZeng/PythonStudyCode/tree/master/PythonCode-OldBoy/Day1/隨堂練習

第一天作業的地址是:

https://github.com/ChuixinZeng/PythonStudyCode/tree/master/PythonCode-OldBoy/Day1/作業


?4)Readme.md文檔

https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作業/Readme_登陸接口.md

轉載于:https://www.cnblogs.com/ChuixinZeng/p/JamieZeng_Day1.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254065.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hashcat源碼分析1

typedef struct hash{void *digest;salt_t *salt;void *esalt;void *hook_salt; // additional salt info only used by the hook (host)int cracked;hashinfo_t *hash_info;char *pw_buf;int pw_len;} hash_t;一.1. 信號 函數&a…

Davinci及U-boot的一些介紹

TI推出的數字多媒體平臺DM系列&#xff0c;集成了ARM與DSP雙核處理器&#xff1a;DSP處理器運行DSP/BIOS操作系統&#xff0c;負責音視頻編解碼算法以及其他圖形處理算法&#xff1b;ARM處理器運行MontaVista Linux操作系統&#xff0c;負責設備初始化、用戶圖形界面管理。ARM處…

像素越多越好?像元的面積越小越好?為何底大一級壓死人?

像素越多越好&#xff1f;像素點的面積越小越好&#xff1f;為何底大一級壓死人&#xff1f; 像素是&#xff1a;圖像最小單元的數量&#xff0c;例如6000*4000&#xff0c;像素數量就是24*10^6。 像素太少當然圖像就看不見了&#xff0c;看不清晰了。 但是現在幾乎所有手機和相…

設計模式(5)--工廠模式

//5.工廠模式 //ver1 //回顧簡單工廠模式 class OperationFactory { public:static Operation createOperation(char chOper){Operation * op NULL;switch(chOper){case :op new OperationAdd();break;case -:op new OperationSub();break;default:break;}return *op;} };vo…

對于多屬性類型系統的數據庫設計

主要是以下幾類系統: 生活信息系統, 內容:小, 屬性:大,電商商品系統, 內容:大, 屬性:大,風控征信系統, 內容:小, 屬性:大,新聞系統, 內容:大, 屬性:小,這些系統共同的特點, 都是在主體內容上會攜帶多個屬性, 并且屬性需要隨時能調整, 并且要求能兼容舊屬性, 還需要頻繁的通過屬…

linux環境部署常用命令

1.  查看當前所屬目錄&#xff1a;pwd2.  回到上級目錄&#xff1a;cd ../回到上兩級目錄&#xff1a;cd ../ ../3.  查看當前目錄下有哪些文件&#xff1a;ls4.  查看最后100行日志&#xff1a;tail -100 catalina.out動態重看操作日志&#xff1a;tail -f catalina.o…

DM6446開發攻略:V4L2視頻驅動和應用分析

針對DAVINCI DM6446平臺&#xff0c;網絡上也有很多網友寫了V4L2的驅動&#xff0c;但只是解析Montavistalinux-2.6.10 V4L2的原理、結構和函數&#xff0c;深度不夠。本文決定把Montavista 的Linux-2.6.18 V4L2好好分析一下&#xff0c;順便講解在產品中的應用&#xff0c;滿足…

相機像素尺寸(像元大小)和成像系統分辨率之間的關系

相機像素尺寸&#xff08;像元大小&#xff09;和成像系統分辨率之間的關系 在顯微成像系統中&#xff0c;常常會用分辨率來評價其成像能力的好壞。這里的分辨率通常是指光學系統的極限分辨率以及成像探測器的圖像分辨率。最終圖像所呈現出的實際分辨率&#xff0c;取決于二者的…

H5網頁播放器播不了服務器上的mp4視頻文件

打開IIS&#xff0c;在功能視圖里找到MIME類型菜單&#xff0c;打開該菜單后鼠標右鍵添加.mp4擴展名的MIME類型video/mp4 其他視頻文件播放不了估計也得在IIS里添加對應的MIME類型&#xff08;從服務器下載文件時也得添加對應的MIME類型&#xff09; 轉載于:https://www.cnblog…

不定寬度居中

一、傳統方法 <div class"wrap"><div class"inner">html &#xff1a; 讓 inner 居中</div> </div> .wrap {float: left; /* 自適應內容寬度 */position: relative;left: 50%; } .inner {position: relative;left: -50%; } 二、…

文章目錄自動生成器

提供一個插件&#xff0c;可以實現segmentfault的文章目錄效果啦~~ 不止點擊跳轉還滾動激活當前鏈接 demo地址 使用很簡單 <!-- 文章容器 --> <div id"kCatelog"></div> <!-- 目錄容器 --> <div class"k-catelog-list" id"…

基于ARM+DSP進行應用開發-經驗共享

針對當前應用的復雜性&#xff0c;SOC芯片更好能能滿足應用和媒體的需求&#xff0c;集成眾多接口&#xff0c;用ARM做為應用處理器進行多樣化的應用開發和用戶界面和接口&#xff0c;利用DSP進行算法加速&#xff0c;特別是媒體的編解碼算法加速&#xff0c;既能夠保持算法的靈…

工業相機之全局曝光與卷簾曝光

曝光方式包括兩種&#xff1a; 全局曝光&#xff08;global shutter&#xff09;卷簾曝光&#xff08;rolling shutter&#xff09; CCD相機都是全局曝光&#xff0c;CMOS相機既有全局曝光也有卷簾曝光 全局曝光 全局曝光的方式比較簡單。也就是說光圈打開后&#xff0c;整個圖…

Hibernate入門注解筆記

Entity 代表實體 映射一張表 Table 定義表的屬性 Embeddable 定義類級別可以被嵌入 Id 指定主鍵 GeneratedValue 指定主鍵生成策略 Column指定列級別的屬性 Embedded 指定屬性為被包含類 將被包含類 作為 包含類的 字段屬性 寫入同一張表 EmbeddedId 指定包含類為特定主鍵 實…

.NET 環境中使用RabbitMQ

在企業應用系統領域&#xff0c;會面對不同系統之間的通信、集成與整合&#xff0c;尤其當面臨異構系統時&#xff0c;這種分布式的調用與通信變得越發重要。其次&#xff0c;系統中一般會有很多對實時性要求不高的但是執行起來比較較耗時的地方&#xff0c;比如發送短信&#…

css3 pointer-events:none 允許點擊穿透

開發時加了蒙層&#xff0c;卻可以點擊到蒙層下邊的元素。查了以后才發現是 pointer-events:none屬性具有允許點擊穿透的功能&#xff0c;將其設為 pointer-events:auto就好使了。事件穿透讓我想起了zepto.js中的tap事件同樣會引發事件穿透的效果。如果用tap事件是為了提升響應…

成像質量、像素個數、感光元件尺寸的關系

成像質量、像素個數、感光元件尺寸的關系 感光元件 (影像傳感器) 就是拍攝的照片最終成像的位置。相當于傳統相機里面的膠卷&#xff0c;不同相機的感光元件尺寸是不一樣的。 1. 像素的含義 兩個 100 平方米的房子 A 和 B&#xff0c;A 房子里面平均分成 10 個房間&#xff…

setjmp與logjmp用法總結

setjmp/logjmp的最大用途是錯誤恢復&#xff0c;只要還沒有從主函數退出&#xff0c;一旦發現一個不可恢復的錯誤&#xff0c;可以把主控制轉移大主函數循環&#xff0c;并從那從新開始。使用時必須包含頭文件<setjmp.h> setjmp與longjmp結合使用時&#xff0c;它們必須…

JQ對象到底是什么

jQuery對象是什么&#xff0c;舉個例子&#xff0c;$(#id) 返回的就是jQuery對象&#xff0c;這個東西是整個jQuery的核心所在&#xff0c;所以我先來分析它。 var jQuery function( selector, context ) { // The jQuery object is actually just the init constructor enhan…

15、iOS開發之duplicate symbols for architecture x86_64錯誤

1. 錯誤提示 2. 分析錯誤原因 3. 解決問題辦法 一、錯誤提示 在我們寫代碼過程中可能會經常遇到這樣一個錯誤&#xff1a; [objc] view plaincopy print?<span style"font-size:32px;color:#ff0000;">ld: 4 duplicate symbols for architecture x86_64 clang…