Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python can';t生成一个对树中的非终结节点进行计数的程序_Python_Python 3.x_Recursion_Spyder - Fatal编程技术网

Python can';t生成一个对树中的非终结节点进行计数的程序

Python can';t生成一个对树中的非终结节点进行计数的程序,python,python-3.x,recursion,spyder,Python,Python 3.x,Recursion,Spyder,这是一个语法树,它以代码的形式看起来像这样 我的程序应该计算树上非终端节点的数量。其思想是每棵树都是一个2元组。在第一个位置上,母节点是一个字符串,在第二个位置上,如果有终端节点,则是一个字符串,或者是一个包含母节点子树的列表。它们是递归的程序应计算非终端节点的数量。 因此结果应该是一些非终结节点,例如9 据我所知,我应该使用递归来实现这一点。但是有一些事情我没有正确地做,使我的程序工作。我的代码是: tuple_list = [] second_tuple_elements = [a_tup

这是一个语法树,它以代码的形式看起来像这样

我的程序应该计算树上非终端节点的数量。其思想是每棵树都是一个2元组。在第一个位置上,母节点是一个字符串,在第二个位置上,如果有终端节点,则是一个字符串,或者是一个包含母节点子树的列表。它们是递归的程序应计算非终端节点的数量。 因此结果应该是一些非终结节点,例如9

据我所知,我应该使用递归来实现这一点。但是有一些事情我没有正确地做,使我的程序工作。我的代码是:

tuple_list = []
second_tuple_elements = [a_tuple[1] for a_tuple in tuple_list]
print(second_tuple_elements)
def nonterminal(count):

    if second_tuple_elements == type(""):

        return 1

    if second_tuple_elements == type([]):
        for element in list:
            if element == type (""):
                return 1
            nonterminal = second_tuple_elements + element
这里有一个解决方案:

def count_nodes(tree):
    count = 0

    if isinstance(tree, str):
        return 0
    node, rest = tree 
    count +=1 
    for subtree in rest: 
        count += count_nodes(subtree)

    return count
这里有一个解决方案:

def count_nodes(tree):
    count = 0

    if isinstance(tree, str):
        return 0
    node, rest = tree 
    count +=1 
    for subtree in rest: 
        count += count_nodes(subtree)

    return count

程序中没有递归调用-

def node_计数(node):
母亲,子女=节点#获取部分节点元组
if isinstance(子节点,str):#终端节点的母亲
返回1#返回1数一数这位母亲
else:#非终端节点的母亲
返回1+\ \返回1+1。。。
sum(子节点中x的node_count(x)#每个子节点_count的总和
我的树=\
('S',[('NP',[('ART','die'),('N','Katze')),('VP',[('V','jagt'),('NP',[('ART','die'),('N','Vögel')]))
打印(节点计数(我的树))
# 9

程序中没有递归调用-

def node_计数(node):
母亲,子女=节点#获取部分节点元组
if isinstance(子节点,str):#终端节点的母亲
返回1#返回1数一数这位母亲
else:#非终端节点的母亲
返回1+\ \返回1+1。。。
sum(子节点中x的node_count(x)#每个子节点_count的总和
我的树=\
('S',[('NP',[('ART','die'),('N','Katze')),('VP',[('V','jagt'),('NP',[('ART','die'),('N','Vögel')]))
打印(节点计数(我的树))
# 9

您说希望使用递归,但在代码中没有使用任何递归。还有一个澄清问题:元组中的第二个元素是元组列表还是终端字符串列表?。如果您在
tuple\u list
中提供一个示例输入,那么就更容易了,这样我们就可以处理您的示例谢谢您的反馈,我太困惑了,我以为这是我在做的递归。第二个元素是字符串列表。这个例子是这样的:print(node_count(('S',[('NP',[('ART','die'),('N','Katze')),('VP',[('V','jagt'),('NP',[('ART','die'),('N','Vögel'))]),结果应该是9如果你说你想使用递归,但你的代码中没有使用任何递归。还有一个澄清问题:元组中的第二个元素是元组列表还是终端字符串列表?。如果您在
tuple\u list
中提供一个示例输入,那么就更容易了,这样我们就可以处理您的示例谢谢您的反馈,我太困惑了,我以为这是我在做的递归。第二个元素是字符串列表。示例如下所示:print(节点计数(('S',[('NP',[('ART','die'),('N','Katze')),('VP',[('V','jagt'),('NP',[('ART','die'),('N','Vögel'))]),结果应该是9)