1. 使用者輸入帳号密碼進行登陸
2. 使用者資訊儲存在檔案内
3. 使用者密碼輸入錯誤三次後鎖定使用者
1)輸入時使用者名後,先判斷使用者名是否被鎖,然後檢查使用者名是否存在使用者資料庫;
2)輸入相同不存在使用者名3次,此使用者名被鎖;
3)輸入使用者名存在時才可輸入密碼,相同使用者名時,輸入密碼錯誤三次,此使用者名被鎖;
4)若每次都沒輸入存在的使用者,則再次要求輸入使用者,直到達到總輸入次數;
<a href="http://s5.51cto.com/wyfs02/M01/89/33/wKioL1gMPYDC8XOrAAHI3_mcZTE285.jpg" target="_blank"></a>
<code>cat</code> <code>user_login.py </code><code>#主程式</code>
<code>#!#!/usr/bin/env python</code>
<code>#_*_coding:utf-8_*_</code>
<code>'''</code>
<code> </code><code>* Created on 2016/10/10 22:13.</code>
<code> </code><code>* @author: Chinge_Yang.</code>
<code>import</code> <code>os</code>
<code>import</code> <code>getpass</code>
<code>retry_max </code><code>=</code> <code>3</code>
<code>retry_count </code><code>=</code> <code>0</code>
<code>user_file </code><code>=</code> <code>"user.txt"</code>
<code>lock_file </code><code>=</code> <code>"user_lock.txt"</code>
<code>user_same </code><code>=</code> <code>0</code>
<code>user_tmp </code><code>=</code> <code>""</code>
<code>if</code> <code>not</code> <code>os.path.exists(lock_file): </code><code>#不存在時,則建立</code>
<code> </code><code>f </code><code>=</code> <code>open</code><code>(lock_file,</code><code>'w'</code><code>)</code>
<code> </code><code>f.close()</code>
<code>while</code> <code>retry_count < retry_max:</code>
<code> </code><code>#輸入使用者名</code>
<code> </code><code>user_name </code><code>=</code> <code>input</code><code>(</code><code>"Please input your name:"</code><code>)</code>
<code> </code><code>#輸入的使用者名和上次輸入的對比</code>
<code> </code><code>if</code> <code>user_name </code><code>=</code><code>=</code> <code>user_tmp:</code>
<code> </code><code>#使用者一樣數加1</code>
<code> </code><code>user_same </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>#使用者一樣數歸0</code>
<code> </code><code>user_same </code><code>=</code> <code>0</code>
<code> </code><code>#輸入的使用者名存為臨時變量</code>
<code> </code><code>user_tmp </code><code>=</code> <code>user_name</code>
<code> </code><code>#判斷使用者是否被鎖</code>
<code> </code><code>lock_check </code><code>=</code> <code>open</code><code>(lock_file)</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>lock_check:</code>
<code> </code><code>line </code><code>=</code> <code>line.split()</code>
<code> </code><code>#使用者被鎖,列印提示</code>
<code> </code><code>if</code> <code>user_name </code><code>=</code><code>=</code> <code>line[</code><code>0</code><code>]:</code>
<code> </code><code>exit(</code><code>"User \033[1;31;40m%s\033[0m is locked!"</code> <code>%</code> <code>user_name)</code>
<code> </code><code>lock_check.close()</code>
<code> </code><code>#檢視是否存在于使用者資料庫</code>
<code> </code><code>user_check </code><code>=</code> <code>open</code><code>(user_file)</code>
<code> </code><code>for</code> <code>l </code><code>in</code> <code>user_check:</code>
<code> </code><code>l </code><code>=</code> <code>l.split()</code>
<code> </code><code>user </code><code>=</code> <code>l[</code><code>0</code><code>]</code>
<code> </code><code>passwd </code><code>=</code> <code>l[</code><code>1</code><code>]</code>
<code> </code><code>if</code> <code>user_name </code><code>=</code><code>=</code> <code>user:</code>
<code> </code><code>#輸入密碼</code>
<code> </code><code>#user_passwd = input("Please input your password:")</code>
<code> </code><code>user_passwd </code><code>=</code> <code>getpass.getpass(</code><code>"\033[1;33;40mPlease input your password:\033[0m"</code><code>)</code>
<code> </code><code>#判斷密碼是否正确</code>
<code> </code><code>if</code> <code>user_passwd </code><code>=</code><code>=</code> <code>passwd:</code>
<code> </code><code>exit(</code><code>"\033[1;32;40mWelcome to you!\033[0m"</code><code>)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>"User \033[1;31;40m%s\033[0m password is error!"</code> <code>%</code> <code>user_name)</code>
<code> </code><code>#使用者存在于資料庫,跳出循環</code>
<code> </code><code>break</code>
<code> </code><code>print</code><code>(</code><code>"User \033[1;31;40m%s\033[0m not match in the user file!"</code> <code>%</code> <code>user_name)</code>
<code> </code><code>user_check.close()</code>
<code> </code><code>if</code> <code>user_same ></code><code>=</code> <code>2</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>"User \033[1;31;40m%s\033[0m name was locked!"</code> <code>%</code> <code>user_name)</code>
<code> </code><code>#将使用者名寫入到鎖定檔案中</code>
<code> </code><code>file</code> <code>=</code> <code>open</code><code>(lock_file,</code><code>"a"</code><code>)</code>
<code> </code><code>file</code><code>.write(user_name</code><code>+</code><code>"\n"</code><code>)</code>
<code> </code><code>file</code><code>.close()</code>
<code> </code><code>retry_count </code><code>+</code><code>=</code> <code>1</code>
user.txt檔案内容格式:
<code>cat</code> <code>user.txt</code>
<code>apache 123</code>
<code>jim 234</code>
<code>docker 333</code>
<code>fank yhn</code>
1.getpass模闆用于輸入密碼時,不顯示明文;
2.os.path.exists(檔案路徑)用于判斷檔案是否存在;
3.input的用法,版本3,預設輸入的内容是字元類型,如果是變量名,則為此變量名的資料類型;
4.if判斷語句用法;
5.while循環語句用法;
6.split()指定分隔符對字元串切片用法;
7.print(“%s” % name)等格式化輸出;
8.顔色輸出用法:手打出來 \033[32;1m内容\033[0m ;
9.數學算法使用;
1. 運作程式輸出第一級菜單
2. 選擇一級菜單某項,輸出二級菜單,同理輸出三級菜單
3. 菜單資料儲存在檔案中
1.菜單資料使用字典儲存在檔案中,使用import讀取;
2.擷取一級菜單;
3.擷取二級菜單;
4.擷取三級菜單;
5.使用循環列印菜單;
<a href="http://s3.51cto.com/wyfs02/M01/89/35/wKiom1gMMjKRiIPjAAFGnnPXtdI615.png" target="_blank"></a>
<code>cat</code> <code>Three_layer_menu.py </code><code>#主程式</code>
<code>#!/usr/bin/env python</code>
<code> </code><code>* Created on 2016/10/16 21:31.</code>
<code>import</code> <code>sys</code>
<code>import</code> <code>menu</code>
<code>while</code> <code>True</code><code>:</code>
<code> </code><code>#定義一層菜單為字典</code>
<code> </code><code>one_dict </code><code>=</code> <code>{}</code>
<code> </code><code>#擷取字典所有的鍵</code>
<code> </code><code>one_layer </code><code>=</code> <code>menu.menu.keys()</code>
<code> </code><code>#擷取字典所有的枚舉</code>
<code> </code><code>one_enu </code><code>=</code> <code>enumerate</code><code>(one_layer)</code>
<code> </code><code>#一層菜單字典</code>
<code> </code><code>for</code> <code>index1,value1 </code><code>in</code> <code>one_enu:</code>
<code> </code><code>one_dict[index1]</code><code>=</code><code>value1</code>
<code> </code><code>for</code> <code>k1 </code><code>in</code> <code>one_dict:</code>
<code> </code><code>print</code> <code>(</code><code>"\033[32m%d\033[0m --> %s"</code> <code>%</code><code>(k1,one_dict[k1]))</code>
<code> </code><code>print</code> <code>(</code><code>"輸入【back】:傳回;【quit】:退出"</code><code>)</code>
<code> </code><code>once_select </code><code>=</code> <code>input</code><code>(</code><code>"請輸入你的選擇:\n"</code><code>).strip()</code>
<code> </code><code>if</code> <code>once_select.isdigit():</code>
<code> </code><code>once_select </code><code>=</code> <code>int</code><code>(once_select)</code>
<code> </code><code>if</code> <code>0</code> <code><</code><code>=</code> <code>once_select < </code><code>len</code><code>(one_dict):</code>
<code> </code><code>print</code><code>(</code><code>"---->進入一級菜單 \033[32m%s\033[0m"</code> <code>%</code><code>(one_dict[once_select]))</code>
<code> </code><code>while</code> <code>True</code><code>:</code>
<code> </code><code>#定義二層菜單為字典</code>
<code> </code><code>two_dict </code><code>=</code> <code>{}</code>
<code> </code><code># 擷取字典所有的鍵</code>
<code> </code><code>two_layer </code><code>=</code> <code>menu.menu[one_dict[once_select]].keys()</code>
<code> </code><code># 擷取字典所有的枚舉</code>
<code> </code><code>two_enu </code><code>=</code> <code>enumerate</code><code>(two_layer)</code>
<code> </code><code># 二層菜單字典</code>
<code> </code><code>for</code> <code>index2, value2 </code><code>in</code> <code>two_enu:</code>
<code> </code><code>two_dict[index2] </code><code>=</code> <code>value2</code>
<code> </code><code># 列印二層菜單</code>
<code> </code><code>for</code> <code>k2 </code><code>in</code> <code>two_dict:</code>
<code> </code><code>print</code><code>(</code><code>"\033[32m%d\033[0m --> %s"</code> <code>%</code> <code>(k2, two_dict[k2]))</code>
<code> </code><code>print</code><code>(</code><code>"輸入【back】:傳回;【quit】:退出"</code><code>)</code>
<code> </code><code>twice_select </code><code>=</code> <code>input</code><code>(</code><code>"請輸入你的選擇:\n"</code><code>).strip()</code>
<code> </code><code>if</code> <code>twice_select.isdigit():</code>
<code> </code><code>twice_select </code><code>=</code> <code>int</code><code>(twice_select)</code>
<code> </code><code>if</code> <code>0</code> <code><</code><code>=</code> <code>twice_select < </code><code>len</code><code>(two_dict):</code>
<code> </code><code>print</code><code>(</code><code>"---->進入二級菜單 \033[32m%s\033[0m"</code> <code>%</code> <code>(two_dict[twice_select]))</code>
<code> </code><code># 定義三層菜單清單</code>
<code> </code><code>three_layer </code><code>=</code> <code>menu.menu[one_dict[once_select]][two_dict[twice_select]]</code>
<code> </code><code>while</code> <code>True</code><code>:</code>
<code> </code><code># 列印三層菜單</code>
<code> </code><code>for</code> <code>k3 </code><code>in</code> <code>three_layer:</code>
<code> </code><code>print</code> <code>(k3)</code>
<code> </code><code>print</code> <code>(</code><code>"輸入【back】:傳回;【quit】:退出"</code><code>)</code>
<code> </code><code>three_select </code><code>=</code> <code>input</code><code>(</code><code>"請輸入你的選擇:\n"</code><code>).strip()</code>
<code> </code><code>if</code> <code>three_select </code><code>=</code><code>=</code> <code>"back"</code><code>:</code>
<code> </code><code>break</code>
<code> </code><code>elif</code> <code>three_select </code><code>=</code><code>=</code> <code>"quit"</code><code>:</code>
<code> </code><code>sys.exit (</code><code>"----謝謝使用----"</code><code>)</code>
<code> </code><code>continue</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>if</code> <code>twice_select </code><code>=</code><code>=</code> <code>"back"</code><code>:</code>
<code> </code><code>break</code>
<code> </code><code>elif</code> <code>twice_select </code><code>=</code><code>=</code> <code>"quit"</code><code>:</code>
<code> </code><code>sys.exit (</code><code>"----謝謝使用----"</code><code>)</code>
<code> </code><code>print</code> <code>(</code><code>"\033[31m請輸入數字\033[0m"</code><code>)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>"----\033[31m數字超出範圍,請重新輸入!\033[0m----"</code><code>)</code>
<code> </code><code>if</code> <code>once_select </code><code>=</code><code>=</code> <code>"back"</code><code>:</code>
<code> </code><code>elif</code> <code>once_select </code><code>=</code><code>=</code> <code>"quit"</code><code>:</code>
<code> </code><code>sys.exit (</code><code>"----謝謝使用----"</code><code>)</code>
<code> </code><code>print</code> <code>(</code><code>"\033[31m請輸入數字\033[0m"</code><code>)</code>
<code>cat</code> <code>menu.py</code>
<code>#!/usr/bin/env python </code>
<code># _*_coding:utf-8_*_ </code>
<code>''' </code>
<code>* Created on 2016/10/16 19:37. </code>
<code>* @author: Chinge_Yang. </code>
<code>menu </code><code>=</code> <code>{ </code>
<code> </code><code>"家用電器"</code><code>: { </code>
<code> </code><code>"電視"</code><code>: [ </code>
<code> </code><code>"合資品牌電視"</code><code>, </code>
<code> </code><code>"國産品牌電視"</code><code>, </code>
<code> </code><code>"網際網路品牌電視"</code>
<code> </code><code>], </code>
<code> </code><code>"空調"</code><code>: [ </code>
<code> </code><code>"壁挂式空調"</code><code>, </code>
<code> </code><code>"櫃式空調"</code><code>, </code>
<code> </code><code>"中央空調"</code><code>, </code>
<code> </code><code>"空調配件"</code>
<code> </code><code>"洗衣機"</code><code>: [ </code>
<code> </code><code>"滾筒洗衣機"</code><code>, </code>
<code> </code><code>"洗烘一體機"</code><code>, </code>
<code> </code><code>"波輪洗衣機"</code><code>, </code>
<code> </code><code>"迷你洗衣機"</code><code>, </code>
<code> </code><code>"洗衣機配件"</code>
<code> </code><code>] </code>
<code> </code><code>}, </code>
<code> </code><code>"電腦"</code><code>: { </code>
<code> </code><code>"電腦整機"</code><code>: [ </code>
<code> </code><code>"筆記本"</code><code>, </code>
<code> </code><code>"遊戲本"</code>
<code> </code><code>"平闆電腦"</code><code>, </code>
<code> </code><code>"平闆電腦配件"</code><code>, </code>
<code> </code><code>"桌上型電腦"</code><code>, </code>
<code> </code><code>"一體機伺服器"</code><code>, </code>
<code> </code><code>"筆記本配件"</code>
<code> </code><code>], </code>
<code> </code><code>"電腦配件"</code><code>: [ </code>
<code> </code><code>"顯示器"</code><code>, </code>
<code> </code><code>"CPU"</code><code>, </code>
<code> </code><code>"主機闆"</code><code>, </code>
<code> </code><code>"硬碟"</code><code>, </code>
<code> </code><code>"記憶體"</code>
<code> </code><code>"外設産品"</code><code>: [ </code>
<code> </code><code>"滑鼠"</code><code>, </code>
<code> </code><code>"鍵盤"</code><code>, </code>
<code> </code><code>"鍵鼠套裝"</code><code>, </code>
<code> </code><code>"網絡儀表儀器"</code><code>, </code>
<code> </code><code>"U盤"</code><code>, </code>
<code> </code><code>"移動硬碟"</code>
<code> </code><code>] </code>
<code> </code><code>} </code>
<code> </code><code>}</code>
1.字典的用法,包括擷取key,value及相關函數用法;
2.清單的用法,周遊清單的用法;
3.import導入py檔案用法;
本文轉自 ygqygq2 51CTO部落格,原文連結:http://blog.51cto.com/ygqygq2/1864705,如需轉載請自行聯系原作者