我正在编写一个函数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
将
d = [j[:1]]
更改为d = j[:1]
。在g = list(abs(x - 55) for x in k)
变量x
是一个列表,因为d = [j[:1]]
。在相关问题 更多 >
编程相关推荐