如何在Python中使用isupper()方法只打印大写字母?
我正在尝试写一个函数,里面用到一个循环和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