Explication détaillée de l'écriture d'exemples d'interface de connexion

零下一度
Libérer: 2017-07-24 10:18:43
original
1783 Les gens l'ont consulté

Exigences : Écrire l'interface de connexion

1. Entrez le nom d'utilisateur et le mot de passe

2. Afficher le message de bienvenue après une authentification réussie

3. Verrouillé après trois fois


1) Idées d'écriture

Pour écrire des idées, reportez-vous à l'organigramme dans le lien GitHub ci-dessous

Job /Day1_Job_ Diagramme de flux de l'interface de connexion.png


2) Implémentation spécifique

 1 # -*- coding:utf-8 -*- 2  3 # Author:Chuixin Zeng 4  5 # 字典和列表的区别:列表是有顺序的,使用索引访问;而字典中的条目是用键来访问的 6  7 # 初始化空字典 8 _user_dict = {} 9 # 初始化空列表list,有了空的列表之后,程序就可以向这个列表中增加元素10 _user_list = []11 # 初始化登录不存在用户名的初始值为012 _login_error_count = 013 14 # 使用while开始无限制的循环15 while True:16     # 交互式输入登录用户名和密码17     _user_naming = input("Pls input your username:")18     _user_password = input("Pls input your password:")19     # 读取用户登录数据文件UserPassword.txt20     _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_name28         _user_name = _user_datas[0].strip()29         # 将_user_datas数据行中的第1个位置的数据(即密码),去除前后空格后,赋给新的变量_user_pass30         _user_pass = _user_datas[1].strip()31         # 将_user_datas数据行中的第2个位置的数据(即锁定状态,0代表未锁定,1代表锁定),去除前后空格后,赋给新的变量_user_locked32         _user_locked = _user_datas[2].strip()33         # 将_user_datas数据行中的第3个位置的数据(即密码输入错误次数),去除前后空格后,赋给新的变量_user_error_count34         # 将_user_datas[3]的数据类型强制转换为int35         _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             break51         # 将前面输入的用户名、密码和字典中的用户名、密码进行匹配,如果成功,则输出登录系统,然后退出52         if _user_naming == _user_dict[_user_naming]['name'] and _user_password == _user_dict[_user_naming]['password']:53             print("Welcome to System!")54             break55         else:56             # 如果用户名在字典里,但是密码不对,将前面输入的用户名所对应字典中的错误次数进行自增57             _user_dict[_user_naming]['errorcount'] += 158             # 如果用户名输入正确的情况下,密码输入错误的次数小于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,262                 _write_data = open(&#39;UserPassword.txt&#39;, &#39;w+&#39;)63                 # 将字典里面的值取到_user_value中,进行循环遍历64                 for _user_value in _user_dict.values():65                     # 往脚本开头定义好的空列表里面逐行写入数据66                     _user_list = [_user_value[&#39;name&#39;], _user_value[&#39;password&#39;], str(_user_value[&#39;locked&#39;]),67                                   str(_user_value[&#39;errorcount&#39;])]68                     # 将写入到_user_list的数据再次进行格式化后赋给_users_list69                     _users_list = &#39;,&#39;.join(_user_list)70                     # 将_users_list中的数据写入到UserPassword.txt中,并在每一行数据的结尾进行换行71                     _write_data.write(_users_list + &#39;\n&#39;)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][&#39;locked&#39;] = 180                 # 账户设置为锁定之后,将用户对应的错误密码次数清零,我理解的是锁定属性为1了,错误次数可以清零81                 _user_dict[_user_naming][&#39;errorcount&#39;] = 082                 _write_data = open(&#39;UserPassword.txt&#39;, &#39;w+&#39;)83                 for _user_value in _user_dict.values():84                     _user_list = [_user_value[&#39;name&#39;], _user_value[&#39;password&#39;], str(_user_value[&#39;locked&#39;]),85                                   str(_user_value[&#39;errorcount&#39;])]86                     _users_list = &#39;,&#39;.join(_user_list)87                     _write_data.write(_users_list + &#39;\n&#39;)88                 _write_data.close()89                 break90 91 92     else:93         # 如果用户名不存在,则输出信息94         print("Pls ensure input currect account or password,you can try three times!")95         # 程序开头设置了初始化不存在用户名的值为0,这里进行自增96         _login_error_count += 197         # 如果不存在的用户尝试次数超过3次,则中断程序98         if _login_error_count > 2:99             break
Copier après la connexion

3) Notes Github

L'adresse pour les notes du premier jour est :

Exercices en classe

L'adresse pour les devoirs du premier jour est :

Devoirs


4) Document Readme.md

Job/Readme_Login Interface.md

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal