为什么此代码仅在输入为大写字母时才起作用?

时间:2017-01-12 18:27:23

标签: python string python-3.x

经过一段时间的研究,我一直无法找到为什么这个代码在它们全部大写时会在句子中计算大写字母,但如果我要输入一个大写字母,则会计算"0"个大写字母包含任何小写字母的句子,例如:"Hello World"

message = input("Enter your sentence: ")

print("Capital Letters: ", sum(1 for c in message if message.isupper()))

1 个答案:

答案 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())) True1

False

如果你想要的话,你还可以利用0print("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

即使这些主观上可能看起来更好;它们通常比原始方法更神秘(效率也略低)。