使用python的用户名和密码

时间:2014-04-08 16:56:23

标签: python

写一段要求用户设置密码的代码

  • 向用户查询他/她的用户名
  • 两次向用户查询他/她的密码,确保用户输入两次相同的密码
  • 仅允许3次尝试获取正确的密码

密码的规则是

  • 至少一个号码
  • 至少一个下限字母
  • 至少一个上限字母
  • 允许的字符:数字,字母,“_”,“ - ”和“。”

到目前为止,我写过:

for x in range(0, 3):
    usrname = input('Enter your User Name: ')
    pwd = input('Enter a Password : ')
    cpwd = input('Enter your Confirm Password: ')
    if pwd==cpwd:
        break
    else:
        print('Password does not match please Re-enter')

对于申请密码规则的正则表达式,我们不清楚。所以任何人都可以帮我修改密码的正则表达式。

2 个答案:

答案 0 :(得分:1)

您不需要使用正则表达式。

要检查是否有号码,您可以使用:

any(c.isdigit() for c in passw)

要检查大写,您可以使用isupper()islower()进行小写操作。要检查它们是否都是合法字符,我只需要用白名单定义一个字符串,然后执行以下操作:

all(c in whitelist for c in passw)

然后,您可以将所有这些条件与all()内置字符串串联起来。

我会让你去实施它。毕竟,这是你的任务。

答案 1 :(得分:0)

我可能不会使用正则表达式来检查密码中的大写小写和数字。我只是遍历pwd字符串并设置有关您的要求是否已填充的标记,然后使用正则表达式来测试允许的字符。

import re

hasUpper, hasLower, hasDigit = False, False, False
for ch in pwd:
    if not hasUpper and ch in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": # This is also string.ascii_uppercase
        hasUpper = True
    if not hasLower and ch in "abcdefghijklmnopqrstuvwxyz": # This is also string.ascii_lowercase
        hasLower = True
    if not hasDigit and ch in "0123456789":
        hasDigit = True
if all(hasUpper, hasLower, hasDigit) and not re.search("[^A-Za-z0-9_.-]",pwd):
    # password requirements fulfilled