2014-02-19 25 views
-1

創建一個方法plot(window, expression, color = "black")來繪製 窗口中的表達式。 這是我做了什麼:窗口中的繪圖函數

from math import * 
from graphics import * 
win = GraphWin() 

def plot(window, expression, color = "black"): 
    #Evaluates given expression and plots it in "window". Returns the list of all the          plotted points. 

    points = [] 

    #Evalute expression over 1000 different values and for each (x,y) pair plot the point. 

    for i in range(0, 1001): 
     try: 
      x = i/100.0 
      y = eval(expression) 
      plot(x,y) 

     except Exception: 
      print("For ", x, " the expression is invalid") 

    return points 

所以我想我做錯了什麼。有人能幫我嗎? :)

+2

你爲什麼猜測你做錯了什麼?你有錯誤嗎(提供完整的追溯)?意想不到的產出(提供投入,預期和實際產出)? – jonrsharpe

+0

有什麼不對?錯誤信息 ?意外的行爲? – hivert

+0

似乎你忘了使用你在函數開頭定義的'points'列表? –

回答

0

看着你的代碼,你有一個稱爲plot的函數調用plot - 這是因爲從某處import *的經典錯誤。

我懷疑你正試圖調用plot.plot內所以擺脫從圖形導入*並把圖形。在您從那裏使用的項目之前。

您還沒有填寫或使用您的積分列表。

0

有幾個明顯的問題:在年底

  1. 您創建的points列表,從來沒有把任何東西進去,然後return它(仍然是空的);和
  2. 對於每個單獨的點x, y你再打電話plot遞歸(見史蒂夫巴恩斯的答案),傳遞xwindowyexpression

我建議你將它分成兩部分:一部分根據函數創建一個點列表,另一部分繪製這個點列表。

0
  1. 不使用名稱plot作爲自己的函數名,如果你有import *這將遮蔽matplotlib.pyplot.plot方法名。

  2. 的matplotlib plot方法用於創建線路,這需要一系列 X和Y每次調用時間。例如,plot(1,2)plot([1], [2])將在圖中繪製沒有任何,而plot([1,2], [3,4])繪製了點(1,3)和(2,4)之間的線。如果你堅持每次繪製一點,你需要撥打scatter(1, 2)