您正试图使用buggy绘图代码绘制buggy函数。你需要单独调试它们,而不是一起调试。让我们从函数开始。如果我们看这三个区间的开头,-7,-1,和3并对它们调用f1(),我们得到:-7 -> 0.0
-1 -> division by zero
3 -> division by zero
在第一种情况下,在循环开始之前,绘图从不以f1(startf11)是> stopf11aka-3开始:
^{pr2}$
在另外两种情况下,由于被零除为except ZeroDivisionError:
continue
不能解决这个问题。所以没有阴谋。这可能并不重要,因为绘图代码本身不起作用。所有三个f1*函数(它们是相同的,没有意义)都可以:while y <= stop:
但是y从未改变,所以它是一个无限循环。注释掉的y += step会有所帮助,但在代码中的位置不同。此外,它还试图为每个屏幕像素绘制100个值!这可以通过改变坐标系来适应,但我不会在这里讨论,只要将每个屏幕像素的值减少到10个,就可以加快结果。在
让我们用一个更简单的测试函数重新开始绘制代码:def f1(x):
return x
让它成功地策划。以下是我对绘图代码的修改:from turtle import Turtle, Screen
def f1(x):
return x # dummy test plot
wn = Screen()
mypen = Turtle(visible=False)
mypen.speed('fastest')
mypen.penup()
def f11(start, stop, step):
y = f1(start)
while y <= stop:
try:
mypen.setpos(f1(start) * 25, y * 25)
mypen.dot()
y += step
except ZeroDivisionError:
continue
step = 0.1 # increased from 0.01 for debugging/speed
startf11 = -7
stopf11 = -3
f11(startf11, stopf11, step)
startf12 = -1
stopf12 = 1
f11(startf12, stopf12, step)
startf13 = 3
stopf13 = 7
f11(startf13, stopf13, step)
wn.exitonclick()
测试结果如下:
这对我们的测试功能来说是合理的。现在,您可以更改坐标系以获得更高分辨率的绘图和/或使用工作绘图仪调试f1()函数。在