我正在尝试编写一个使用for循环的函数,而isupper方法只打印一个字符串的大写字母。
到目前为止我做了什么:
upper_chars = ""
def only_upper(s):
for char in s:
if s.isupper() == True:
upper_chars += char
print upper_chars
但这不起作用?有谁告诉我为什么? 我收到此错误消息:“UnboundLocalError:在赋值之前引用的局部变量'upper_chars'”
答案 0 :(得分:6)
代码中的几个问题:
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
答案 1 :(得分:0)
修复部分问题的方法是确保调用实际函数,另一件事是确保返回修改后的字符串,另外如果语句编写不正确,函数体需要从函数的开头是4个空格。
使用isupper方法和循环
的示例def upperOnly(s):
onlyCaps = ""
for char in s:
if char.isupper() == True:
onlyCaps += char
return onlyCaps
print upperOnly("TeSt")