python - Python中的密码验证
问题描述
我正在研究 Python 一段时间并试图解决以下问题: 下面给出了部分验证例程。当用户输入密码时,会检查它以确保它在 8 到 15 个字符之间,然后要求通过再次输入来验证密码。要求完成任务(a) CONDITION 1、CONDITION 2 和任务(b) IF ... ELSE 语句。对程序进行编码和测试。
password1 = input("Please enter a new password, between 8 and 15 characters: ")
match = False
while CONDITION 1
while CONDITION 2
password1 = input ("Password must be between 8 and 15 characters - please re-enter: ")
endwhile
password2 = input ("Please verify password: ")
if ....
print
else
endif
endwhile
我完成了任务 (b) 但在任务 (a) 中我遇到了 while 循环条件“while match:”的问题。当我离开变量 match = False 并输入所需字符数量的密码时,循环立即终止并且不使用 if .. else 语句进行验证。如果我写 match = True 并且在第一次尝试输入不正确的字符数(正确的数字它会再次终止循环)程序会进行验证而忽略字符数。如果密码相同(例如 111 和 111),它会返回循环并再次询问具有所需字符数的密码。然后,如果我在正确数量的字符后输入并且密码验证相同,它将终止程序,就像它假设的那样。我认为条件“匹配”的东西 在 while 循环中是不正确的,但无法弄清楚它应该是什么。谢谢
password1 = input("Please enter a new password, between 8 and 15 characters: ")
match = True
while len(password1) < 8 or len(password1) > 15:
password1 = input ("Password must be between 8 and 15 characters - please re-enter: ")
while match:
password2 = input ("Please verify password: ")
if password1 == password2:
print ("Password is valid")
break
else:
print ("Password is invalid")
解决方案
只有在第一次输入错误的字符数时才匹配。如果用户第一次输入 8 到 15 个字符会怎样?第一个 while 循环不会执行,因此不会执行任何操作。Condition1(长度在 8 到 15 之间)必须在循环外检查,并且第二个 while 循环必须保持独立。
pass1 = input('Enter a password : ')
while len(pass1) < 8 or len(pass1) > 15:
print('Incorrect, try again')
pass1 = input('Enter a password : ')
# Program reaches here only if pass1 is between 8 to 15 characters, otherwise first loop will be infinite
pass2 = input('Verify the password : ')
if pass1 == pass2:
print('Valid')
else:
while pass1 != pass2:
pass2 = input('Invalid. Re-enter the correct password : ')
上面的代码首先password1
检查它是否在 8-15 个字符范围内。如果不是,则第一个 while 循环继续执行。当给出一个有效输入时,它接受password2
, 并检查是否相等。如果它是第一次匹配,则不需要进一步的 while 循环。如果不匹配,while 循环将继续执行,直到没有提供相同的密码。希望这可以帮助!
推荐阅读
- redis - Redis Cluster - 无法建立连接Redis主从
- r - 左连接不重复相同的列
- php - 使用 find_files php 函数查找儿童文件夹
- linux - 相同版本的 jq 在 Ubuntu 16 和 Ubuntu 18 上的行为不同
- javascript - 如何将jinja2数据显示到javascript文件中
- bash - 如何为 sh 脚本中的前 n 个字节生成 MD5 哈希?
- java - 带有注释@PostConstruct(javax)的方法不会调用
- react-native - @expo/traveling-fastlane-darwin@1.10.0 的 npm WARN tarball 压缩包数据似乎已损坏。再试一次
- linux - 使用 Makefile 创建 .elf 文件
- html - 滚动时表格行内容渗入粘性标题内容 - 相对定位与绝对定位相关