目标函数
实现1:可多个用户注册账号以及设置密码,每个账号不能重复,密码可重复,可重复登陆账号以及退出登陆
实现2:用户可更改账号密码,或者注销账号,此举需要先登陆验证,否则无法更改密码
实现3:反爬虫,在每个按钮中设置不等的时间间歇。在与用户互动时及时提醒操作对象
实现4:登陆成功之后的任务为:用户输入文本或网址,制作专属二维码
特点1:多层嵌套,多层循环,多分支结构
特点2:运用简单语法,大致模拟了用户软件的账号生命周期,以及功能实现
提醒:本文及代码均为原创,仅为博主学习阶段自主练习,若使用请标注来源,欢迎批评指正!
##提醒:运行该代码前需先安装qrcode库、numpy库、time库。可在cmd环境中,通过 语句 `:\> pip install <拟安装库名>` 实现。
##代码实现如下:
import qrcode ##引用实现二维码的制作
import numpy as np ##数据库检验值相等
import time as tm ##设置休眠时间
def mmia():
coded_dict = dict() ##定义空字典,储存用户的账号和密码
time_suer = True
while np.equal(time_suer,True):
choice_user = input("注册账号输入A,登陆已有账号输入B,更改账号密码输入C,注销账号输入D:")
if choice_user == "A":
while True:
user_first = input("注册—输入学号:")
if user_first not in coded_dict.keys() : ##检验注册账号名是否已被注册
coded_lock = eval(input("注册—请设置数字密码:"))
coded_lock1 = eval(input("注册—请确认密码:"))
if coded_lock == coded_lock1 :
coded_dict[user_first] = coded_lock ##将账号和密码设置为键值对
print("密码设置成功,可登录")
break
else:
print("两次输入不一致,3秒后请重新设置")
tm.sleep(3) ##休眠时间
else:
print("该学号已被注册,请重新输入")
elif choice_user == "B":
time_tre = True
while np.equal(time_tre ,True):
user_second = input("登陆—请输入学号,返回首页输入stop:")
if user_second == "stop":
break
coded_lock2 = eval(input("登陆—请输入密码:"))
if coded_dict[user_second] == coded_lock2 : ##登陆时,验证输入的密码与注册时的密码是否一致
print("登陆成功")
two_dimen = input("输入文字或URL,退出登陆输入exitm:") ##输入扫码二维码后,呈现的内容,若为文本则显示文本,若为链接则跳转到相应网页
if two_dimen == "exitm":
break
else:
img =qrcode.make(two_dimen) ##制作二维码图片
img.save=r"C:\Users\AdamCY\Desktop\wenjian\python-st" #保存图片至本地目录,设定路径
img.show() ##图片保存到本地后,自动显示图片
else:
print("账号或密码输入有误,2秒后请重新输入")
tm.sleep(2) ##同上,设置休眠时间,防止爬虫
elif choice_user == "C":
time_fou = True
while np.equal(time_fou,True):
coded_change = input("更改—输入学号:")
coded_alter = eval(input("更改—输入原密码:"))
if coded_dict[coded_change] == coded_alter: ##验证用户真实身份,输入信息与注册时信息是否一致
print("用户验证成功")
coded_new = eval(input("更改—输入新密码:"))
coded_neww = eval(input("更改—确认新密码:"))
if coded_new == coded_neww: ##新密码输入无误时,则准备更改密码
coded_dict[coded_change] = coded_new ##修改键值对,键对应的值
print("密码更改成功,返回重新登陆")
break
else:
print("更改失败:两次密码输入不一致")
else:
print("账号或密码输入错误,请重新输入")
elif choice_user == "D":
time_fiv = True
while np.equal(time_fiv,True):
log_miss = input("注销—输入学号,退出输入loss:")
if log_miss == "loss":
break
if log_miss not in coded_dict.keys(): ##验证账户名是否输入正确
print("该账号暂未注册,3秒后返回首页")
tm.sleep(3)
break
log_deoed = eval(input("注销—输入密码:"))
if coded_dict[log_miss] == log_deoed: ##验证身份,是否是正确账号密码
print("身份验证成功")
rest_rest = input("是否注销—输入:是/否") ##再次确认用户是否注销账号
if rest_rest == "是":
coded_dict.pop(log_miss) ##删除键值对。即删除用户信息
print("注销成功")
elif rest_rest == "否":
print("成功取消注册")
else:
print("无效输入,重新输入")
else:
print("身份验证失败")
else:
print("选择有误,请重新输入") ##用户输入为非ABCD四个选项时的返回信息
【注册账号】
先选择按钮,当非“ABCD”四个按钮时,则要求用户重新选择正确按钮。初次设置账户名,代码中以学号为例子,也可以设置为中英文字符等,因为此处统一以字符串形式保留,并要求设置数字密码(此处要求使用数字密码是因为以便后续验证密码是否一致,并使用eval()函数,其会去掉字符串两旁的引号,数值型保留),当两次密码不一致时,则提示并要求重新注册账户密码。若再次登陆时,账户名与之前重复则会提醒用户该用户名已被注册。账号与密码以键值对的形式存储在字典中,可实现后续登陆、更改、注销步骤时的引用。也由此可见字典的重要性。
【登陆账号】
用户登陆账号时,可选择返回上一个菜单,即输入“stop”,可以返回到“ABCD”四个按钮界面。在其提示下,要求用户输入已经注册的的账号,并验证登陆输入密码与注册密码是否一致,若不一致,设置休眠时间,防止爬虫,在要求用户重新输入登陆信息或者返回到按钮界面。若用户登陆时输入的账户名(学号)未注册即非字典内容,则返回提醒该账号并未注册。在用户一次性输入中,可能输入学号,可能输入“stop”,则要求设置条件语句进行辨别。
【功能实现】
当用户成功登陆账号后,通过输入文本或者要访问的链接,自动生成二维码,并将其保存到本地(需自行设定保存路径,若复制粘贴代码块,会直接报错)。自动保存后,代码继续运行,会自动在电脑上显示保存的二维码。此时,可通过移动端扫码二维码显示内容,或者访问链接对象网页面。二维码的制作,此处运用的是qrcode库,MyQR库也可以实现二维码的制作。二维码的制作中,还可以设置颜色、大小、背景图(静态图、动图)等等。
制作二维码的单独语句块
import qrcode
two_dimen = input("输入文字或URL,退出登陆输入exitm:")
img =qrcode.make(two_dimen) ##制作二维码图片
img.save=r"C:\Users\AdamCY\Desktop\wenjian\python-st" #保存图片至本地目录,设定路径
img.show() ##图片保存到本地后,自动显示图片
或者使用MyQR库
from MyQR import myqr
import byte
from byte import *
myqr.run(words = "true or false,this is a question",
version=9,save_name="python_1.jpg",
save_dir = 'C:/Users/AdamCY/Desktop/wenjian/python-st/')
##图片保存到本地后,没有自动显示,需要在设定路径中寻找二维码
【修改账号密码】
当用户选择C按钮时,可进行更改密码。其原理依旧是对于字典的应用,即为修改键值,在修改之前,需要验证账户名与密码,再进行新密码的双次输入确认。确认之后,可重新登陆,使用新密码,显示登陆成功,再实现程序功能。
【注销密码】
注销密码即删除键值对。登陆—验证—确认删除—删除成功。该过程只不过是以上各个步骤的循环便不再赘述。
限于个人水平以及时间,还有许多不足之处:
后续再更新1:待实现某账号密码输入错误次数到达界限后固定时间段内限制登陆,但期间可以登陆其他账号。这其中又会涉及多层嵌套
后续再更新2:待实现二维码的循环制作,以及相应格式参数,如:二维码的颜色、规格、背景图等
后续再更新3:待实现将其打包成独立文件,可脱离python环境在windows系统下独立运行
后续再更新4:待实现找回密码以及密保功能