Python中的随机颜色

Python中的随机颜色,python,turtle-graphics,Python,Turtle Graphics,我很难让这个程序正常运行。输出应该用我拥有的10种颜色列表中的一种随机颜色随机填充每个方块,但每个方块只填充初始颜色。我需要保持pick\u color()的定义与教授的定义相同,因为他要求我们保持不变。另外,每个正方形都会逐渐变小,首先绘制最大的一个 顺便说一句,我这么问是因为教授们鼓励我这么做,但当我在学校广场上发帖时,我并没有得到有益的帮助。我已经搜索了StackOverFlow和其他来源来寻找解决方案,但没有结果 import turtle import random squares

我很难让这个程序正常运行。输出应该用我拥有的10种颜色列表中的一种随机颜色随机填充每个方块,但每个方块只填充初始颜色。我需要保持
pick\u color()
的定义与教授的定义相同,因为他要求我们保持不变。另外,每个正方形都会逐渐变小,首先绘制最大的一个

顺便说一句,我这么问是因为教授们鼓励我这么做,但当我在学校广场上发帖时,我并没有得到有益的帮助。我已经搜索了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

如果我能得到一两个提示就好了。我不是在寻找一个直截了当的答案。提前谢谢

pick_color
创建一个颜色列表,将其洗牌,然后返回第一个颜色,您可以选择它。相反,在顶部/全局级别定义该列表,并使用
random选择一种随机颜色

turtle.fillcolor(random.choice(colors))

你必须在循环中调用它的函数,你第一次调用它,所以它永远不会改变

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
输出:

我同意@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()
我相信这会产生比使用相同颜色的相邻方块显示的效果更好的结果:


提示:由于您只需调用
选择颜色
一次,因此您只能得到一种随机颜色。非常感谢!你介意我再问一次为什么吗?我以为我在海龟身上就是这么做的。fillcolor(random_color)你第一次叫它,所以你只有一个值,它永远不会改变,这是你不想要的。明白了!我很感激help@user7433120如果我的答案能帮助您将其标记为正确,请。这是一个错误,您刚刚创建了一个较差的
random.choice
。如果有人能解释这个答案的错误,使其值得否决,我很乐意改进它。我感谢您的输入;但是,我必须使用我的教授的实现和定义。