在数字/ python之前计数字母

时间:2017-11-23 01:32:42

标签: python

我正在尝试创建一个函数,该函数返回字符串中数字前面的字符串中出现的大写字母数。变量n(我遇到麻烦)是起点。例如,如果字符串是“ABCDD1A”并且n = 3,则该函数应该仅返回包括和在第三个位置之后的大写字母的数量,因此结果应该是2.如果n大于字符串的长度,则应该返回0.这就是我现在所拥有的,我只是不能让函数考虑起点(n)。

def UpperCase(st,n):
sum = 0
for i in st:
    if n > len(st):
        return sum
    if n < len(st):
        if i.isalpha():
            if i.isupper():
                sum += 1
            if i.isdigit:
                sum = sum
return sum

4 个答案:

答案 0 :(得分:0)

您可以使用re.findall

import re
s = "ABCDD1A"
n = 3
result = sum(map(len, re.findall('[A-Z]+(?=\d)', s[n:])))

输出:

2

答案 1 :(得分:0)

您应该添加中断循环,因为您只想在数字前计算上限。以下示例

def UpperCase(st, n):
    total = 0
    # from starting idx n, until length of string
    for idx in range(n, len(st)):
        if st[idx].isdigit():
            # only count from starting position until first digit
            break
        elif st[idx].isupper():
            total += 1
    return total

答案 2 :(得分:0)

返回特定索引后直到数字

的大写字母出现的函数
def cap(stringa, start, x=0):
    for i in stringa[start:]:
        if i.isdigit():
            break
        elif i.isalpha() and i == i.upper():
            x += 1
    return x


print(cap("ABCDD1D", 3))

<强>输出:

  

<强> 2

答案 3 :(得分:0)

首次计算one-liner之后第一个sum()的位置时,您可以使用generator digitn表达式执行此操作:

def upperCase(st, n):
    return sum(1 for c in st[n:next(st.index(c) for c in st[n:] if c.isdigit())] if c.isupper())

并且一些测试显示它正常工作:

>>> upperCase("ABCDD1A", 3)
2
>>> upperCase("ABCD6GG", 3)
1
>>> upperCase("ABCD6GG", 0)
4