我正在尝试创建一个函数,该函数返回字符串中数字前面的字符串中出现的大写字母数。变量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
答案 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
digit
和n
表达式执行此操作:
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