0

我对您在随附图片上看到的问题有疑问。由于我对 Python 的了解很少,我什至很难找到从哪里开始解决这个问题。特别是,如何根据该公式制作函数?用户必须能够输入 x_i 和 x_(i-1) 的值。所有答案将不胜感激。我不期待完整的答案,只是对如何开始这个有一些想法......

这是问题

4

2 回答 2

3

让我们分解一下。首先,如何创建函数pathlength?像这样:

def pathlength(x, y):
    return 42   # The length is 42 miles

如您所见,它接受x,y问题中指定的参数。它不是计算答案,而是返回一个虚构的答案。更多关于如何在一分钟内找到答案。

用户可能调用此函数的方式如下:

length = pathlength([0, 7, 9, 5, 2, 0], [0, 1, 3, 2, 2, 0])

如您所见,我传递了一个x值列表和一个y值列表。

现在我们知道如何声明函数以及如何调用函数,剩下的就是数学。问题是我们需要对一系列的项求和。我们的第一步是以方便的方式创建这些术语。该系列从1n-1(也就是说,总和比我们的数据少一个步骤。

为了表示这些值,我们可以使用切片表示法:

x[1:]  # The X(i) values from 1 to n-1
x[:-1] # The X(i-1) values from 1-1 to n-1-1

同样对于y.

让两个 X 值和两个 Y 值以某种方式相关会很方便。这是一份工作zip

zip(x[1:], x[:-1], y[1:], y[:-1])

zip生成一个元组列表,每个元组是与 的特定值相关的变量i

i现在依次考虑 的每个值:

for xi, xi1, yi, yi1 in zip(x[1:], x[:-1], y[1:], y[:-1]):
    pass

此循环遍历所有条目,但不进行实际数学运算。

现在我们需要使用毕达哥拉斯公式来确定二维距离。

total_distance = 0
for xi, xi1, yi, yi1 in zip(x[1:], x[:-1], y[1:], y[:-1]):
    leg_distance = ((xi-xi1)**2+(yi-yi1)**2)**.5
    total_distance = total_distance + leg_distance

最后,我们需要将该值传达给调用者:

def pathlength(x, y):
    total_distance = 0
    for xi, xi1, yi, yi1 in zip(x[1:], x[:-1], y[1:], y[:-1]):
        leg_distance = ((xi-xi1)**2+(yi-yi1)**2)**.5
        total_distance = total_distance + leg_distance
    return total_distance

唔。还有另一种方法可以做到这一点。许多循环结构可以用列表推导替换,就像这样。尝试谷歌搜索python list comprehensionpython generators确定是做什么的:

def pathlength(x,y):
    return sum(
        ((xi-xi1)**2+(yi-yi1)**2)**.5 
        for (xi, xi1, yi, yi1) in zip(x[1:], x[:-1], y[1:], y[:-1]))
于 2013-09-24T17:48:32.423 回答
0

我没有看到任何图像。没有它很难回答。

但是,如果您需要将字符串中的公式转换为工作代码,则需要解析器和表达式求值器。我建议使用谷歌搜索 Python 表达式库,然后选择最适合您的。

于 2013-09-24T17:48:24.517 回答