2017-01-18 11 views
0

このプログラムを動作させるのに問題があります。出力は、私が持っている10色のリストから無作為に各四角形をランダムに塗りつぶすことになっていますが、各四角形は最初の色のみで塗りつぶされています。私は彼が私たちにそれを同じに保つように頼んだので、定義osをpick_color()と同じに保つ必要があります。また、各四角形は徐々に小さくなり、最大のものが最初に描画されます。Pythonのランダムな色

私は教授が私に奨励してくれたので、私は尋ねていますが、学校の広場に投稿したときに助けを受けなかったのです。そして私は、stackoverflowと他のソースを検索して解決策を探しましたが、無駄です。

import turtle 
import random 

squares = input("How many squares should I draw (whole numbers): ") 
squares_int = int(squares) 

def pick_color(): 
    colors = ["blue","black","brown","red","yellow","green","orange","beige","turquoise","pink"] 
    random.shuffle(colors) 
    return colors[0] 

random_color = pick_color() 
print(random_color) 

length = 400 
x = -200 
y = 200 

for i in range(squares_int): 
    turtle.fillcolor(random_color) 
    turtle.pensize(5) 
    turtle.penup() 
    turtle.setx(x) 
    turtle.sety(y) 
    turtle.pendown() 
    turtle.down() 
    turtle.begin_fill() 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.end_fill() 
    turtle.up() 

    length = length - 30 
    x = x + 15 
    y = y - 15 

ちょうどヒントが2つある場合は素晴らしいと思います。少なくとも私はまっすぐな答えを探しているわけではない。前もって感謝します!

+0

ヒント:「pick_color」を1回だけ呼び出すので、1つのランダムな色しか得られません。 – jasonharper

答えて

0

機能を使用して、ループ内でそれを呼び出す必要があり、それは決して変わらないので、あなたが初めてそれを呼び出します。

import turtle 
import random 

squares = input("How many squares should I draw (whole numbers): ") 
squares_int = int(squares) 

def pick_color(): 
    colors = ["blue","black","brown","red","yellow","green","orange","beige","turquoise","pink"] 
    random.shuffle(colors) 
    return colors[0] 


length = 400 
x = -200 
y = 200 

for i in range(squares_int): 
    random_color = pick_color() 
    turtle.fillcolor(random_color) 
    turtle.pensize(5) 
    turtle.penup() 
    turtle.setx(x) 
    turtle.sety(y) 
    turtle.pendown() 
    turtle.down() 
    turtle.begin_fill() 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.forward(length) 
    turtle.right(90) 
    turtle.end_fill() 
    turtle.up() 

    length = length - 30 
    x = x + 15 
    y = y - 15 

出力:あなたのforループあなたは声明turtle.fillcolor(random_color[0])を使用して

enter image description here

+0

ありがとう!なぜ私はもう一度それを呼び出さなければならないのか尋ねてもらえますか?私はそれが私がカメでやっていたことだと思った。fillcolor(random_color) – Veyronvenom1200

+0

あなたは最初にそれを呼び出したので、1つの値しか持たないので、決して変更されません。それはあなたが望まないものです。 – eyllanesc

+0

Gotcha!私は助けに感謝します – Veyronvenom1200

0

pick_colorは、色のリストを作成し、シャッフルして最初のものを返します。use repeatedlyです。代わりに、トップ/グローバルレベルでそのリストを定義し、random.choiceでランダムな色を選ぶ:

turtle.fillcolor(random.choice(colors)) 
+0

もし誰かがこの答えに間違いを説明して、それが下降音に値すると思うなら、私はそれを改善したいと思います。 – TigerhawkT3

-1

。 しかし、random_colorは配列、リストなどではありません。これは文字列である関数pick_color()の戻り値です。それがあなたのプログラムが期待どおりに動かない理由の1つです。

ヒントがさらに必要な場合は、尋ねてください。どういたしまして!

編集:既にこのバグを削除しました。

0

あなたの教授の実装pick_color()は@ TigerhawkT3(+1)に同意します。しかし、私はrandom.choice()、また教授の道徳的な方法であるrandom.shuffle()が悪いとは信じていません。両方の問題は、あなたが正方形内の正方形を描画するときに、あなたがしたくないものです、連続通話で同じ色を得ることができます:

>>> import random 
>>> COLORS = ['red', 'blue', 'green', 'yellow', 'black', 'pink', 'gold', 'violet', 'orange', 'magenta', 'cyan'] 
>>> for _ in range(10): 
...  print(random.choice(COLORS)) 
... 
green 
pink 
red 
black 
violet 
orange 
orange 
violet 
yellow 
yellow 
>>> 

私はまだあなたの教授が行った方法、random.shuffle()をではないが使用したいです、前のシャッフルの最後の色は、新たなシャッフルの最初の色ではありませんことを確認するために戻った色を追跡するaddtionalの修正と:

import turtle 
import random 

COLORS = ["blue", "black", "brown", "red", "yellow", "green", "orange", "beige", "turquoise", "pink"] 

def pick_color(colors=[], previous=[None]): # intentionally dangerous default values 
    if not colors: 
     colors.extend(COLORS) 
     random.shuffle(colors) 
     if colors[-1] == previous[0]: 
      colors.insert(0, colors.pop()) 

    previous[0] = colors.pop() 

    return previous[0] 


squares = input("How many squares should I draw (whole numbers): ") 
squares_int = int(squares) 

length = 400 
x = -200 
y = 200 

turtle.pensize(5) 

for i in range(squares_int): 
    random_color = pick_color() 
    turtle.fillcolor(random_color) 

    turtle.penup() 
    turtle.goto(x, y) 
    turtle.pendown() 

    turtle.begin_fill() 
    for _ in range(4): 
     turtle.forward(length) 
     turtle.right(90) 
    turtle.end_fill() 

    length -= 30 
    x, y = x + 15, y - 15 

turtle.done() 

私は、これは1あなたよりも良い結果を生成すると考えています隣り合う四角で同じ色で表示されます。

enter image description here

+0

私は入力を感謝します。しかし、私は教授の実装と定義を使用する必要があります。 – Veyronvenom1200

関連する問題