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

Posted

技术标签:

【中文标题】为啥我的 Python 测试用例在这个编码挑战中失败了?【英文标题】:Why is my Python test case failing in this coding challenge?为什么我的 Python 测试用例在这个编码挑战中失败了? 【发布时间】:2019-12-27 19:58:36 【问题描述】:

问题来了:

给定一个字符串,返回该字符串的次数 子字符串长度 2 出现在字符串中,也作为最后 2 个字符出现 字符串,所以 "hixxxhi" 产生 1(我们不会计算结尾 子字符串)。

last2('hixxhi') → 1 last2('xaxxaxaxx') → 1 last2('axxaaxx') → 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。为什么会这样?

【问题讨论】:

【参考方案1】:

在扫描匹配项之前,您要从字符串中删除最后两个字符。所以excl_last2 = 'xx' 在那个测试用例中,那里只有一个匹配项。

您应该只删除最后一个字符,而不是最后两个字符。

顺便说一句,您不应该使用标准函数的名称作为变量名。 strcount 是标准的内置函数

您可以在第一个循环中进行计数,而不是构建子字符串列表。

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  

【讨论】:

【参考方案2】:
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 的逻辑 失败测试用例的解释;根据建议我修改了它,现在它似乎通过了所有测试用例。

【讨论】:

以上是关于为啥我的 Python 测试用例在这个编码挑战中失败了?的主要内容,如果未能解决你的问题,请参考以下文章

测试用例在完成 beforeAll 之前执行。?

使用 UI 测试用例在 android studio 中运行测试

丢帧测试用例在 Qual-E 中失败

测试用例在 docker windows 控制台中使用 https 失败 vstest.console.exe

有没有办法为 JUnit 测试用例在内存中运行 MySQL?

解决用try except 捕获assert函数产生的AssertionError异常时,导致断言失败的用例在测试报告中通过的问题