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,如需转载请自行联系原作者