【问题标题】:Why is my program not detecting uppercase characters?为什么我的程序没有检测到大写字符?
【发布时间】:2019-10-02 01:23:53
【问题描述】:

我要求用户输入密码。然后程序确定密码是否有效,如果它符合某些标准。

这是有问题的部分。

for i in range(0, len(password)):
    if(password[i].isdigit()==True):
        isNum+=1
    elif (password[i].isalpha()==True):
        isLetter+=1
    elif (password[i].isupper()==True):
        isUpper+=1

我的程序可以很好地检测数字和字母,但它不能检测大写字母。如果我输入密码1234Foxes,它会说有4个字母,4个数字,总共8个字符,但它说有0个大写字母。

【问题讨论】:

    标签: python string uppercase


    【解决方案1】:

    如果isupper 为真,则isalpha 一定为真,因为大写字母必然是字母。由于您使用的是elif,因此条件是排他性的,一旦isalpha 检查为真,检查就会停止。

    如果您希望两个检查都运行,请不要在此处使用 elif

    for character in password:
        if(character.isdigit()):
            isNum += 1
    
        elif (character.isalpha()):
            isLetter += 1
    
            if (character.isupper()):
                isUpper += 1
    

    我还通过直接迭代字符串摆脱了索引password的需要,以及多余的== True

    【讨论】:

    • 第二个条件可以是一个 elif。第三个应该嵌套在其中
    • @MadPhysicist 好电话。认为性能无关紧要,但它更正确。
    【解决方案2】:

    您的逻辑是正确的,但是,您需要先检查一个 char 是否为大写,然后再检查它是否为 alpha。这是因为每个上层字符都是 alpha,所以永远不会到达最后一个 elif。因此,将您的代码位置更改为:

    for i in range(0, len(password)):
       if(password[i].isdigit()==True):
           isNum+=1
       # isupper() first from isalpha()
       elif (password[i].isupper()==True):
           isUpper+=1
       elif (password[i].isalpha()==True):
           isLetter+=1
    

    还有,另一个提示:您可以在不使用索引的情况下遍历字符串的每个字符,如下所示:

    for char in password:
       if (char.isdigit()):
           isNum += 1
       elif (char.isupper()):
           isUpper += 1
       elif (char.isalpha()):
           isLetter += 1
    

    由于 isdigit()、isalpha() 和 isupper() 返回 True 或 False,您无需检查它是 True 还是 False(不需要 == 运算符),只需将其放入 if 语句中即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多