python中的正弦曲线

时间:2011-03-04 20:56:49

标签: python

写出函数sinusoid(a, w, n),它将返回一个有序对的列表,表示振幅为a和频率为w的正弦波的n个周期。每个周期应包含180个有序对。

到目前为止,我有:

def sinusoid(a,w,n):
    return [a*sin(x) for x in range 180]

2 个答案:

答案 0 :(得分:2)

请考虑正弦波的实际功能形式以及频率如何进入等式。 (提示:http://en.wikipedia.org/wiki/Sine_wave)。

不确定“有序对”究竟是什么意思,但我认为它意味着x,y对。目前,您只返回单个值列表。另外,您可能需要查看Python sin函数的文档。

答案 1 :(得分:2)

好的,我们知道这是一项家庭作业,我们不打算为你做。但是,我会给你一些提示。

说明:

写出函数sinusoid(a, w, n),它将返回一个有序对的列表,表示振幅为a和频率为w的正弦波的n个周期。每个周期应包含180个有序对。

...翻译成要求的子弹清单:

  • 写一个函数
  • ...名为sinusoid()
  • ......提出三个论点:awn
  • 返回列表
  • ... n个循环(?)
  • ...(每个由?组成?)180“有序对”

您给出的示例确实通过正确的名称定义了一个函数,并获取了正确数量的参数。这是一个开始(坦白说,不是很多,但它是一些东西)。

显而易见的缺点是它不使用所需的两个参数,并且它不返回任何对的参数。它似乎会返回180个数字,这些数字基于提供给它的第一个参数的参数。

当然,你可以做得更好。

让我们从存根开始:

def sinusoid(a, w, n):
    '''Return n cycles of the sinusoid for a given amplitude and frequence
       where each cycle consists of 180 ordered pairs
    '''
    results = list()
    # do stuff here
    return results

这是一个函数,接受三个参数并返回一个列表。现在我们要在返回它之前包含任何内容,我们必须向它添加一些东西......并且指令告诉我们应该返回多少东西(n乘以180)以及它们有什么样的东西应该是(有序对)。

这听起来有点像我们需要一个循环(对于n)和另一个(对于180)。嗯......

这可能看起来像:

for each_cycle in range(n):
    for each_pair in range(180):
        # do something here
        results.append(something) # where something is a tuple ... an "ordered pair"

...或者它可能看起来像:

for each_cycle in range(n):
    this_cycle = list()
    for each_pair in range(180):
        this_cycle.append(something)
    results.extend(this_cycle)

......或者甚至可能看起来像:

for each_pair in range(n*180):
    results.append(something)
但是,坦率地说,这似乎不太可能。 (如果您尝试以这种方式将内循环展平到外循环,您可能会发现您必须使用模运算来退出以用于其他一些中间计算目的)。

我不知道教练的实际要求是什么。似乎可能涉及math.sin()函数,我猜“有序对”可能是映射到某种图形子系统的坐标,适合绘制图形。我猜其中有180个是通过其全部值来显示正弦波。也许你应该用幅度乘以某些东西和/或用频率划分别的东西,也许你甚至应该为每个循环添加一些东西...某种偏移以保持情节向右移动或者某种东西

但似乎你可能从函数定义的存根开始,尝试粘贴这些循环体中的一个或另一个,然后弄清楚如何在我使用“某事”的部分中实际返回有意义的值占位符。

假设这些“有序对”是坐标,用于绘图,那么您附加到结果中的每一项内容似乎都应该是(x,y)形式{{1}单调增加(说它持续上升,永远不会下降的幻想方式)甚至可能永远是xrange(0,n*180)可能y涉及的内容math.sin()a ......但这只是我的推测。