我对您在附带图片中看到的问题遇到了麻烦。由于我在Python中的知识非常少,所以我很难找到从这个问题开始的地方。特别是,如何根据该公式制作功能?用户必须能够输入x_i和x_(i-1)的值。所有答案将不胜感激。我不希望得到完整答案,只是想一想如何开始这个......
答案 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
值列表。
现在我们知道如何声明函数,以及如何调用函数,剩下的就是数学。问题是我们需要总结系列的术语。我们的第一步是以方便的方式创建这些术语。该系列从1
到n-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 comprehension
和python 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表达式库并选择最适合你的那个。