经过一段时间的研究,我一直无法找到为什么这个代码在它们全部大写时会在句子中计算"0"
大写字母,但是如果我要输入一个包含任何小写字母的句子,那么它将计算大写字母,例如作为:"Hello World"
.
message = input("Enter your sentence: ") print("Capital Letters: ", sum(1 for c in message if message.isupper()))
Jim Fasaraki.. 9
因为你的if
条款中的条件有缺陷; 如果给定字符串中的所有字符都是大写,则isupper
返回该方法:True
>>> "UPPER".isupper() True >>> "UPPEr".isupper() False
请参阅以下文档str.isupper
:
返回
True
如果所有套管字符str
都是大写的,并至少有一个在套管字符str
,False
否则.
(强调我的)
由于你正在检查message
,message.isupper(()
这将返回False
所有时间导致总和0
.
相反,与完整的邮件检查message.isupper()
,使用if
在每个字符的基础上与if c.isupper()
每一个c
在message
:
print("Capital Letters: ", sum(1 for c in message if c.isupper()))
你也可以利用这一事实的优势True
就像1
和False
喜欢0
稍微减少下来,如果你想:
print("Capital Letters: ", sum(c.isupper() for c in message))
或者,如果您喜欢功能方法,map
则输入的功能如下:
print("Capital Letters: ", sum(map(str.isupper, message)))
即使这些主观上可能看起来更好; 它们通常比原始方法更神秘(效率也略低).
因为你的if
条款中的条件有缺陷; 如果给定字符串中的所有字符都是大写,则isupper
返回该方法:True
>>> "UPPER".isupper() True >>> "UPPEr".isupper() False
请参阅以下文档str.isupper
:
返回
True
如果所有套管字符str
都是大写的,并至少有一个在套管字符str
,False
否则.
(强调我的)
由于你正在检查message
,message.isupper(()
这将返回False
所有时间导致总和0
.
相反,与完整的邮件检查message.isupper()
,使用if
在每个字符的基础上与if c.isupper()
每一个c
在message
:
print("Capital Letters: ", sum(1 for c in message if c.isupper()))
你也可以利用这一事实的优势True
就像1
和False
喜欢0
稍微减少下来,如果你想:
print("Capital Letters: ", sum(c.isupper() for c in message))
或者,如果您喜欢功能方法,map
则输入的功能如下:
print("Capital Letters: ", sum(map(str.isupper, message)))
即使这些主观上可能看起来更好; 它们通常比原始方法更神秘(效率也略低).