[英]Why is my Python test case failing in this coding challenge?
这是问题所在:
给定一个字符串,返回长度为 2 的子字符串在字符串中出现的次数以及字符串的最后 2 个字符的计数,因此“hixxxhi”产生 1(我们不会计算结束子字符串)。
last2('hixxhi') → 1 last2('xaxxaxaxx') → 1 last2('axxxaaxx') → 2
我的解决方案::
def last2(str):
excl_last2 = str[:-2];
list_excl_last2=[];
for i in range(len(excl_last2)-1):
list_excl_last2.append(excl_last2[i:i+2]);
count = 0;
for i in list_excl_last2:
if str[-2:] == i:
count = count + 1;
return count;
它通过所有测试用例,除了 if str = 'xxxx' 。 我的程序返回 1。预期的输出是 2。为什么会发生这种情况?
在扫描匹配项之前,您要从字符串中删除最后两个字符。 所以在那个测试用例中excl_last2 = 'xx'
,那里只有一个匹配项。
您应该只删除最后一个字符,而不是最后两个字符。
顺便说一句,您不应该使用标准函数的名称作为变量名称。 str
和count
是标准的内置函数
您可以在第一个循环中进行计数,而不是构建子字符串列表。
def last2(string):
excl_last1 = string[:-1];
last2 = string[-2:]
ct = 0
for i in range(len(excl_last2)-1):
if excl_last2[i:i+2] == last2:
ct += 1
return ct
def last2(str):
last2chars = str[len(str)-2:];
count=0;
for i in range(len(str)-2):
if str[i:i+2]==last2chars:
count = count + 1;
return count;
上面的代码通过了所有的测试用例。 感谢 Barmar 对失败的测试用例的合乎逻辑的解释; 根据我的建议修改了它,现在它似乎通过了所有测试用例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.