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:
` 我正在创建一个供终端使用的个人图形系统。 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: