不知道大家在网上注册账户的时候有没有发现,一般来说你去一个网站上注册一个账号,网站不会随随便便就让你填一串数字就完事,往往为了安全为由要你填一大串包含各种东西的密码。

javascript如果用户名正确密码正确 js用户名密码验证_js判断用户名和密码是否正确

虽然这有点反人类,但这可以用Python实现

找了个例题

编写一个程序,该程序能实现:

设置用户名和n位的密码(其中n≥8),并且要求密码为长度至少8位的字母和数字构成的不能存在重复字符,否则会要求重新设置,直到设置成功

设计思路1

使用“input”,将用户输入的用户名与密码赋值给一个变量

2

While True死循环,直到密码满足条件后使用”break“退出

3

最关键的部分,判断是否符合题目要求的三个条件

密码长度≥8

数字和字母构成,即不能只包含数字或字母

不能存在重复字符


javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

有了思路,就可以开始上手试试

javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

0 1输入部分


这里用两个变量来储存用户输入的内容,分别为”name“”password“

使用”input“记录用户的输入,使用”str“转换为字符串并最终赋值给前面的变量

name=str(input('请输入用户名:'))password=str(input('请输入密码(应为长度至少8位数的字母和数字构成,且不能出现重复字符)'))


javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

0 2循环部分


为了使用户在输入不合规密码时重新让用户再次输入,所以我们需要一个循环

这里解释下为什么选择while而不用for,因为我们没办法确定用户输入密码的次数,所以,使用while会更加方便

由于我们需要用户输入有误时重新输入,所以我们要将输入密码的部分放到循环内

我们这里用的while True:由于while的特性,这段程序将是一个死循环,所以我们要在合适的位置加上一个”break“来退出循环

name=str(input('请输入用户名:'))while True:password=str(input('请输入密码(应为长度至少8位数的字母和数字构成,且不能出现重复字符)'))#输入密码部分放在循环内#此处省略判断条件    break    #条件合适后再执行这行代码


javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

0 3判断密码长度


字符串有一个内建函数“len()”,这个内建函数可以输出指定字符串的长度,

if len(password)<8:    print('您设置的密码位数不足8为,请重新设置!!!')


javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

04判断密码是否仅为字母或数字构成

首先,先来介绍两个方法,“isalpha”和“isdigit”

“isalpha”,这个方法可以用来判断字符串是否只包含字母,要是只包含字母,则返回“True”,反之则是“False”

使用方法:

str.isalpha()

“isalpha”,这个方法和前者很像,可以用来判断字符串是否只包含数字,要是只包含数字,则返回“True”,反之则是“False”

使用方法:

str.isdigit()

所以,我们可以利用这两个方法,做出判断字符串是否只包含字母或数字

if password.isalpha() or password.isdigit():    print('您设置的密码不能仅仅包含数字或字母,请重新设置!!!')


javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

0 5是否含有重复的字符


这个不太好理解,我先解释下

例如“abca123456”

这里包含了两个“a”,所以存在重复的字符

我的思路是这样的,首先使用for循环,逐个判断每个字符在字符串中含有几个,至于如何判断,可以使用“count()”函数解决

for i in range(0,len(password)):     if password.count(password[i])>1:        j=1  #一个临时变量,当某一个字符在字符串中存在一个以上,则给临时变量赋值为1,这个临时变量是为了后面做准备

这里注意一个问题,我们这里使用了一个临时变量,要是我们第一次密码存在重复,但因为循环,会要求用户再次输入密码,这时候即使不存在重复,临时变量依旧为1,所以程序就会出现一个永远都判断你的密码存在重复字符的bug,这个时候我们就需要在合适的地方初始化这个变量,例如:

while True:    cf=0

最后使用if语句判断这个临时变量是不是1,要是1则代表该字符串出现了重复的字符

if j==1:  #注意两个等号    print('您设置的密码出现了重复的字符,请重新设置!!!')


javascript如果用户名正确密码正确 js用户名密码验证_python 判断字典key是否存在_02

06符合要求,退出循环

要是密码是满足条件的,则我们还要提示用户并退出循环

在Python循环语句中,我们可以用“break”终止循环

if not (len(password)<8 or (password.isalpha() or password.isdigit()) or cf==1):   #不满足前面的条件,这行代码请根据实际情况修改,例如前面的“if”语句是嵌套的形式,可以用“else”    print('密码设置成功!!!')    break

自此,我们的程序基本上已经完成,只需简单的调试和修饰即可

以下是完成后的代码,我建议看到这可以尝试自己先动手试试,先不直接看成品

在下面



name=str(input('请输入用户名:'))print('你好 %s ,首次使用请设置密码!!!'%name)while True:    cf=0    print('='*70)#来个分割线,防止多次运行时一堆字堆一起看不清    password=str(input('请输入密码(应为长度至少8位数的字母和数字构成,且不能出现重复字符)'))    if len(password)<8:        print('▶您设置的密码位数不足8位,请重新设置!!!')    if password.isalpha() or password.isdigit():        print('▶您设置的密码不能仅仅包含数字或字母,请重新设置!!!')    for i in range(0,len(password)):         if password.count(password[i])>1:            cf=1    if cf==1:        print('▶您设置的密码出现了重复的字符,请重新设置!!!')    if not (len(password)<8 or (password.isalpha() or password.isdigit()) or cf==1):        print('密码设置成功!!!')        break    """解释下为什么我不用多个嵌套的if,因为当我们密码有多个不合规点时,应该一口气告诉用户,不然用户可能会出现多次密码不合规反复输入,我感觉这样的交互就很不友好虽然这样做代码执行的效率不高"""