1

我正在尝试为家庭作业编写一个简单的密码检查器,寻找至少一个大写字母、一个小写字母、一个数字,并且需要 6 个或更多字符。

我在这里和其他地方搜索和搜索,但要么我阅读的内容与我们的说明不符,要么回复比我自己更高级。我得到的任何帮助都将在我的作业中作为评论引用。

这只是我检查大写的代码的一部分,它只查看整个字符串,而不是单个字符,我似乎找不到解决方案。

    passwd = input('enter password: ') ## we are actually using (sys.agrv) 
                                       ## but I am using this for testing
    character = passwd[0:]
    lcase_bad = False
    for character in passwd:
    if not character.islower() > 1:
    lcase_bad = True

    if lcase_bad:
      print('Password must include lowercase letters ')
    else:
        print('password accepted')
4

3 回答 3

3

只需依次检查所有这些条件:

mystring = input("enter password: ")
if any(c.isupper() for c in mystring) \    # There is an uppercase letter
and any(c.islower() for c in mystring) \   # There is a lowercase letter
and any(c.isdigit() for c in mystring) \   # There is a number
and len(mystring) > 5:                     # The length is 6 or greater
    # string passed all tests
else:
    # One or more tests failed--input is bad.
于 2013-10-06T04:25:49.053 回答
3

for character in passwd:

在这里,您正在遍历输入的每个字母。

当你这样做时if not character.islower() > 1:,它永远是 True。.islower()返回Trueor False,取决于字符串是否为大写字母。not False == 1,因为 boolean 是 int 的子类。not True == 0. 两者都不大于一。


您可以执行以下操作:

capital = False
lowercase = False
number = False
if len(passwd) < 6:
    print 'That was not more than 6 characters'
else:
    for character in passwd:
        if character.islower(): 
            lowercase = True
        elif character.isupper():
            capital = True
        elif character.isdigit():
            number = True
        if capital and lowercase and number:
            break
    else: 
        print 'That did not have a capital letter, lowercase letter, and a digit'

当然,如果您想告诉对方密码没有什么,这很有用。但是,您也可以只进行一项测试。

于 2013-10-06T04:28:57.767 回答
1

你几乎明白了!如果您> 1从代码中删除 (这不会真正做任何有用的事情),您会得到:

lcase_bad = False
for character in passwd:
    if not character.islower():
        lcase_bad = True

碰巧这将测试整个字符串是否由小写字母组成。如果是,lcase_bad将保留False;否则会变成True. 看到如果你翻转和调用它,你可以看到至少一个字符是否是小写,这应该不是一个极端的False信仰True飞跃lcase_good

正如 iCodez 所指出的,您还可以使用any生成器理解来重写它。它读起来相当容易:

if any(character.islower() for character in passwd):

但是,您可能还没有了解生成器推导,因此for为了清楚起见,最好保持循环。

于 2013-10-06T04:27:32.157 回答