.lower()呈现0时返回True

时间:2020-06-16 10:57:31

标签: python string

我正在尝试完成确保字符串中的所有字符均满足以下条件的任务:

  • 可被4整除
  • 字符串中包含“ A1”
  • 字符串仅包含大写字母和数字

对于大多数字符串,该功能有效;但是,当显示0时,我返回的是错误的False

问题已被局限在for循环(for character in string:)上,如输出所示。

def valid_product_code(string):
if len(string) % 4 == 0:
    print("String is divisible by 4")
    if "A1" in string:
        print("A1 is contained within string")
        for character in string:
            print(character)
            if character == character.lower():
                print("Character is a Lowercase")
                return False
            elif character == ("!"or "." or "," or ":"):
                print("Character is punct")
                return False
            else:
                return True
    else:
        return False
else:
    return False

print(valid_product_code(“ 0O3LG6EWN7AA1NI596LCVBRZ”))

代码输出如下:

String is divisible by 4
A1 is contained within string
0
Character is a Lowercase
False

3 个答案:

答案 0 :(得分:1)

您需要使用if character.islower():而不是if character == character.lower():,因为'0'.lower()=='0'才能使if语句(if character == character.lower():)始终返回true,如果您的字符串包含任何数字< / p>

答案 1 :(得分:1)

简短的答案是'0'.lower() == '0'。而不是检查不良字符(例如小写字母或标点符号),应在Python中描述成为好字符的含义。

在这种情况下,成为好角色就意味着

'A' <= character <= 'Z' or '0' <= character <= '9'

答案 2 :(得分:1)

您正在做的是非Python的。代替使用if character == character.lower():,而使用.islower()

当字符串中没有大写字母并且至少有一个小写字母时,

.islower()返回True。这与所有字符都是字母不同。