2017-01-18 2 views
0

У меня проблема с работой этой программы. Предполагается, что выход случайным образом заполняет каждый квадрат случайным цветом из списка из 10 цветов, которые у меня есть, но каждый квадрат заполняется только начальным цветом. Мне нужно сохранить определение os pick_color() так же, как и профессора, поскольку он попросил нас сохранить его. FYI также, каждый квадрат становится инкрементично меньшим, причем наибольший из них получается первым.Случайные цвета в Python

BTW, я спрашиваю, потому что профессора поощряли меня, но я не получал помощи, которая была полезной, когда я размещал на площади нашей школы. И я искал 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 

Было бы здорово, если бы у меня был только намек или два. Я не ищу прямой ответ, по крайней мере, пока. Заранее спасибо!

+0

Подсказка: поскольку вы только называете '' pick_color'', вы получаете только один случайный цвет. – 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 

Выход:

enter image description here

+0

Большое вам спасибо! Не возражаете, если я спрошу, почему я должен снова позвонить? Я думал, что это то, что я делал в черепахе.fillcolor (random_color) – Veyronvenom1200

+0

Вы только что назвали его первым, так что у вас будет только одно значение, и оно никогда не изменится, и это то, чего вы не хотите. – eyllanesc

+0

Gotcha! Я ценю помощь – Veyronvenom1200

0

pick_color создает список цветов, перетасовывает их, а затем возвращает первый, который вы use repeatedly. Вместо этого, определить, что список в верхнем/глобальном уровне, и выбрать случайный цвет с random.choice:

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

Если кто-то может объяснить, что не так с этим ответом, чтобы он заслужил ниспровержение, я бы хотел его улучшить. – TigerhawkT3

-1

В вашей для цикла используется оператор turtle.fillcolor(random_color[0]). Но random_color - это не массив, список или что-то в этом роде. Это возвращаемое значение функции pick_color(), которая является строкой. Это одна из причин, почему ваша программа работает не так, как вы ожидаете.

Если вы хотите больше советов, просто спросите! Пожалуйста!

EDIT: Вы уже удалили эту ошибку.

0

Я согласен с @ TigerhawkT3 (+1), что реализация вашего профессора pick_color() - это дерьмо. Но я не считаю, что 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(), хотя и не так, как ваш профессор сделал, с ДОПОЛНИТЕЛЬНО фикс отслеживанием возвращенного цвета, чтобы убедиться, что последний цвет предыдущего перетасовки не первый цвет нового перетасовки:

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() 

Я считаю, что это дает лучший результат, чем тот, который вы отображаются с соседними квадратами одного цвета:

enter image description here

+0

Я ценю вход; однако я должен использовать реализацию моих преподавателей и определение. – Veyronvenom1200