我对您在随附图片上看到的问题有疑问。由于我对 Python 的了解很少,我什至很难找到从哪里开始解决这个问题。特别是,如何根据该公式制作函数?用户必须能够输入 x_i 和 x_(i-1) 的值。所有答案将不胜感激。我不期待完整的答案,只是对如何开始这个有一些想法......
2 回答
让我们分解一下。首先,如何创建函数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
唔。还有另一种方法可以做到这一点。许多循环结构可以用列表推导替换,就像这样。尝试谷歌搜索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]))
我没有看到任何图像。没有它很难回答。
但是,如果您需要将字符串中的公式转换为工作代码,则需要解析器和表达式求值器。我建议使用谷歌搜索 Python 表达式库,然后选择最适合您的。