2011-03-04 100 views
0

编写函数sinusoid(a, w, n),它将返回一个有序对的列表,表示n个具有振幅a和频率w的正弦曲线的周期。每个周期应该包含180个有序对。python中的正弦曲线

到目前为止,我有:

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

这功课吗?如果显示你应该这样标记它。 – JoshAdel

+0

该函数不返回有序对的列表! –

+1

您不必每次都创建一个不同的名称。尽管如此,这是更好的措辞。 http://stackoverflow.com/users/645398/bailey – OscarRyz

回答

2

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

不知道“有序对”究竟是什么意思,但我会假设它意味着x,y对。目前您只返回单个值的列表。你也可以看看Python的sin函数的文档。

2

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

的说明:

编写函数sinusoid(a, w, n)将返回代表与幅度和频率ω的正弦曲线的N个周期有序对的列表。每个周期应该包含180个有序对。

...翻译成要求子弹列表:

  • 写一个函数
  • ...命名sinusoid()
  • ...取三个参数:aw,并n
  • 返回列表
  • ... 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 times 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) 

。坦率地说,这似乎不太可能。 (如果尝试以这种方式将内部循环扁平化为外部循环,则可能会发现您不得不使用模运算来将n退出以用于其他中间计算目的)。

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

但是,好像你可能会从一个函数定义的存根开始,尝试粘贴这些循环体中的一个或另一个,然后找出如何在我使用“某些东西”的部分实际返回有意义的值,作为占位符。

的假设去,这些“有序对”为坐标,用于绘制,那么它很可能是你们每个人追加到结果的事情应该是这样的形式(x,y)其中x是单调递增的(奇特的方式说它继续上涨,永远不会下降),甚至可能总是range(0,n*180)y可能是math.sin()涉及aw ......但这只是我的猜测。