python:终端函数绘图中的小逻辑错误 class

python: Small Logical Error in a terminal function graphing class

` 我正在创建一个供终端使用的个人图形系统。 class 如下所示:

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 模块,它从预定义函数创建一系列 y 值来解析方程,即最后 6 行代码中的 "x**2",它失败了,图形数组中的所有点都没有修改为'X'

如果有人愿意 运行 提供帮助,那就太好了

问题出在这一行:

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.

有几个问题:

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: