根据公式(Python)创建函数

时间:2013-09-24 17:44:04

标签: python function math formula

我对您在附带图片中看到的问题遇到了麻烦。由于我在Python中的知识非常少,所以我很难找到从这个问题开始的地方。特别是,如何根据该公式制作功能?用户必须能够输入x_i和x_(i-1)的值。所有答案将不胜感激。我不希望得到完整答案,只是想一想如何开始这个......

Here is the question

2 个答案:

答案 0 :(得分: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

嗯。还有另一种方法可以做到这一点。许多循环结构可以替换为 列表理解,因为这可以。尝试用Google搜索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]))

答案 1 :(得分:0)

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

但是如果你需要将String中的公式转换为工作代码,则需要一个解析器和表达式求值器。我建议使用Google搜索Python表达式库并选择最适合你的那个。