经过一段时间的研究,我一直无法找到为什么这个代码在它们全部大写时会在句子中计算大写字母,但如果我要输入一个大写字母,则会计算"0"
个大写字母包含任何小写字母的句子,例如:"Hello World"
。
message = input("Enter your sentence: ")
print("Capital Letters: ", sum(1 for c in message if message.isupper()))
答案 0 :(得分:9)
因为if
条款中的条件存在缺陷;如果给定字符串中的所有字符都是大写,则isupper
方法返回True
:
>>> "UPPER".isupper()
True
>>> "UPPEr".isupper()
False
请参阅documentation for 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)))
稍微修剪一下这个事实:
redis-cli --scan --pattern 'key*' | xargs redis-cli del
或者,如果您喜欢功能方法,redis-cli --scan --pattern 'xyz_category_fpc*' | xargs redis-cli del
输入的功能:
redis-cli flushall
redis-cli flushdb
即使这些主观上可能看起来更好;它们通常比原始方法更神秘(效率也略低)。