我正在尝试编写一个代码,如果给定的字符串最多连续2个c,并且最大值为1 b,则打印True。我正在使用递归来减少字符串并检查最大值' c'两次出现在同一个索引中。但是我的递归并没有停止,直到它清空整个列表。你能否说一下我的代码有什么问题?谢谢!
def stringcond(N,count=0,k=0):
N=list(N)
if(N.count('b')>1):
return False
if len(N)<2:
return True
else:
for i,j in enumerate(N):
if(j=='c'):
del N[i]
count+=1
if(k==i and count>2):
return False
stringcond(N,count=count,k=i)
return True
答案 0 :(得分:0)
您必须使用字符串调用的结果。现在,您的函数将只返回在顶级调用中确定的任何内容。
答案 1 :(得分:0)
你有几个错误。首先,为什么要将字符分成列表?字符串有一个非常好的 count 方法。
您的递归失败,因为您忽略了返回值。你会想要像
这样的东西if not stringcond(N,count=count,k=i):
return False
# I make no claim that this logic is correct.
无论如何,没有必要再发生。使用计数来检查&#34; b&#34;的数量还有很多 - &#39; c&#39;子:
def stringcond(s, c_max=0):
return s.count('b') <= 1 and \
s.count("c" * (c_max+1)) == 0