Python 检验不纯函数

Python 检验不纯函数,python,python-2.7,testing,Python,Python 2.7,Testing,作为在线编程课程()的一部分,我被要求()创建一个函数,satisfiesF(L),该函数使用f过滤L,然后返回L的长度 f是为我定义的一个函数,它为应该保留在列表中的项目返回True 其余列表项的顺序应与以前相同 我已经为这个问题写了两个解决方案,测试了它们,并提交了它们,但都被拒绝了。没有提供任何理由,因为该问题旨在测试我们提出自己的测试用例的能力。出于这个原因,请不要提供工作代码,而是告诉我出了什么问题。我认为目前有3种主要的可能性: 我误解了这个问题 我犯了一个微妙的编程错误 ed

作为在线编程课程()的一部分,我被要求()创建一个函数,
satisfiesF(L)
,该函数使用
f
过滤
L
,然后返回
L
的长度

  • f
    是为我定义的一个函数,它为应该保留在列表中的项目返回
    True
  • 其余列表项的顺序应与以前相同
我已经为这个问题写了两个解决方案,测试了它们,并提交了它们,但都被拒绝了。没有提供任何理由,因为该问题旨在测试我们提出自己的测试用例的能力。出于这个原因,请不要提供工作代码,而是告诉我出了什么问题。我认为目前有3种主要的可能性:

  • 我误解了这个问题
  • 我犯了一个微妙的编程错误
  • edX在测试用例中出错(不太可能)
以下是我的两个解决方案:

def satisfiesF(L):
    L[:] = [i for i in L if f(i)]
    return len(L)

以下是问题的详细描述:

编写一个名为
satisfiesF
的Python函数,该函数具有该规范 在下面然后进行函数调用
运行\u satisfiesF(L,satisfiesF)
。你的 代码应该如下所示:

def satisfiesF(L):
    """
    Assumes L is a list of strings
    Assume function f is already defined for you and it maps a string to a Boolean
    Mutates L such that it contains all of the strings, s, originally in L such
            that f(s) returns True, and no other elements. Remaining elements in L
            should be in the same order.
    Returns the length of L after mutation
    """
    # Your function implementation here

run_satisfiesF(L, satisfiesF)
例如,有关您自己对
满意度f
的测试,请参阅以下测试函数
f
和测试代码:

def f(s):
    return 'a' in s

L = ['a', 'b', 'a']
print satisfiesF(L)
print L
应打印:

2
['a', 'a']
将整个函数
satisfiesF
,包括定义,粘贴到下面的框中。定义函数后,对
run\u satisfiesF(L,satisfiesF)
进行函数调用。不要定义
f
运行满意度f
。不要留下任何调试打印语句

对于这个问题,您将无法看到我们运行的测试用例。这个问题将测试您提出自己的测试用例的能力

为了完整起见,下面是我最新的一组测试(我正在使用):

这些测试使用
def(s):按照问题中的建议,在s中返回'a'。我没有用其他函数测试
f
,但我认为这不会影响结果

我试着用
run\u satisfiesF(L,satisfiesF)
替换
satisfiesF(L)
,但测试仍然通过



证明我没有疯:


我无法重现您的问题:

第二:

首先,我也要检查一下

我在想的是:

for i in range(len(L)-1,-1,-1):
    if f(L[i]) != True:
        del(L[i])
return len(L)

也可以查看。

您似乎已经编写了
满意度,而不是
满意度。谢谢@jornsharpe,tobias_k。这些是将代码复制到StackOverflow时出现的错误,并且不会出现在原始代码或我提交给edX的代码中。我现在已经纠正了它们。你们的两种配方都通过了测试并符合规范。注意,我们不能在没有注册的情况下看到这个练习-也许你们应该在课程论坛上提出这个问题?您是否在提交内容中正确缩进了
run_satisfiesF(L,satisfiesF)
行?@jornsharpe:论坛关闭是为了防止人们“意外”发布工作代码。不过,谢谢你看一下,我很高兴不只是我一个人不知道这是怎么回事。为什么投票结果很接近?这个问题怎么会太广泛了?是因为没有人能在代码中找到任何错误,还是因为我在寻求提示?我只是在寻找类似这样的东西:“再看看规范中说“L中的剩余元素应该是相同顺序的。”“WTF?o、 o这正是我输入的()。唯一的区别是评论。我想edX只是讨厌我。可能只是一些混合的制表符/空格缩进或一些严重的故障。我发现如果你完全从ide/文本编辑器中复制你的工作代码,这些测试就可以进行得更好。该错误在
运行\u satisfiesF(L,satisfiesF)
>之前只有一个空格。<很抱歉浪费您的时间。
>>> L = ['bat', 'cat', 'dog', 'elephant']
>>> satisfiesF(L) == len([i for i in L if f(i)])
True
>>> [i for i in L if not f(i)]
[]
>>> L = ['ab', 'b', 'ac']
>>> satisfiesF(L)
2
>>> L
['ab', 'ac']
>>> L = ['a', 'a', 'b']
>>> satisfiesF(L)
2
>>> L
['a', 'a']
>>> L = ['a', 'a', 'a']
>>> satisfiesF(L)
3
>>> L
['a', 'a', 'a']
>>> L = ['b', 'c', 'd', 'a']
>>> satisfiesF(L)
1
>>> L
['a']
for i in range(len(L)-1,-1,-1):
    if f(L[i]) != True:
        del(L[i])
return len(L)