调试后修复功能
Fixing function after debugging
我正在尝试调试和修复这个函数,当深度为 2 时,它应该绘制资本 "i"。我想我使用 pdb.set_trace() 发现了问题,但不太确定如何整体解决。这个函数的结果是资本的一半"i"。无论如何,我尝试通过更改它来修复函数,它会把它弄得更糟...这是函数。
from turtle import *
import pdb
def initWindow( size ):
setup(600,600)
setworldcoordinates( -size-1, -size-1, size, size )
left(90)
pensize(3)
speed(0)
def drawI(depth, size):
if(depth < 1):
pass
else:
pdb.set_trace()
fd(size/2)
lt(90)
drawI(depth-1,size/2)
rt(90) ###############HERE
fd(-size/2)
lt(90)
drawI(depth-1,size/2) #Where it seems to be the problem
rt(90)
def main():
size = 100
depth = int(input("enter depth: "))
initWindow(size)
drawI(depth, size)
input("enter to quit")
main()
我的一个问题是为什么第二个 drawI(depth-1,size/2) 被忽略并转到 rt(90) 然后回到#HERE?
您需要指定前进命令,使乌龟从线的中心开始,在它前面画一半线,在它后面画一半线。像这样:
def drawI(depth, size):
if(depth < 1):
pass
else:
#draw the half in front of the turtle
fd(size/2)
#draw head
lt(90)
drawI(depth-1,size/2)
rt(90)
#return to center
fd(-size/2)
#draw the half behind the turtle
fd(-size/2)
#draw head
lt(90)
drawI(depth-1,size/2)
rt(90)
#return to center
fd(size/2)
您的原始代码在行尾启动了 turtle,当您递归到较低深度时会导致异常结果。
我正在尝试调试和修复这个函数,当深度为 2 时,它应该绘制资本 "i"。我想我使用 pdb.set_trace() 发现了问题,但不太确定如何整体解决。这个函数的结果是资本的一半"i"。无论如何,我尝试通过更改它来修复函数,它会把它弄得更糟...这是函数。
from turtle import *
import pdb
def initWindow( size ):
setup(600,600)
setworldcoordinates( -size-1, -size-1, size, size )
left(90)
pensize(3)
speed(0)
def drawI(depth, size):
if(depth < 1):
pass
else:
pdb.set_trace()
fd(size/2)
lt(90)
drawI(depth-1,size/2)
rt(90) ###############HERE
fd(-size/2)
lt(90)
drawI(depth-1,size/2) #Where it seems to be the problem
rt(90)
def main():
size = 100
depth = int(input("enter depth: "))
initWindow(size)
drawI(depth, size)
input("enter to quit")
main()
我的一个问题是为什么第二个 drawI(depth-1,size/2) 被忽略并转到 rt(90) 然后回到#HERE?
您需要指定前进命令,使乌龟从线的中心开始,在它前面画一半线,在它后面画一半线。像这样:
def drawI(depth, size):
if(depth < 1):
pass
else:
#draw the half in front of the turtle
fd(size/2)
#draw head
lt(90)
drawI(depth-1,size/2)
rt(90)
#return to center
fd(-size/2)
#draw the half behind the turtle
fd(-size/2)
#draw head
lt(90)
drawI(depth-1,size/2)
rt(90)
#return to center
fd(size/2)
您的原始代码在行尾启动了 turtle,当您递归到较低深度时会导致异常结果。