3

2つの定義を設定していて、fillColorを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

heightテストを参照しているときにタイプミスがあるかもしれないと思います。

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

おそらく次のようになります。

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

vおそらくグローバルスコープで検出されており、テストしたいものではありません。

また、turtleオブジェクトへの参照を渡していますが、それを使用していません。

def drawColor(t, height):
    drawBar(t, height)
    if height >= 200:
         # return tess.fillcolor("red")
         return t.fillcolor("red")
    ...
于 2012-10-19T18:19:14.577 に答える
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)

このようにして、最初に現在の高さに対して適切な色を設定してから、バーをプロットします。元のコードでは、現在の色 (デフォルトの色である黒から開始) でバーを描画し、その後、描画する色を変更するため、新しいバーはすべて、最後のバーが持つべき色で描画されます。

元のコードには、他にもいくつかの問題があります。渡されたタートル オブジェクトtではなく、グローバルタートル オブジェクトを使用しますtessfillcolor呼び出しの結果を返す必要もありません。

于 2012-10-19T18:21:17.530 に答える