2015-06-02 20 views
0

`我正在爲終端使用創建個人圖形系統。類去如下:python:終端函數繪圖類中的小邏輯錯誤

import parser 
def ev(n, x): 
code = parser.expr(n).compile() 
return eval(code) 


class Graph: 
def __init__(self, length, width): 
    self.l = length 
    self.w = width 
    self.graph = [['-' for x in range(self.w)] for x in range(self.l)] 
def draw(self): 
    for i in range(self.l): 
     temp = [] 
     for j in range(self.w): 
      temp.append(self.graph[i][j]) 
     print ''.join(temp) 

def add(self, f): 
    y = [] 
    for i in range(self.w): 
     y.append(ev(f, i)) 
    top = max(y) 
    bot = min(y) 
    print y 
    scale = (top - bot)/self.l 
    print scale 

    adj = 0 
    for i in range(self.l,0,1): 
     adj = bot + (i * scale) 
     for j in y: 
      if j >= adj & j < adj + scale: 
       self.graph[i][j] = 'X' 

所有運行良好,除了該加載模塊,它從一個預定義的函數創建了一個範圍的y值的解析在過去6線的方程,即「X ** 2」代碼,失敗,圖形陣列中沒有點被修改爲「X」

是否有人會這麼好心或許運行和協助,這將是偉大

+0

格式正確的問題,並使用正在使用的編程語言進行標記。 –

回答

0

有幾個問題:

scale = (top - bot)/self.l 

根據您的版本的Python這可能會做一個整數除法,所以轉換爲浮動,以確保你不四捨五入爲零:

scale = (top - bot)/float(self.l) 

另外,減1可避免off-by-one error(從第一個元素迭代到最後一個元素時,n個元素的數組有n-1個步驟)。

scale = (top - bot)/float(self.l-1) 

你的範圍是不正確的(第一個參數是初始值)

for i in range(0,self.l,1): 

最後,&應該是一個and&是按位與運算符)

if j >= adj and j < adj + scale: 
0

的問題是在這條線:

for i in range(self.l,0,1): 

range(some_positive_value, 0, 1)將產生空列表;您可能需要range(0, self.l, 1),這相當於range(self.l)。有關更多信息,請在python控制檯中鍵入help(range)。對於3以上的Python版本,也使用xrange而不是range