Python .lower()在显示0时返回True
我正在尝试完成一项任务,以确保字符串中的所有字符满足以下条件:Python .lower()在显示0时返回True,python,string,Python,String,我正在尝试完成一项任务,以确保字符串中的所有字符满足以下条件: 可被4整除的 字符串中包含“A1” 字符串只包含大写和数字 对于大多数字符串,该函数起作用;但是,当显示0时,我返回一个falsefalse 如输出所示,该问题局限于for循环(for character in string:) def valid_product_code(string): if len(string) % 4 == 0: print("String is divisible by 4") if
- 可被4整除的
- 字符串中包含“A1”
- 字符串只包含大写和数字
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
打印(有效的产品代码(“0O3LG6EWN7AA1NI596LCVBRZ”))
代码的输出如下所示:
String is divisible by 4
A1 is contained within string
0
Character is a Lowercase
False
您需要使用
if character.islower():
而不是if character==character.lower():
,因为'0'.lower()='0'
,这样,如果字符串包含任何数字,if语句(if character==character.lower():
)将始终返回true
,如果字符串包含任何数字简短的答案是'0'.lower()='0'
。您不应该检查坏字符(例如小写字母或标点符号),而应该用Python描述好字符的含义
在这种情况下,成为一个好的角色仅仅意味着
'A' <= character <= 'Z' or '0' <= character <= '9'
'A'你所做的是不符合pythonic的。如果character==character.lower():
,请使用.islower()
,而不是使用
.islower()
当字符串中没有大写字母且至少有一个小写字母时,返回True
。这与所有字符都是字母不同。“字符串只包含大写字母和数字”只检查大写字母,不检查数字。为什么假设代码接受数字?只要一个字符通过测试,循环就会返回True
。“你确定那是对的吗?”Mistermiagi我确实检查了大写字母你是对的;但是,如果出现数字,则应由“else”处理以返回True。我的问题是,当显示一个数字时,为什么字符.lower()为True(因此返回False)。@Glenchamberlain如果您的问题是“why is'0”。lower()='0'
?”,您应该回答这个问题来说明这一点。这个问题目前有很多解释,从“为什么它不工作?”到“应该如何编写它?”。如果character==(“!”或“.”或“.”或“:”):
,则测试这一行字符的各种值;你会对结果感到惊讶。如果字符位于(“!”、“、”、“:”)中,则工作(!)替换行将是,
无需使用ord
和范围。字符通过其Unicode/ASCII数字进行比较<代码>'A'。。。那么string.ascii_大写+string.digits中的字符如何呢。这只是对方法的错误使用。