计算列表中的大写字母,不包括单词中的第一个大写字母

时间:2016-10-23 22:52:31

标签: python python-3.x

所以我的函数必须取一个字符串列表,并返回出现在单词开头以外的位置的大写字母总数。此外,为了将此问题分解为子问题,它需要第二个函数,它接受一个单词并返回出现在该单词开头以外的位置的大写字母数。到目前为止,我有一个有效的功能,但我被告知需要做得更好,我不太清楚如何做到这一点。

<div class="content-up-down">
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>
			<div class="content-1"> </div>	
		</div>

		<div class="content-left-right">
			<div class="wrap-content-2">
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
				<div class="content-2"> </div>
			</div>
		</div>

我的老师告诉我将count_strange_caps中的两个列表推导结合起来,因为它们基本上是相同的代码,并使用内部for循环中count_strange_caps的代码用于第二个函数。

def count_strange_caps(words):
    if words[0].isupper():
        count = abs(1 -sum(1 for c in words if c.isupper())
    elif words[0].islower():
        count = abs(sum(1 for c in words if c.isupper()))
    return count

def total_strange_caps(words):
    total_count = 0
    for word in words:
        if word[0].isupper():
            total_count -= 1
        for letter in word:
            if letter.isupper():
                total_count += 1            
    return total_count

这些是需要通过的测试类型,如果有人可以使用更基本的概念帮助我解决方案,我们将不胜感激。如果这有所不同,我就不能使用numpy。

2 个答案:

答案 0 :(得分:0)

您可以使用str.isupper()sum()来实现此目的。使用这些,count_strange_caps()的函数定义应该是:

def count_strange_caps(word):
     return sum(my_char.isupper() for my_char in word[1:]) # word[1:] to skip the first character

示例运行:

>>> count_strange_caps('HeLlo')
1
>>> count_strange_caps('HeLLo')
2
>>> count_strange_caps('heLLo')
2

此外,您的total_strange_caps()可以使用sum()简化为:

def total_strange_caps(words):
    return sum(count_strange_caps(word) for word in words)

Sampl run:

>>> total_strange_caps(['HeLlo', 'HeLLo', 'heLLo'])
5

答案 1 :(得分:0)

您可以按如下方式使用字符串理解:

def total_strange_caps(words):
    total_count = 0
    for letter in words[1:]:
        if letter.isupper():
            total_count += 1           
    return total_count

print total_strange_caps("AbCdE")

输出:     2