2014-10-18 31 views
-2

我有一个奇怪的问题,我不知道为什么会发生这种情况。我觉得很难解释,但在这里。我的程序工作正常,检查长度,甚至力量。我的问题是,如果输入以任何方式第一次失败,然后重新输入,并且是正确的长度和强度,它将重新要求密码输入。我想这是因为最后一个像passwordbegin(),但如果我删除它,程序显然不会运行。任何人都可以给我一个提示或向我解释为什么会发生这种情况?提前致谢!程序循环如果第二次遇到强密码

def passwordbegin():  
     Upper = 0 
     Lower = 0 
     Number = 0 
     pass_check = True 
     while pass_check is True: 
      passw = raw_input("Please enter your password. It must be between 6 and 12 characters long and contain atleast capital letter, lowercase letter and number.") 

      if len(passw) < 6: 
       print("Your password is too short, it must be at least 6 characters long") 
      elif len(passw) > 12: 
       print("Your password is too long, it must be no more than 12 characters long") 
      else: 
       print("Your password is the correct length.") 
       pass_check = False 

      if pass_check is False: 
       for char in passw: 
        if char.isupper(): 
         Upper =+ 1 
        if char.islower(): 
         Lower =+ 1 
        if char.isdigit(): 
         Number =+ 1 
      Password_Strength = Number + Lower + Upper   
      if Password_Strength == 1: 
       print("Your password is weak, trying adding Numbers or Upper and Lowercase Letters") 
       raw_input("Press enter to restart the program") 
       while True: 
        passwordbegin() 
      if Password_Strength == 2: 
       print("Your password is medium strength, try adding Upper or Lowercase Letters and Numbers") 
       raw_input("Press enter to restart the program") 
       while True: 
        passwordbegin() 
      elif Password_Strength == 3: 
       print("Your password is strong and secure, thank you for entering!") 
    passwordbegin() 
+0

请解释让'passwordbegin'从一个嵌套循环内调用自己的原因,其中最内层的循环被明确地写成无限循环。 – 2014-10-18 18:59:44

+0

对不起,我不是最好的Python,我只是一个初学者。我已经这样做了,所以如果Password_Strength == 1,然后按Enter键重新启动功能 – user3411623 2014-10-18 19:06:24

回答

1

不使用while pass_check is True:它不会做你认为它的做法。

您应该使用while pass_check == True甚至更​​好`而pass_check:

的主要问题是,你再打电话给你的函数,而不是仅仅让它循环。

呼吁passwordbegin()代替 - 使用continue(回到循环的开始),而且你不需要继续while True:循环。

+0

这个问题仍然存在后, – user3411623 2014-10-18 19:04:17

+0

您是否将所有的电话都替换为'passwordbegin'? – 2014-10-18 19:05:01

+0

和你摆脱了那些'而真:'循环? – 2014-10-18 19:06:22

相关问题