Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何给每个树枝涂上不同的颜色?Python雪花函数_Python_Turtle Graphics - Fatal编程技术网

如何给每个树枝涂上不同的颜色?Python雪花函数

如何给每个树枝涂上不同的颜色?Python雪花函数,python,turtle-graphics,Python,Turtle Graphics,这是我的密码。我似乎无法为每个树枝选择不同的颜色。它只是从我展示的列表中随机选择 #多色雪花龟 进口海龟 #给你的乌龟取个名字 雪=乌龟。乌龟() 雪。形状(“海龟”) 颜色=[“蓝色”、“红色”、“黄色”、“绿色”] #声明函数,雪花 def雪花(尺寸、尺寸、x、y): #乌龟笔(养老金=10) 斯诺·彭普 雪。后藤(x,y) 雪地。向前(10*尺寸) 雪。左(45) 斯诺 对于颜色中的颜色: 雪。颜色(颜色) 对于范围(8)中的i: 分支(大小) 雪。左(45) #创建分支 def分支(尺寸

这是我的密码。我似乎无法为每个树枝选择不同的颜色。它只是从我展示的列表中随机选择

#多色雪花龟
进口海龟
#给你的乌龟取个名字
雪=乌龟。乌龟()
雪。形状(“海龟”)
颜色=[“蓝色”、“红色”、“黄色”、“绿色”]
#声明函数,雪花
def雪花(尺寸、尺寸、x、y):
#乌龟笔(养老金=10)
斯诺·彭普
雪。后藤(x,y)
雪地。向前(10*尺寸)
雪。左(45)
斯诺
对于颜色中的颜色:
雪。颜色(颜色)
对于范围(8)中的i:
分支(大小)
雪。左(45)
#创建分支
def分支(尺寸):
对于范围(3)中的i:
对于范围(3)中的i:
前雪(10.0*尺寸/3)
雪。向后(10.0*尺寸/3)
雪。右(45)
雪。左(90)
雪。向后(10.0*尺寸/3)
雪。左(45)
雪。右(90)
雪地向前(10.0*尺寸)
雪花(8,6,0,0)

我仍然不熟悉使用Python可以做的所有不同的事情。我不知道是否有可能的方法做多色。我会分别做每个分支,但整个目标是使用函数。我似乎不知道如何将多种颜色合并到一个函数中。

您当前的代码总是以绿色绘制雪花,因为您的循环设置颜色在绘制雪花分支的循环之前运行。如果要在绘制时选择颜色,则需要将两个循环合并为一个

下面是一个简单的方法,它将给每个分支一个单独的颜色,当它们都被使用时重复:

for i in range(8):
    snow.color(colors[i%4])
    branch(size)
    snow.left(45)

这是相当确定的,但它将始终按照您编写的顺序在颜色列表中显示。您可以使用
random.shuffle
(您需要先
导入random
),对每个雪花的列表进行洗牌,从而将事情弄混。或者有很多其他的选择,这取决于你想要的效果。例如,您可以使用
random.choice
为每个分支选择一种随机颜色。

继@Blckknght对这个问题的出色介绍(+1)之后,这比人们可能想象的要复杂得多。如果我们使用模(%)方法,即使我们洗牌颜色,我们也会得到重复的图案,例如,第一个和第五个分支始终是相同的颜色,无论该颜色是什么,等等

颜色的数量少于分支的数量,我们真正想要的是随机的,我们不希望相邻分支具有相同的颜色。最后一个标准似乎很容易,直到我们意识到,我们不希望最后一个分支的颜色与第一个分支的颜色相同,因为我们回来了!因此,我们可以尝试以下方法:

first_color = random.choice(colors)
snow.pencolor(first_color)

for flag in range(-6, 2):

    branch(distance)
    snow.left(45)

    new_color = old_color = snow.pencolor()

    while new_color == old_color or (not flag and new_color == first_color):
        new_color = random.choice(colors)

    snow.pencolor(new_color)
奇怪的
范围(-6,2)
循环构造是允许
标记
转到
(0)只允许一次迭代,我们需要确保第一个和最后一个分支在颜色方面不匹配。完整代码:

# Multi-color Snowflake Turtle

from turtle import Screen, Turtle
from random import choice

COLORS = ["blue", "red", "yellow", "green"]

# Declare the function, snowflake
def snowflake(size, pensize, x, y):
    snow.width(pensize)

    distance = 10 * size

    snow.penup()
    snow.goto(x, y)
    snow.forward(distance)
    snow.left(45)
    snow.pendown()

    first_color = choice(COLORS)
    snow.pencolor(first_color)

    for flag in range(-6, 2):

        branch(distance)
        snow.left(45)

        new_color = old_color = snow.pencolor()

        while new_color == old_color or (not flag and new_color == first_color):
            new_color = choice(COLORS)

        snow.pencolor(new_color)

    snow.hideturtle()

# Create the branches
def branch(distance):

    for _ in range(3):
        for _ in range(3):
            snow.forward(distance / 3)
            snow.backward(distance / 3)
            snow.right(45)
        snow.left(90)
        snow.backward(distance / 3)
        snow.left(45)

    snow.right(90)
    snow.penup()
    snow.forward(distance)
    snow.pendown()

# Assign a name to your turtle
snow = Turtle("turtle")

screen = Screen()

snowflake(8, 6, 0, 0)

screen.exitonclick()