登录模块:

  我们无论上那个网站,经常遇到这样的情况,让我们登录这个网站,流程图如下:

  

思路:

  1.当我们登录网站的时候,我们首先会输入用户名,这个时候,有些网站会提醒我们用户名是否存在,如果我们输入的用户名不存在的话,会出现提示,告诉我们用户名不存在,这个时候,我们就需要重新输入,或者选择注册,当然,我们这里只是让用户重新输入;

  2.用户名存在的话,就需要输入密码,我们知道,输入密码的时候,我们是不验证密码是否正确的,如果直接先验证密码是否正确,也就失去了让用户输入验证码的作用,因此我们总是先不验证密码,而是让用户输入验证码,先验证用户输入的验证码是否正确;

  3.如果验证码不正确,则让用户重新输入验证码;如果验证码正确,那么这个时候就要返回来重新验证密码是否正确;如果密码正确,就登录成功了;否则,如果密码不正确,这个时候,就需要用户重新输入密码,由于这个时候,用户已经输入了用户名,因此不需要再重新输入用户名了,只需要输入密码和验证码即可;即重新输入密码,然后输入验证码;如果密码正确,则登录成功,否则重新输入密码和验证码,验证码是每次输入密码必须输入的;

  要实现上述代码的功能,肯定要使用while循环,由于是逐层检验,因此用户名的输入肯定是一个循环,直到用户输入正确的验证码为止,关键是,如何实现用户名正确,当密码或者验证码输入错误的时候,不需要重新输入用户名,不然会让人鄙视的;这个时候就要考虑,当用户名正确的时候,就要停止这个循环了,不能再执行下一次用户输入密码或验证码的时候循环输入用户名。

  代码的实现如下:

  

def login(name,password):
'''用户登录模块,用户登录时候的各种设置,本次实现功能'''
'''用户登录验证的时候,一般会先判断验证码是否正确,因此要让用户首先验证验证码'''
active = True
while True:
while active:
username = input("请输入你的用户名:")
'''首先验证用户名是否存在'''
users = []
for user_list in userfile.usernames:
users.append(user_list[])
if username in users:
active = False
else:
print("对不起,您输入的用户名不存在,请重新输入:")
pwd = input("请输入你的密码:") while True:
'''加入一个用户输入验证码的模块,让用户输入验证码'''
verification_code = str(random.randint(,)) + chr(random.randint(,)) + str(random.randint(,)) + chr(random.randint(,))
print(verification_code)
test_num = input("请输入验证码:")
if test_num == verification_code.lower() or test_num == verification_code.upper():
'''无论用户输入大小写都可以验证成功'''
'''用户验证成功后,开始进行用户自己的认证,是否注册,或者用户名正确'''
break
else:
print("您输入的验证码有误,请重新输入!")
if [username,int(pwd)] in userfile.usernames:
print("Successful!")
return (username,pwd)
else:
print("对不起,您输入的密码有误,请重新输入:")

  上述代码运行如下:

请输入你的用户名:geng
请输入你的密码:
3D0t
请输入验证码:3d0t
对不起,您输入的密码有误,请重新输入:
请输入你的密码:
8I9z
请输入验证码:
您输入的验证码有误,请重新输入!
2G0j
请输入验证码:
您输入的验证码有误,请重新输入!
7T1a
请输入验证码:7t1a
对不起,您输入的密码有误,请重新输入:
请输入你的密码:
7X4q
请输入验证码:7x4q
对不起,您输入的密码有误,请重新输入:
请输入你的密码:
2O0q
请输入验证码:2o0q
Successful!
('geng', '')

  上述代码的执行结果如上所示,当我们想单独停止一个循环的时候,可以给这段循环设置一个标识符,用来开启或者关闭循环,当满足条件的时候,关闭这个循环,让这个循环在执行其他程序的时候不会开启;

   active = True
  while True:
  while active:
    username = input("请输入你的用户名:")
    '''首先验证用户名是否存在'''
    users = []
    for user_list in userfile.usernames:
      users.append(user_list[0])
  if username in users:
  active = False
  else:
    print("对不起,您输入的用户名不存在,请重新输入:")
    pwd = input("请输入你的密码:")

  上述代码,我们就实现了这样的功能,当我们想停止这个循环的时候,我们就让内层循环的标识符关闭。

