Resolve TypeError“只能将元组(而不是“int”)连接到元组”,该函数用于返回所有求和组合

2024-09-25 00:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python编写一个函数,返回一组k大小的元组,其和为n,我相当确定我已经正确地编写了该函数,但我一直得到我在标题中提到的类型错误

例如,组合(3,4)应返回以下内容: {(1,1,2)、(1,2,1)、(2,1,1)}

def compositions(k, n):
    if k == 1:
        return (n,)
    comp = []
    for SumIterator in range(1, n+1):
        for FunctionRecall in compositions(k = k-1, n = n-SumIterator):
            comp.append((SumIterator,) + FunctionRecall)
    return set(comp)

您知道如何修复此函数以使其正确运行吗

谢谢


Tags: 函数in标题类型forreturnifdef
2条回答

如果函数应该返回一组元组,则需要修改基本情况

if k == 1:
    return (n,)

这不会返回一组元组。它返回一个元组。试着把它放在一套里

if k == 1:
    return {(n,)}

此外,如果不希望任何元组包含零,我认为需要将第一个for循环的边界更改为for SumIterator in range(1, n):

    for FunctionRecall in compositions(k = k-1, n = n-SumIterator):
        comp.append((SumIterator,) + FunctionRecall)

SumIterator是1(SumIterator,)是元组(1,)

内部for循环通过compositions返回的元素运行FunctionRecall,返回的元素可以是元组,也可以是集合或整数。因此,当你达到这一点时,你有:

        comp.append((1,) + 2)

不能“添加”元组和标量。你想在这里干什么。。。元组合成?那就是(1,)+(2,)

相关问题 更多 >