【问题标题】:Why does this code only work when the input is all capital letters?为什么此代码仅在输入全为大写字母时才有效?
【发布时间】:2017-01-12 18:27:23
【问题描述】:

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

message = input("Enter your sentence: ")

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

【问题讨论】:

  • 可能因为您的支票是if message.isupper(),您的意思是要检查:if c.isupper() 吗?
  • sum(map(str.isupper, message))

标签: python string python-3.x


【解决方案1】:

因为您的if 子句中的条件有缺陷; isupper 方法返回 True 如果给定字符串中的所有个字符都是大写的:

>>> "UPPER".isupper()
True
>>> "UPPEr".isupper()
False

documentation for str.isupper

返回True如果str中的所有大小写字符都是大写并且str中至少有一个大小写字符,否则False

(强调我的)

由于您正在检查messagemessage.isupper((),这将始终返回False,从而产生0 的总和。

不要使用message.isupper() 检查完整消息,而是使用if c.isupper()message 中的每个c 按字符使用if

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

如果您愿意,您还可以利用 True1False 类似 0 的行为来稍微减少它:

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

或者,如果您喜欢函数式方法,map 输入函数:

print("Capital Letters: ", sum(map(str.isupper, message)))

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

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多