【问题标题】:How to end a while loop if a condition is met如果满足条件,如何结束while循环
【发布时间】:2019-12-16 00:06:05
【问题描述】:

我正在尝试完成一些 Python 代码,但遇到了一些问题。基本上,我试图提示用户输入所需的用户名和密码,以及最喜欢的颜色(作为安全问题)以在输入信息后初始化的 GUI 中使用。用户名和密码必须满足特定要求,您可以在代码的打印语句中找到这些要求。如果不满足要求,将继续提示用户输入信息,直到满足所有要求,通过当满足要求时将中断的 while 循环。我遇到的问题是,循环将结束并且 GUI 无论如何都会启动,无论是否满足要求。看来valid_pass函数也被完全忽略了。我是 Python 新手,所以知识不多。

def valid_user():
  if (8 <= len(user) <= 24):
    valid_user == True
    print("Username meets requirements!")
  else:
    valid_user == False
    print("Please make sure your username meets length requirements. Usernames must be in between 8 and 24 characters in length.")

def valid_pass():
  if (8 <= len(pw) <= 24):
    if pw.isdigit() == True:
      if pw.isalpha() == True:
        valid_pass() == True
        print("Password meets requirements!")
      else:
        valid_pass() == False
        print("Please make sure your password meets length requirements. Passwords must be in 8 and 24 characters in length and contain both letters and numbers.")


while (use_inp):
    user = input("Set a username.")
    pw = input("Now, select a password.")
    user_answer = input("Select a favorite color")
    valid_user()
    valid_pass()
    if valid_user() == False or valid_pass() == False:
      continue
    else:
      break
    break

【问题讨论】:

  • 我建议使用带参数和返回值的函数。
  • 您的函数不返回任何内容。当您编写valid_user() == False 时,您正在测试函数的返回值,即None,因为您没有返回值。此外,isalphaisdigit 函数也不会像你想象的那样工作——它们只返回 true 是整个字符串是数字或字母。字符串 abc123 对两者都返回 False。

标签: python


【解决方案1】:

我根据您的规范修改了您的代码,请告诉我它是如何工作的。谢谢!

def valid_user():
  while True:
    user = input("Set a username: ")
    if (8 <= len(user) <= 24):
      valid_user == True
      print("Username meets requirements!")
      break
    else:
      valid_user == False
      print("Please make sure your username meets length requirements. Usernames must be in between 8 and 24 characters in length.")

def valid_pass():
  while True:
    pw = input("Now, select a password: ")
    if (8 <= len(pw) <= 24):
      if any(char.isdigit() for char in pw) == True and any(char.isalpha() for char in pw) == True:
          print("Password meets requirements!")
          break
      else:
          print("Password must contain alpha numeric and digits and be at least 8 length.")
    else:
        print("Please make sure your password meets length requirements. Passwords must be in 8 and 24 characters in length and contain both letters and numbers.")


user_answer = None
while user_answer == None:
    valid_user()
    valid_pass()
    user_answer = input("Select a favorite color")

【讨论】:

    【解决方案2】:

    我觉得这里的功能是多余的。

    usn_input: str = ''
    pw_input: str = ''
    colour_input: str = ''
    
    valid_input_flag: bool = False
    
    while not valid_input_flag:
        valid_input_flag = True
    
        usn_input = input('Enter a username: ')
        pw_input = input('Enter a password: ')
        colour_input = input('Enter your favorite colour: ')
    
        if not (8 <= len(usn_input) <= 24):
            valid_input_flag = False
            print('Please make sure your username meets length requirements. Usernames must be in between 8 and 24 '
                  'characters in length.')
    
        if not (8 <= len(pw_input) <= 24 and any(curr.isdigit() for curr in pw_input)
                and any(curr.isalpha() for curr in pw_input)):
            valid_input_flag = False
            print('Please make sure your password meets length requirements. Passwords must be in 8 and 24 characters in '
                  'length and contain both letters and numbers.')
    
    print(f'Valid inputs:\nUsername: {usn_input}\nPassword: {pw_input}\nColour: {colour_input}')
    

    请注意,我在进行任何验证之前获得了所有 3 个输入。在某些情况下,最好在请求下一个输入之前验证某个输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      相关资源
      最近更新 更多