Python 不确定在我的其他函数中的何处调用我的函数以计算字符串中出现的次数

Python 不确定在我的其他函数中的何处调用我的函数以计算字符串中出现的次数,python,Python,在第二个函数中,我遇到了一个调用第一个函数的问题。 该程序应显示xxxx、xxxo、xxoo(等,直到用尽所有可能)。“可接受”只应使其显示x和o数量相等的区域。但是由于我的教授在第二个函数中给我们的代码中使用了递归,我不知道在哪里调用第一个函数来不显示特定的代码行,因为无论我把它放在哪里,它都不起作用 提前感谢您的帮助。只需使用它测试HT()返回的列表中的每个字符串即可: 输出 #! /usr/bin/env python def acceptable(s=' '): b = s.c

在第二个函数中,我遇到了一个调用第一个函数的问题。 该程序应显示xxxx、xxxo、xxoo(等,直到用尽所有可能)。“可接受”只应使其显示x和o数量相等的区域。但是由于我的教授在第二个函数中给我们的代码中使用了递归,我不知道在哪里调用第一个函数来不显示特定的代码行,因为无论我把它放在哪里,它都不起作用


提前感谢您的帮助。

只需使用它测试
HT()返回的列表中的每个字符串即可:

输出

#! /usr/bin/env python

def acceptable(s=' '):
    b = s.count('x')
    c = s.count('o')
    return b == c

def HT(n, s='', result=[]):
    if n == 0:
        result.append(s)
    elif n > 0:
        for c in [ 'x', 'o' ]:
            result = HT(n-1, s+c, result)
    return result

def main():
    n = 4
    for s in HT(n):
        if acceptable(s):
            print s

if __name__ == '__main__':
    main()
您将看到我稍微简化了
acceptable()
(并将缺少的
放在其
def
语句的末尾)。做

与之相比过于冗长和混乱

if someCondition:
    return True
else:
    return False
FWIW,我们可以进一步简化
acceptable()

return someCondition


关于教授在
HT()
的定义中使用
result=[]
:是的,这类事情可能会导致错误,但在这种情况下,给这个递归函数一个可以累积结果的列表实际上是一种有用的方法。但是,由于这种技术可能很危险,因此最好对代码进行注释,这样人们就会知道您有意使用Python的“功能”。

旁白:使用可变对象(如列表)作为默认值是不好的做法,如
result=[]
——如果您的教授编写了该函数,他应该,是的,他可能应该。那么我能做什么?@DSM:通常情况下,这是件坏事™, 但在这种情况下没关系。但正如我在回答中提到的,这样注释代码是个好主意,这样阅读代码的人就知道你知道自己在做什么。:)您不需要有一个默认值
[]
,就可以递归地给它一个列表。通常的习惯用法是写
result=None
,如果result为None,则写
:result=[]
。@DSM:Good point。我通常在我的节目中这样做…:咕哝:)
if someCondition:
    return True
else:
    return False
return someCondition
def acceptable(s):
    return 2 * s.count('x') == len(s)