函数只返回不返回预期结果的大写字母

时间:2015-01-29 08:45:54

标签: python

这是我的功能。我希望它返回字符串(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'

任何建议都表示赞赏。

7 个答案:

答案 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/