在学习如何查看字符串中的单个字符以检查大小写或digi时遇到困难

2024-09-29 19:33:22 发布

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

我试图写一个简单的密码检查作业,寻找至少一个大写字母,一个小写字母,一个数字,它需要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')

Tags: 密码forif作业数字password大写字母字符
3条回答

你快拿到了!如果您从代码中删除> 1(这不会真正起到任何作用),您将得到以下信息:

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

这将测试整个字符串是否由小写字母组成。如果是,lcase_bad将保留False;否则,它将成为True。如果你把FalseTrue翻过来,称之为lcase_good,你就可以看到至少有一个字符是小写的。在

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

^{pr2}$

但是,您可能还没有得到生成器的理解,所以为了清晰起见,最好使用for循环。在

一个接一个地检查所有这些情况:

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.

for character in passwd:

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

当你做if not character.islower() > 1:时,它总是正确的。.islower()返回True或{},具体取决于字符串是否为大写字母。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'

当然,如果你想告诉对方密码没有的内容,这是很有用的。但是,您也可以只做一个测试。在

相关问题 更多 >

    热门问题