2011-03-04 101 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 ......但這只是我的猜測。