2016-04-11 189 views
0

我是Python的新手,我正在努力学习本书中的一课,我们必须更改条形图中的颜色。我不确定我做错了什么。没有错误信息颜色只是打印黑色。在Python中更改条形图颜色

import turtle 
tess = turtle.Turtle() 

def draw_bar(t, height): 

    t.begin_fill() 
    t.left(90) 
    t.forward(height) 
    t.write(" "+ str(height)) 

    t.right(90) 
    t.forward(40) 
    t.right(90) 
    t.forward(height) 
    t.penup() 
    t.left(90) 
    t.end_fill() 
    t.forward(10) 
    t.pendown() 

    tess.pensize(3) 

    if xs is 48: 
     tess.color("blue") 
    if xs is 117: 
     tess.color("yellow") 

wn = turtle.Screen() 
wn.bgcolor("lightgreen") 



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

for a in xs: 
    draw_bar(tess, a) 

wn.mainloop() 

这是我到目前为止。

感谢您的帮助!

+2

我认为你必须把栏的颜色前begin_fill – Adib

+0

欢迎SO。请在您的帖子中格式化代码。 –

回答

0

我认为你需要在begin_fill()之前分配一个颜色。因为计算机是这样的:“好吧,我会填满盒子,但我没有颜色”,所以它使用黑色的默认值。

你提供的if语句没有意义,所以我将它在函数中移动并修改它,以便在函数内检查高度。我不推荐使用if/else,而是推荐词典。

这个新代码的工作:

import turtle 
tess = turtle.Turtle() 

def draw_bar(t, height): 

    # Select Color 
    if height is 48: 
     color = "blue" 
    elif height is 117: 
     color = "yellow" 
    else: 
     color = "black" 

    # Assign color 
    t.color(color) 

    # The rest of your code 
    t.begin_fill() 
    t.left(90) 
    t.forward(height) 
    t.write(" "+ str(height)) 

    t.right(90) 
    t.forward(40) 
    t.right(90) 
    t.forward(height) 
    t.penup() 
    t.left(90) 
    t.end_fill() 
    t.forward(10) 
    t.pendown() 

    tess.pensize(3) 

wn = turtle.Screen() 
wn.bgcolor("lightgreen") 


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

for a in xs: 
    draw_bar(tess, a) 

wn.mainloop() 
+0

这就是我以前的样子,它适用于着色整个条形图,但是我需要根据数字的什么值以及我已经尝试过的任何东西已经工作,为单个条形上色。 –

+0

@DMondi查看最新的编辑。基本上,我把你的'if'声明放在函数中,如果有其他条件来处理不同的块。 – Adib

+0

@DMondi那么...发生了什么? – Adib

相关问题