Python:TypeError:“list”和“int”的操作数类型不受支持

2024-09-30 06:28:37 发布

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

我正在编写一个函数delta,它有两个参数:电话簿的分区和包含电话用户姓氏首字母分布的列表或元组。此函数必须返回电话簿的给定分区的增量,以指定电话用户姓氏的首字母分布。在

A  B C  D  E  F G H I J  K L  M  N 0 P Q R  S  T U V W X Y Z
16 4 17 10 15 4 4 6 7 14 9 17 27 6 1 9 0 12 20 8 0 3 4 0 3 4

例如:总共有220个名字,电话公司决定印刷4卷。理想情况下,每个卷都应该包含220 / 4 = 55名称。一种可能的分区是A-D E-jk-opp-Z,其计数为47、50、60和63个名称。在绝对值上,这些计数会偏离8、5、5和8个名称,而不是理想的每卷55个名称。我们将这些偏差的总和称为电话簿分区的增量。对于这种划分,delta等于26。在

我的代码中有以下错误:

^{pr2}$

有人知道我做错了什么吗?错误似乎出现在最后一个函数delta()的最后几行。我也尝试过将列表中的元素设置为整数或字符串,但它仍然不起作用。在

def counts(seq):
    '''
    >>> counts('A-D E-J K-O P-Z')
    (4, 6, 5, 11)
    >>> counts('A-G H-O P Q-Z')
    (7, 8, 1, 10)
    >>> counts('A-D E-K L-P Q-Z')
    (4, 7, 5, 10)
    >>> counts('A-D F-K L-P Q-Z')
    Traceback (most recent call last):
    AssertionError: invalid partitioning
    '''
    r = str(seq)

    input_string = r.split(' ')

    q = []
    for dletter in input_string:
        if '-' in dletter:
            q.append(ord(dletter[2]) - ord(dletter[0]) + 1)
        else:
            q.append(1)


    assert sum([x for x in q]) == 26, "invalid partitioning"

    chars = "abcdefghijklmnopqrstuvwxyz"
    chars = chars.upper()
    for char in chars:
        count = r.count(char)
    assert count == 1, "invalid partitioning"

    return (tuple(q))


def delta(seq, names):
    '''
    >>> names = (16, 4, 17, 10, 15, 4, 4, 6, 7, 14, 9, 17, 27, 6, 1, 9, 0, 12, 20, 8, 0, 3, 4, 0, 3, 4)
    >>> delta('A-D E-J K-O P-Z', names)
    26.0
    >>> delta((7, 8, 1, 10), names)
    94.0
    >>> delta('A-D E-K L-P Q-Z', names)
    18.0
    >>> delta(42, names)
    Traceback (most recent call last):
    AssertionError: invalid partitioning
    '''

    r = counts(seq)

    import itertools
    q = list(itertools.accumulate(r))

    j = list()

    for i in q:
        f = sum(names[:i])
        j.append(f)

    s = [t - s for s, t in zip(j, j[1:])]
    d = [j[:1]]

    k = d + s

    g = list(abs(x - 55) for x in k)

    n = float(sum(g))

    return n

Tags: 函数in名称fornamesseqdelta分区
1条回答
网友
1楼 · 发布于 2024-09-30 06:28:37

d = [j[:1]]更改为d = j[:1]。在

g = list(abs(x - 55) for x in k)变量x是一个列表,因为d = [j[:1]]。在

相关问题 更多 >

    热门问题