3

我正在设置两个定义,我希望从 drawBar 中读取填充颜色。程序未读取与该值对应的正确颜色。

import turtle

wn = turtle.Screen()             # Set up the window
wn.bgcolor("white")

tess = turtle.Turtle()  
tess.penup()
tess.goto(-100,-75)
tess.pendown()


def drawBar(t, height):
    """ Get turtle t to draw one bar, of height. """
    t.left(90) 
    t.begin_fill()# Point up
    t.forward(height)
    # Draw up the left side
    t.right(90)
    t.forward(40)            # width of bar, along the top
    t.right(90)
    t.forward(height) 
    t.end_fill()# And down again!
    t.left(90)   

def drawColor(t, height):
    drawBar(t, height)
    if height >= 200:
         return tess.fillcolor("red")
    elif height  < 200 and v >= 100:
         return tess.fillcolor("yellow")
    elif height < 100: 
         return tess.fillcolor("green")

xs = [48, 117, 200, 240, 160, 260, 220]

for v in xs:                 # assume xs and tess are ready
    drawColor(tess, v) 

我不知道为什么这不起作用。

4

2 回答 2

0

更改drawColor为:

def drawColor(t, height):    
    if height >= 200:
         t.fillcolor("red")
    elif height  < 200 and height >= 100:
         t.fillcolor("yellow")
    elif height < 100: 
         t.fillcolor("green")
    drawBar(t, height)

这样,您首先根据当前高度设置正确的颜色,然后绘制条形图。在您的原始代码中,您正在绘制一个具有当前颜色的条(从默认颜色黑色开始),然后更改要绘制的颜色,因此每个新条都以最后一个应该具有的颜色绘制。

在您的原始代码中也存在一些其他问题。您不使用传递的 turtle 对象t,而是使用全局对象tess。也不需要返回fillcolor调用的结果。

于 2012-10-19T18:21:17.530 回答
0

我认为您在提及height测试时可能有错字:

elif height  < 200 and v >= 100:
     return tess.fillcolor("yellow")

应该是:

elif 100 <= height < 200:
     return tess.fillcolor("yellow")

v可能是在全局范围内找到的,而不是您想要测试的。

此外,您正在传递对海龟对象的引用,但您没有使用它:

def drawColor(t, height):
    drawBar(t, height)
    if height >= 200:
         # return tess.fillcolor("red")
         return t.fillcolor("red")
    ...
于 2012-10-19T18:19:14.577 回答