python - 第 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 对象移动吗?有更简单的选择吗?在函数中调用函数对我来说仍然很困惑,所以更多的资源来了解它们也会很棒!
解决方案
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()
推荐阅读
- java - Android SDK Random 和 SecureRandom 返回不那么随机的值
- list - 如何使用 append/3 在 prolog 中递归构建列表?
- node.js - NODE JS-EXPRESS:当它适用于 GET 时,无法从 HTTP 上下文中检索 POST 和 PUT 请求的值
- java - 将 JSON 反序列化为多态类型 Spring boot
- php - 从与其他条件匹配的行中选择特定列中值最低的行
- angular - 如何获取用户输入使用 *ngFor 创建,其中输入的数量取决于角度 7 中 json 响应的长度
- bazel - 是否可以针对 bazel 中的当前编译器定义 CXXFLAGS?
- azure - 在 Azure 上创建 Service Fabric 群集失败,错误代码为“VMInstanceCountAllowsBetterReliabilityLevel”
- c - strcmp() unsigned char 到文件中的字符串
- r - 使用markovchain包计算观察序列的概率