《Think Python》练习 4-3:用函数画雨伞

第4章 案例研究:接口设计

练习 4-3 用函数画雨伞

写一组合适的通用函数,用来画出下图所示的图形(最终代码执行效果图):
《Think Python》练习 4-3:用函数画雨伞_第1张图片
【求解】
不得不说,练习 4-3 比 练习 4-2 简单多了!!!
Step.1 确认组件
n n n 个等腰三角形组成“雨伞”

Step.2 抽象问题
已知:雨伞边数 n n n、雨伞边长 l l l
求:等腰三角形顶角、底角

Step.3 问题求解
n n n 个顶角平分 360 ° 360° 360° 2 π n = 360 n \frac{2π}{n}=\frac{360}{n} n2π=n360
已知等腰三角形顶角 360 n \frac{360}{n} n360,求底角: 180 − 360 n 2 \frac{180-\frac{360}{n}}{2} 2180n360
已知等腰三角形底边 l l l,求腰长: r = l 2 s i n π n r=\frac{l}{2sin\frac{π}{n}} r=2sinnπl

Step.4 完成代码

"""
《Think Python》练习 4-3:通用函数画雨伞

n:雨伞的边数
l:雨伞的边长
"""

#引入数学模块、乌龟模块
import math
import turtle

#调用乌龟画图
bob = turtle.Turtle()

#雨伞
def umbrella(n,l):
    #计算雨伞中每个等边三角形的顶角(angle_in)、底角(angle_out)、腰长(r)
    angle_in = 360 / n
    angle_out = (180 - angle_in) / 2
    r = l / 2 / math.sin(angle_in / 2 / 180 * math.pi)
    #重复画等腰三角形完成雨伞
    for i in range(n):
        bob.lt(angle_in/2)
        bob.fd(r)
        bob.lt(180 - angle_out)
        bob.fd(l)
        bob.lt(180 - angle_out)
        bob.fd(r)
        bob.lt(180 - angle_in/2)

#左移240,画出5瓣雨伞
bob.pu()
bob.fd(-240)
bob.pd()
umbrella(5,115)

#右移240,画出6瓣雨伞
bob.pu()
bob.fd(240)
bob.pd()
umbrella(6,98)

#右移240,画出7瓣雨伞
bob.pu()
bob.fd(240)
bob.pd()
umbrella(7,85)

#下移120,让turtle不遮挡雨伞
bob.pu()
bob.rt(90)
bob.fd(120)

turtle.mainloop()

你可能感兴趣的:(《Think,Python》课后实现)