如何在Python中使用isupper()方法只打印大写字母?

4 投票
2 回答
27498 浏览
提问于 2025-04-17 23:28

我正在尝试写一个函数,里面用到一个循环和isupper这个方法,目的是只打印出字符串中的大写字母。

到目前为止,我做了这些:

upper_chars = ""
def only_upper(s):
    for char in s:
        if s.isupper() == True:
        upper_chars += char
 print upper_chars

但是这个方法不行?有人能告诉我为什么吗?我收到这个错误信息:“UnboundLocalError: local variable 'upper_chars' referenced before assignment”(局部变量'upper_chars'在赋值前被引用)

2 个回答

0

解决这个问题的一种方法是确保你调用了正确的函数,另外要确保你返回了修改后的字符串。此外,你的if语句写得也不太对,函数的内容部分需要向右缩进4个空格,从函数的开始位置算起。

下面是一个使用isupper方法和for循环的例子:

def upperOnly(s):
    onlyCaps = ""
    for char in s:
        if char.isupper() == True:
            onlyCaps += char
    return onlyCaps 
print upperOnly("TeSt")
10

你的代码有几个问题:

  • 你应该在函数里面定义 upper_chars 这个变量。
  • 在循环中,你应该对每个字符调用 isupper(),而不是对整个字符串。
  • 你的函数应该返回一些东西。
  • 你需要调用这个函数。
  • if 语句块中的缩进不对。

这是修正后的代码:

def only_upper(s):
    upper_chars = ""
    for char in s:
        if char.isupper():
            upper_chars += char
    return upper_chars

print only_upper("HeLLo WorLD")

另外,你可以使用 filter()

def only_upper(s):
    return filter(lambda x: x.isupper(), s)

print only_upper("HeLLo WorLD")

或者:

def only_upper(s):
    return "".join(c for c in s if c.isupper())

print only_upper("HeLLo WorLD")

这两种方法都会输出:

HLLWLD

撰写回答