`我正在为终端使用创建一个个人图形系统。课程如下:
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;
如果有人愿意跑步和协助,那就太棒了
答案 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: