thinkpython 练习题4.3

来源:互联网 发布:世界杯门票 知乎 编辑:程序博客网 时间:2024/06/05 15:57

#先要导入模块swampy.TurtleWorld等等,可以参考我的另一篇文章


#题1

from swampy.TurtleWorld import*



world=TurtleWorld()
bob=Turtle()
print bob


'''fd(bob,100)
lt(bob)
fd(bob,100)
lt(bob)
fd(bob,100)
lt(bob)
fd(bob,100)'''
#替代为
for i in range(4):
    fd(bob,100)
    lt(bob)
    
wait_for_user()




#题2

from swampy.TurtleWorld import*



def square(t,length):
    for i in range(4):
        fd(t,length)
        lt(t)
    
world=TurtleWorld()
bob=Turtle()
l=input("length=")
square(bob,l)
wait_for_user()



#题3、4
from swampy.TurtleWorld import*


def polygon(t,n):
    for i in range(n):
        fd(t,500/n)     #边长500/n
        lt(t,360.0/n)   #360.0取float型是为了n的取值可以更多,不信可以试试,若还是360,polygon(bob,100)里的第二个参数数只能是360的整数
    
world=TurtleWorld()
bob=Turtle()
bob.delay=0.01          #每次行动之间的停顿0.01s
polygon(bob,100)        #当 lt(t,360/n) 改变100的值可以将图形近似变为圆,该数只能是360的整数

wait_for_user()

#题5

#方案一:只适用于角度可以为360的整除的数,如1,2,3,4,6,9...................

from swampy.TurtleWorld import*


def arc(t,n,angle):
    for i in range(int(n/(360.0/angle))):         #  仅是改变循环的终止条件,但局限于i是整数,但误差会随着n的增大而减小
        fd(t,500/n)     #边长500/n
        lt(t,360.0/n)
    
world=TurtleWorld()
bob=Turtle()
bob.delay=0.01          #每次行动之间的停顿0.01s
arc(bob,100,90)         
wait_for_user()

#方案优:

小弟抛砖引玉,希望各位大侠能给个更优解,先谢过了



0 0