【问题标题】:Draw squares in random colors using Python使用 Python 绘制随机颜色的正方形
【发布时间】:2026-01-18 21:20:02
【问题描述】:

我需要为每个新的小方块添加一个新的随机颜色。现在它只在 while 循环后改变颜色。你能帮我修一下吗?

def random_color():
    colvar=random.randint(0,10)
    L=['red','blue','green','yellow','black','pink','gold','violet','coral','lemon chiffon','sea green'] #wiki.tcl.tk/16166  website which I used to find names for colors
    result=L[colvar]
    return result

def square(color,x,y):     
     turtle.color(color)
     turtle.begin_fill()
     turtle.penup()
     turtle.goto(x,y)
     turtle.pendown()
     line1=200           #creates a new smaller square
     while line1>=10:   
      line1=line1-10
      for i in range(2):
          turtle.forward(line1)
          turtle.right(90)
          turtle.forward(line1)
          turtle.right(90)

def drawsqr():
    num=5               
    for i in range(num):  
              color=random_color()  #change color after each complete cycle
              x=250
              y=250
              square(color,x,y)

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    我知道你解决了你的问题,但 random.choice() 更好 适合您的功能:

    我不同意。 random.choice() 的问题是您可以在连续调用中获得相同的颜色,这是您不想要的:

    >>> 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()itertools.cycle() 结合使用会为您提供一系列随机重复的颜色,您可以从中挑选出不同的颜色:

    import turtle
    import random
    import itertools
    
    COLORS = ['red', 'blue', 'green', 'yellow', 'black', 'pink', 'gold', 'violet', 'orange', 'magenta', 'cyan']
    
    def random_color(iterator=[]):  # intentional dangerous default value
        if not iterator:  # empty container
            colors = COLORS
            random.shuffle(colors)
            iterator.append(itertools.cycle(colors))
    
        return next(iterator[0])
    
    def square(length, x, y):
        turtle.penup()
        turtle.goto(x, y)
        turtle.pendown()
    
        while length >= 10:
            color = random_color()  # change color after each square
            turtle.color(color)
    
            turtle.begin_fill()
    
            for _ in range(4):
                turtle.forward(length)
                turtle.right(90)
    
            turtle.end_fill()
    
            length -= 10
    
    square(200, -100, 100)
    
    turtle.done()
    

    【讨论】:

      【解决方案2】:

      我知道您解决了您的问题,但 random.choice() 更适合您的功能:

      def random_color():
          L=['red','blue','green','yellow','black','pink','gold','violet','coral','lemon', 'chiffon','seagreen'] 
          return random.choice(L)
      

      【讨论】:

      • 谢谢我不知道 random.choice()
      【解决方案3】:
      imputturtlegraphics,
      setpcolor:("red,green,blue,gold,puple,maroon,claret,tuquoise etc")
      ,pendown
      ,goto("x$y$")
      ,movehundredstepsforward
      ,turnleft90
      repeatprev2sX4
      

      【讨论】: