这是我的功能。我希望它返回字符串(x)中的所有大写字符,如果没有大写字母,那么只需返回' '
def upper(x):
for c in x:
if c.isupper():
return(c)
elif x.islower():
return('')
当我跑步时,我正在寻找它给我这样的东西:
upper("aBBa")
'BB'
upper("abba")
''
但是,它只给我字符串的第一个大写字母,而不是所有的大写字母。我认为使用' for'循环可以解决这个问题,但显然不是。
upper("aBBa")
'B'
upper("ABC")
'A'
任何建议都表示赞赏。
答案 0 :(得分:0)
在您的代码中,当您使用return
时,您可以返回第一个大写字符,函数将结束。因此,您需要将所有大写字符相加,然后返回:
def upper(x):
return ''.join([i for i in x if i.isupper()])
print upper('ABcc')
print upper('aaabb')
或者更改列表理解:
def upper1(x):
return ''.join((i for i in x if i.isupper()))
时间测试:
import timeit
print timeit.timeit("''.join(i for i in 'ABCDefg' if i.isupper())", number=1000000)
print timeit.timeit("''.join(i for i in 'efg' if i.isupper())", number=1000000)
print timeit.timeit("''.join([i for i in 'ABCDefg' if i.isupper()])", number=1000000)
print timeit.timeit("''.join([i for i in 'efg' if i.isupper()])", number=1000000)
输出:
2.93963984339
2.16251670139
1.55889267962
0.729011582306
列表理解更快......
答案 1 :(得分:0)
你需要将它添加到列表中,因为它有多个选项,只需检查它是否为高位并附加它,最后根据列表的大小返回字符串{{3将获取列表并将元素作为字符串连接在一起打印。
def upper(x):
upper_s = []
for c in x:
if c.isupper():
upper_s.append(c)
return "".join(upper_s)
print upper("aBBa")
print upper("aa")
输出:
BB
答案 2 :(得分:0)
通过普通的字符串方法
def upper(x):
result = ""
for c in x:
if c.isupper():
result += c
return result
print "result:-", upper("aBBa")
print "result:-", upper("abba")
输出
$ python test1.py
result:- BB
result:-
答案 3 :(得分:0)
import re
str1 = "aBBa"
t = re.search("[A-Z].",str1).group()
print (t)
基本上会找到所有的大写字母。如果return
处理一次,则该过程结束。这就是你的函数返回一个字母的原因。
在功能中;
import re
def upper(x):
t = re.search("[A-B].",x).group()
return t
print (upper("aBBa"))
答案 4 :(得分:-1)
你的上层函数只返回一个值。一旦找到大写字母,它就会返回单个字母(从而终止函数)
相反,您应该将其存储在列表中并将列表作为一个整体返回。
def upper(x):
capitals=[]
for c in x:
if c.isupper():
capitals.append(c)
return capitals
当然,适当的'如果'可以在main()函数中添加语句,以任何你想要的方式进行打印。
答案 5 :(得分:-1)
试试这个:
>>> def upper(x):
... r = ""
... for c in x:
... if c.isupper():
... r += c
... return r
...
>>> upper("aBBa")
'BB'
>>> upper("abba")
''
>>> upper("ABC")
'ABC'
>>>
答案 6 :(得分:-2)
当程序遇到" return"声明。因此,它将仅返回示例中的第一个大写字符。 例如在 上(" ABBA&#34) 遍历的字符是" aB",当它看到B时,它返回,其余的字符串(" Ba")不会被遍历。考虑使用Python" Yield"声明,它是专门为这些情况设计的。 https://freepythontips.wordpress.com/2013/09/29/the-python-yield-keyword-explained/