首页 > 解决方案 > 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")

标签: pythonloopswhile-loopnestedverification

解决方案


只有在第一次输入错误的字符数时才匹配。如果用户第一次输入 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 循环将继续执行,直到没有提供相同的密码。希望这可以帮助!


推荐阅读