编写drawCircle(radius,fillColor)函数时圆填充颜色问题求助
解决Turtle绘图中圆填充颜色不生效的问题
嘿,我看到你在实现自定义填充颜色的圆形绘制时遇到了麻烦,咱们一步步拆解问题,把它搞定~
首先看你的代码里几个关键的错误点:
- 你把传入的
fillColor参数先赋值给c,然后立刻把c设成了空字符串,直接把用户传入的颜色给清空了,这是第一个致命问题; - 紧接着你又写了
fillColor=tom.color(),这行代码是获取海龟当前的颜色,而不是设置,等于又把传入的颜色覆盖了一次; - 还有填充的顺序搞反了:
tom.end_fill()放在了win.exitonclick()之后,这时候窗口都已经关闭了,填充操作根本没机会执行。
下面是修正后的完整代码,我会标注每一处修改:
import turtle def drawCircle(radius, fillColor): angle = 360 / 300 # 计算每次转动的角度,变量名更直观 win = turtle.Screen() tom = turtle.Turtle() # 关键:设置填充颜色,用fillcolor只改填充色,color会同时改画笔和填充色 tom.fillcolor(fillColor) # 如果希望画笔颜色和填充色一致,可以换成 tom.color(fillColor) tom.begin_fill() # 开始填充,必须在绘制图形之前调用 z = 1 while z <= 300: tom.forward(radius) tom.right(angle) tom.forward(radius) z += 1 tom.end_fill() # 结束填充,要在绘制完成后、窗口关闭前执行 win.exitonclick() # 测试调用 drawCircle(1, "red")
核心修改说明:
- 保留用户传入的颜色参数:去掉了
c=str("")这种覆盖参数的错误代码,让fillColor能正确传递到函数里; - 正确设置填充颜色:使用
turtle.fillcolor()来指定填充的颜色,如果你想让画笔颜色和填充颜色一样,用tom.color(fillColor)即可; - 调整填充顺序:把
begin_fill()放在绘制前,end_fill()放在绘制完成后、窗口关闭前,确保填充逻辑能被执行; - 优化变量名:把
x改成angle,r直接用radius,让代码更易读。
如果你想让函数主动请求用户输入半径和颜色,可以扩展成这样:
import turtle def drawCircle(): # 主动获取用户输入 radius = float(input("请输入圆的半径:")) fillColor = input("请输入填充颜色(比如red、blue):") angle = 360 / 300 win = turtle.Screen() tom = turtle.Turtle() tom.fillcolor(fillColor) tom.begin_fill() z = 1 while z <= 300: tom.forward(radius) tom.right(angle) tom.forward(radius) z += 1 tom.end_fill() win.exitonclick() # 直接调用即可 drawCircle()
现在再运行代码,就能得到你想要的自定义颜色填充的圆形啦~
内容的提问来源于stack exchange,提问作者B. Donovan
相关产品推荐
相关产品推荐

