大学的Python课程有一道期中考试例题,要求用Python实现如下功能:
给定一列表,内含变量皆为浮点数。
无论其具有奇数项或偶数项,返回奇数项之和与偶数项之和的差。
起初思路如下:
- 使用
n = len(x)判断列表的项数 - 用
pair = n // 2判断奇偶对的数量 - ……
- 然而,出问题了——如果列表包含奇数项,则奇数项的个数和偶数项不等。
于是,不得不改变了思路——先(通过求模)判断列表项数,若是奇数项,在末尾补一个0将其变为偶数项,且不影响计算结果。
由此可得如下代码:
x = [2, -3.1, 4.2, 6.7, 5.5, 3.4]
def q4_func(x):
if (len(x) % 2 == 1):
x.append(0) n = len(x) // 2
a = 0
b = 0
for i in range(0, n, 1):
a += x[(i * 2)]
b += x[(i * 2) + 1]
result = a - b
return result
后记:
其实在考试的45分钟里,我用了近30分钟来应付这道题(前三题没有太高难度)。如果没有一个更简便的思路来解决这个问题,恐怕再有30分钟也不够……