day4作业小代码练习的更多相关文章

  1. 【processing】小代码

    今天无意间发现的processing 很有兴趣 实现很简洁 void setup(){ } void draw(){ background(); && mouseY > heig ...

  2. 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)

    第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回   提交作业(截止时间已过) 完成并提交作业     作业批改 互评训练   互评作业   自评作业     成绩公布 查看成绩 温 ...

  3. 小代码编写神器:LINQPad 使用入门

    原文:小代码编写神器:LINQPad 使用入门 一:概述 1:想查看程序运行结果,又不想启动 VS 怎么办? 2:想测试下自己的 C# 能力,不使用 VS 的智能感知,怎么办? 那么,我们有一个选择, ...

  4. Python小代码_2_格式化输出

    Python小代码_2_格式化输出 name = input("name:") age = input("age:") job = input("jo ...

  5. Python小代码_1_九九乘法表

    Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...

  6. 简单的Java逻辑小代码(打擂台,冒泡排序,水仙花数,回文数,递归)

    1.打擂台 简单的小代码,打擂台.纪念下过去,祝福下新人. public static void main(String[] args){ int[] ld = {1,4,2,10,8,9,5}; i ...

  7. python的mysql小代码

    我因为懒,就想写个批量insert数据的小代码 这里是代码 # _*_ encoding:utf-8 _*_ import os import MySQLdb import numpy as np d ...

  8. 一段小代码秒懂C++右值引用和RVO(返回值优化)的误区

    关于C++右值引用的参考文档里面有明确提到,右值引用可以延长临时变量的周期.如: std::string&& r3 = s1 + s1; // okay: rvalue referen ...

  9. 个人博客作业week2——代码复审

    1.代码规范 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 代码规范并不是从官僚制度下产生,它是为了提高项目团队开发效率而产生的一种工具,能够极大的增强代码可读 ...

随机推荐

  1. bash下. : () {} [] [[]] (())的解释 (非原创,侵删)

    Copy from http://blog.chinaunix.net/uid-20380484-id-1692999.html bash下有很多像{}.[]等一些符号命令,下面是我对一些常用的符号命 ...

  2. struts2.1.6教程一、准备工作及实例

    1.解压struts-2.1.6-all.zip apps目录:struts2自带的例子程序 docs目录:官方文档. lib 目录:存放所有jar文件. Src 目录:源文%件存放地 2.六个基本包 ...

  3. [原创]CentOS下Mysql双机互为备份

    一.环境: 1.安装Centos-6.5-x64位系统的机器两台: host1:192.168.2.3 host2:192.168.2.4  (互相能ping通) 2.安装Mysql. 命令:Yum ...

  4. Lock(一)认识v$LOCK

    v$lock列出了数据库当前拥有的锁及未完成的锁请求. Column Description ADDR 被锁对象的地址 KADDR 锁的地址 SID session id(这里特指正在锁定对象或请求去 ...

  5. 深入理解Java常用类-----StringBuilder

    上篇文章我们介绍过String这个常用类,知道了该类的内部其实是用的一个char数组表示一个字符串对象的,只是该字符数组被final修饰,一旦初始化就不能修改,但是对于经常做字符串修改操作的情况下,S ...

  6. Vulkan Tutorial 07 Window surface

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 到目前为止,我们了解到Vulkan是一个与平台特性无关联的API集合.它不能直接与窗 ...

  7. sql还原(.mdf文件还原)

    第一步: 把备份文件放到目录:C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA (默认)(这里用 MyDB.md ...

  8. NLTK学习笔记(一):语言处理和Python

    目录 [TOC] nltk资料下载 import nltk nltk.download() 其中,download() 参数默认是all,可以在脚本里面加上nltk.download(需要的资料库) ...

  9. jQuery杂项方法

    前面的话 杂项方法其实也是工具类方法,但由于其不是定义在jQuery构造函数上的方法,所以不能称为工具方法.本文将详细介绍jQuery中的杂项方法 数据操作 [data()] 该方法用于在匹配元素上存 ...

  10. Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'URIType' of bean class [com.alibaba.citrus.service.uribroker.uri.GenericURIBroker]

    linux中的JDK为JDK8,tomcat为tomcat8 加入dubbo.war包 启动报错! Caused by: org.springframework.beans.factory.BeanC ...