【问题标题】:Why Python returns True for empty space as upper()?为什么 Python 将空格返回 True 作为upper()?
【发布时间】:2022-01-15 10:42:46
【问题描述】:

任何人都可以澄清为什么下面的程序返回带有空格的“J F K”而不是“JFK”?

string = "John Fitzgerald Kennedy"
initials = ""
for letter in string:
    if letter == letter.upper():
        initials += letter
print(initials)

另一方面,下面的程序返回没有空格的“JFK”,

string = "John Fitzgerald Kennedy"
initials = ""
for letter in string:
    if letter != letter.lower():
        initials += letter
print(initials)

谢谢!!!

编辑:啊...我在阅读答案后问这个真的很傻吗?在询问之前我应该​​尝试以下内容... 它返回“ohn itzgerald ennedy”

string = "John Fitzgerald Kennedy"
initials = ""
for letter in string:
    if letter == letter.lower():
        initials += letter
print(initials)

谢谢大家:)

【问题讨论】:

  • upper() 不返回 True。它返回符号的大写版本,然后将其与原始符号进行比较。空间没有两个版本,上面的.upper()/.lower() 是无操作的。因此,space == space.upper(),此外,space == space.lower()Truespace != space.lower()False
  • 您正在检查将字符串转换为大写是否返回与原始字符串相同的字符串。对于没有 大小写的字符,这将始终为真。这应该不足为奇。你期望" ".upper() 会返回什么?
  • 想一想……空格的大写版本是什么,它与非大写版本的空格相比如何?每张支票比较的是什么?
  • 无论如何,这似乎是一个XY problem。您似乎实际上试图弄清楚一个字符是否是字母。已经有这方面的功能,但你实际上可以检查if letter.upper() == letter.lower()

标签: python string


【解决方案1】:

试试string.upper()。你会得到'JOHN FITZGERALD KENNEDY'。请注意,空格的大写版本没有改变。

如果要检查字符是否为大写,可以使用isupper:

string = "John Fitzgerald Kennedy"
initials = ""
for letter in string:
    if letter.isupper():
        initials += letter
print(initials)

【讨论】:

    【解决方案2】:

    因为

    space(" ") == space(" ").upper() --> True
    

    还有

    space(" ") != space(" ").upper() --> False
    
    

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2014-09-25
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      相关资源
      最近更新 更多