为什么我的Python测试用例在这个编码挑战中失败了?

为什么我的Python测试用例在这个编码挑战中失败了?,python,Python,问题是: 给定一个字符串,返回 子字符串长度2显示在字符串中,也作为最后2个字符 所以“hixxxhi”产生1(我们不计算结尾) 子字符串) last2('hixxhi')→ 1 last2('xaxxaxx')→ 1 last2('axxxaaxx')→ 二, 我的解决办法是: def last2(str): excl_last2 = str[:-2]; list_excl_last2=[]; for i in range(len(excl_last2)-1): list

问题是:

给定一个字符串,返回 子字符串长度2显示在字符串中,也作为最后2个字符 所以“hixxxhi”产生1(我们不计算结尾) 子字符串)

last2('hixxhi')→ 1 last2('xaxxaxx')→ 1 last2('axxxaaxx')→ 二,

我的解决办法是:

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;