首页 > 解决方案 > 第 4.3 节练习 #5 - Allen Downey 的“Think Python”

问题描述

可以在此处访问到练习的链接 -案例研究:界面设计,练习第 4.3 节

引用这个问题,看来我必须实现一个arc()功能:

制作一个更通用的 call 版本,它带有circle一个arc额外的参数angle,它决定了要绘制圆的哪个部分。angle是以度为单位的,所以当角度=360时,arc应该画一个完整的圆。

到目前为止我写的代码:

import turtle
import math
bob = turtle.Turtle()

def polygon(t, n, length):
    for i in range(n):
        t.fd(length)
        t.lt(360/n)

def circle(t, r):
    circumference = 2 * math.pi * r
    n = int(circumference/3) + 1
    length = circumference/n
    polygon(t, n, length)

def arc(t, r, angle):
    arc_length = 2 * math.pi * r * (angle/360)
    n = (arc_length/4) + 1

arc(bob, 1000, 45)

turtle.mainloop()

我打算在内部调用circle()函数,arc()就像polygon()在内部调用一样circle(),但我对应该如何做到这一点感到困惑。除此之外,该arc()功能绘制任何东西,而只是向我展示了一只静止的海龟。

我相信 Turtle 对象bob没有收到任何在polygon(). 因此它所做的就是显示 Turtle 对象!

我可能是错的,这是我需要澄清的地方。我应该circle()在内部调用arc()并让 Turtle 对象移动吗?有更简单的选择吗?在函数中调用函数对我来说仍然很困惑,所以更多的资源来了解它们也会很棒!

标签: pythonfunctionturtle-graphics

解决方案


import turtle
bob=turtle.Turtle()
import math
def arc(t,radius,angle):
    circumference = 2.0*math.pi*radius
    frac = angle/360.0
    arclength = circumference*frac
    n = 50 # pick a number
    len = arclength/n;
    turnang = angle/n
    for i in range(n):
        t.fd(len)
        t.lt(turnang)
arc(bob, 130,360)
turtle.done()

推荐阅读