Python Turtle:动态饼图及单个分离部分

0 投票
2 回答
3262 浏览
提问于 2025-04-18 01:26

我在大学里遇到了一个挑战,需要制作一个动态的饼图,并且要有一个单独分开的部分。

我已经有了

    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 个回答

0

你已经定义了一个叫做 segment 的函数,它可以完成一些特定的任务,但你从来没有真正去调用或运行它。这就是为什么它除了给你画一个圆圈之外,什么都没有做。你可以在新的一行中,不缩进地写 segment() 来调用它。

1

你的代码分成几个部分。

第一部分:

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 中的函数,所以我建议你看看一些教程,把基础知识搞清楚。这会让你以后编程更轻松,也能让你更好地发挥编程的能力。

撰写回答