密码检查Python 3

2024-04-29 12:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

编写一个检查字符串是否为有效密码的函数。

规则: 必须至少有8个字符 密码只能由字母和数字组成 密码必须至少包含2位数字

这就是我到目前为止所拥有的,我做错了什么?谢谢你

def getPassword():
   password = input("Enter password: ")
   return password

def validPassword(password):
   if len(password) >= 8:
      valid = True
   if password.alnum():
      valid = True
   if password.isdigit < 2:
      valid = True
   else:
      return False


def main():
   password = validPassword()
   if validPassword(password):
      print(password, "is valid")
   else:
      print(password, "is invalid")
main()

Tags: 函数字符串true密码returnifismain
2条回答

根据isdigit()方法的以下引用here

This method returns true if all characters in the string are digits and there is at least one character, false otherwise.

这不适合你的案子

A password must contain at least 2 digits

该方法只让您知道给定的字符串是否是数字,而不是字符串中有多少数字。要做到这一点,你需要多加练习。

您可以使用以下命令

if sum(character.isdigit() for character in password) >= 2:

此外,您的代码有一个小错误,因为您永远不会返回True。下面是一个可能的解决方案:

def CountDigitsFor(password):
   return sum(character.isdigit() for character in password)

def validPassword(password):
   if len(password) >= 8 and password.isalnum() and CountDigitsFor(password) >= 2:
      return True
   return False

另外,在你的主体中,当你从用户那里得到密码时,你有一个小的输入错误

password = validPassword()

应该是

password = getPassword()

因此这里有一个完整的代码

def getPassword():
   return input("Enter password: ")

def CountDigitsFor(password):
   return sum(character.isdigit() for character in password)

def validPassword(password):
   if len(password) >= 8 and password.isalnum() and CountDigitsFor(password) >= 2:
      return True
   return False

def main():
   password = getPassword()
   if validPassword(password):
      print(password + " is valid")
   else:
      print(password + " is invalid")

main()

这似乎是一个家庭作业,所以我会尽量避免直接回答,但更多的是努力把你推向正确的方向。

你将运行的第一段代码是

...
def main():
    password = validPassword() # the password we are trying to check
...

哦,validPassword(password)接受一个参数,但没有密码,也许您的意思是getPassword()

让我们逐行检查validPassword(password)的逻辑

...
def validPassword(password):
   if len(password) >= 8: 
      valid = True 
...

让我们检查字符串的长度是否超过8个字符,如果超过8个字符,则初始化变量valid并将其设置为True

...
   if password.alnum(): 
      valid = True 
...

然后不管发生了什么,我们都调用alnum(我不认为它是python中的函数,可能是isalnum的意思)检查密码中的所有字符是否都是数字。 如果是,我们初始化变量valid并将其设置为True。 你可能会说,但我已经初始化了它,实际上,在python中有scope

...
   if password.isdigit < 2:
      valid = True
...

然后我们检查密码方法isdigt是否小于2,也许您的意思是password.isdigit()我真的很仔细,因为不清楚您在编程或python方面的熟练程度。但如果你的意思是password.isdigit() < 2,那么你是在问密码是不是一个数字,如果是,它是不是小于2。 如果是,我们初始化变量valid并将其设置为True。

...
   else:
      return False
...

如果且仅当password.isdigit() < 2为false,则返回false。

以下是一些提示:

  • 了解control flow in python
  • 当你在这里问问题,而不是说,“这里有问题,这里 是我现在的密码,请帮忙,“说,”这是问题,这是我的 当前代码,这是我在x,y,z和a,b,c行所期望的 发生了,请帮忙“如果我们不知道你在哪里挣扎, 我们怎样才能最好地帮助你
  • 试着运行您的代码并向我们展示stacktrace(如果它存在的话),这里肯定会出现错误,python恰好有比大多数语言更好的错误(在我看来)

希望我的逐行解释能帮助你找到一些错误,并更好地了解如何继续,如果没有,请随时修改你的问题,以便我们更好地了解如何提供帮助。

快乐的编码。

相关问题 更多 >