Python Turtle:动态饼图及单个分离部分
我在大学里遇到了一个挑战,需要制作一个动态的饼图,并且要有一个单独分开的部分。
我已经有了
chart_title = 'Tourism GDP by States/Territories in Australia'
segment_labels = ['QLD', 'VIC', 'NSW', 'SA', 'WA', 'TAS', 'NT', 'ACT']
percentages = [0.24, 0.22, 0.328, 0.06, 0.082, 0.03, 0.02, 0.02]
from turtle import *
radius = 200
penup()
forward(radius)
left(90)
pendown()
color('palegreen')
begin_fill()
circle(radius)
end_fill()
home()
right(90)
color('black')
def segment(percentages):
rollingPercent = 0
radius=200
for percent in percentages:
segment = percent * 360
rollingPercent += segment
setheading(rollingPercent)
pendown()
forward(radius)
penup()
home()
这样做对吗?因为当我运行这段代码时,它只画了一个绿色的圆圈,并没有画出饼图的任何部分。
2 个回答
你已经定义了一个叫做 segment
的函数,它可以完成一些特定的任务,但你从来没有真正去调用或运行它。这就是为什么它除了给你画一个圆圈之外,什么都没有做。你可以在新的一行中,不缩进地写 segment()
来调用它。
你的代码分成几个部分。
第一部分:
chart_title = 'Tourism GDP by States/Territories in Australia'
segment_labels = ['QLD', 'VIC', 'NSW', 'SA', 'WA', 'TAS', 'NT', 'ACT']
percentages = [0.24, 0.22, 0.328, 0.06, 0.082, 0.03, 0.02, 0.02]
radius = 200
第二部分:
from turtle import *
第三部分:
penup()
forward(radius)
left(90)
pendown()
color('palegreen')
begin_fill()
circle(radius)
end_fill()
home()
right(90)
color('black')
第四部分:
def segment(percentages):
rollingPercent = 0
radius=200
for percent in percentages:
segment = percent * 360
rollingPercent += segment
setheading(rollingPercent)
pendown()
forward(radius)
penup()
home()
在第一部分,你定义了一些变量。在第二部分,你导入了一个叫做 turtle
的模块(库)。在第三部分,你使用了这个库里的某些功能,画了一个绿色的圆。
现在重点来了。在第四部分,你定义了一个函数(叫做 segment
),这个函数可以画出一些段。但是,除非你明确要求它去画,否则它是不会自己去画的。如果你对函数不太了解,建议你看看一些相关的教程。理解函数是非常重要的(可以参考 这里, 这里 和 这里)。
虽然你已经定义了画段的函数,但你并没有调用这个函数(也就是没有执行函数里的代码)。这个函数需要一个参数(输入),叫做 percentages
,它是一个包含段百分比的列表。注意,这里提到的变量名 percentages
是一个局部变量,只在 segment
函数内部存在,它不一定指的是你在第一部分定义的那个列表(但也可以是)。如果你想了解局部变量的意思,可以看看 这个。
所以你需要调用你的函数。要做到这一点,你需要添加一行代码 segment(percentages)
,这行代码会调用 segment
函数,并把 percentages
列表作为参数传进去。
完整代码:
chart_title = 'Tourism GDP by States/Territories in Australia'
segment_labels = ['QLD', 'VIC', 'NSW', 'SA', 'WA', 'TAS', 'NT', 'ACT']
percentages = [0.24, 0.22, 0.328, 0.06, 0.082, 0.03, 0.02, 0.02]
from turtle import *
radius = 200
penup()
forward(radius)
left(90)
pendown()
color('palegreen')
begin_fill()
circle(radius)
end_fill()
home()
right(90)
color('black')
def segment(percentages):
rollingPercent = 0
radius=200
for percent in percentages:
segment = percent * 360
rollingPercent += segment
setheading(rollingPercent)
pendown()
forward(radius)
penup()
home()
segment(percentages)
从你的评论来看,显然你需要熟悉一下 Python 中的函数,所以我建议你看看一些教程,把基础知识搞清楚。这会让你以后编程更轻松,也能让你更好地发挥编程的能力。