.lower() 当出现0时返回True。

问题描述 投票:-1回答:2

我正试图完成一项任务,即确保一个字符串中的所有字符都符合以下条件。

  • 被4整除
  • 字符串中包含 "A1"。
  • 字符串只包含大写字母和数字

对于大多数字符串,函数都能正常工作;但是,我返回的是一个假的 False 当呈现0时。

这个问题被定位在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
python string
2个回答
1
投票

你需要使用 if character.islower():if character == character.lower(): 因为 '0'.lower()=='0' 因此,如果语句(if character == character.lower():)将始终返回 true 如果你的字符串包含任何数字


1
投票

简而言之,答案是 '0'.lower() == '0'. 与其检查坏的字符 (如小写字母或标点符号),不如在 Python 中描述成为一个好的字符意味着什么。

在本例中,作为一个好字符的意思就是

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

1
投票

你所做的事情是不对称的。而不是使用 if character == character.lower():,使用 .islower().

.islower() 返回 True 当字符串中没有大写字母而至少有一个小写字母时。这和所有字符都是字母是不一样的。

© www.soinside.com 2019 - 2024. All rights reserved.