python:终端函数图表类

时间:2015-06-02 05:54:32

标签: python function math graphing

`我正在为终端使用创建一个个人图形系统。课程如下:

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'

除了add模块之外都运行良好,add模块从预定义函数创建一系列y值来解析一个等式,即&#34; x ** 2&#34;在最后6行代码中,它失败了,图表数组中没有任何点被修改为&#39; X&#39;

如果有人愿意跑步和协助,那就太棒了

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

有一些问题:

scale = (top - bot)/self.l

根据您的Python版本,这可能会执行整数除法,因此强制转换为浮点数以确保不向下舍入为零:

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

此外,减去一个可以避免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: