【问题标题】:Making a function according to a formula (Python) [closed]根据公式制作函数(Python)[关闭]
【发布时间】:2013-09-24 17:44:04
【问题描述】:

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

【问题讨论】:

  • 你知道如何计算总和吗?你知道如何计算平方根吗?如果两者的答案都是“是”,那么是什么阻碍了您?
  • Python 支持列表结构、数组等,因此您想从那里开始查找 Python 语法和示例。平方根函数只是一个库调用。总和将是一个 Python 循环结构,也很容易在网上找到示例。
  • 对于你的函数的参数 - 阅读 python 列表,然后 - 尝试弄清楚如何制作总和列表(提示 - 阅读列表推导式),这样你就可以制作列表 [4, 5 ] 在 [1, 2] 和 [3, 3] 中,如 [1 + 3, 2 + 3]。 Python 是很有趣的语言,我想你写这个函数不会有麻烦
  • 要将公式转换为代码,请从括号或括号中的值开始计算。在这种情况下,有两个。第一个是两个连续 x 值之间的差异,另一个是 y 值之间的差异。接下来,将这些中的每一个平方,然后相加。然后取它们总和的平方根,等等。您可以编写代码语句来一个接一个地执行这些操作,直到您得到最终值并完成翻译。

标签: python function math formula


【解决方案1】:

让我们分解一下。首先,如何创建函数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 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]))

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2020-05-03
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多