Почему мой следующий код не работает ни в одной другой среде, кроме брелка? - PullRequest
0 голосов
/ 01 марта 2020

Следующий код работает только для брелка и имеет много ошибок, когда я запускаю его в других средах разработки, таких как pyCharm, Jupytor и IDLE.

Я также пытался выполнить этот код в онлайн-компиляторах, но есть много ошибки.

Нет ошибок при выполнении этого кода в брелке.

from turtle import *
from random import *

def randomcolour():
    red = randint(0, 255)
    green = randint(0, 255)
    blue = randint(0, 255)
    color(red, green, blue )

def randomplace():
    penup()
    x = randint(-100,100)
    y = randint(-100,100)
    goto(x,y)
    pendown()

def randomheading():
    heading = randint(0, 360)
    setheading(heading)

shape("turtle")
speed(0)
for i in range(4):
    randomcolour()
    randomplace()
    randomheading()
    stamp()

def drawrectangle():
    randomcolour()
    randomplace()
    hideturtle()
    length = randint(10, 100)
    height = randint(10, 100)
    begin_fill()
    forward(length)
    right(90)
    forward(height)
    right(90)
    forward(length)
    right(90)
    forward(height)
    right(90)
    end_fill()

clear()
setheading(0)

for i in range(20):
    drawrectangle()
from turtle import *
from random import *

def randomcolour():
    red = randint(0, 255)
    green = randint(0, 255)
    blue = randint(0, 255)
    color(red, green, blue )

def randomplace():
    penup()
    x = randint(-100,100)
    y = randint(-100,100)
    goto(x,y)
    pendown()

def randomheading():
    heading = randint(0, 360)
    setheading(heading)

shape("turtle")
speed(0)
for i in range(4):
    randomcolour()
    randomplace()
    randomheading()
    stamp()

def drawrectangle():
    randomcolour()
    randomplace()
    hideturtle()
    length = randint(10, 100)
    height = randint(10, 100)
    begin_fill()
    forward(length)
    right(90)
    forward(height)
    right(90)
    forward(length)
    right(90)
    forward(height)
    right(90)
    end_fill()

def drawcircle():
  radius = randint(5, 100)
  randomcolour()
  randomplace()
  dot(radius)

def drawstar():
  randomcolour()
  randomplace()
  randomheading()
  begin_fill()
  size = randint(20, 100)
  #draw the star shape
  for side in range(5):
    left(144)
    forward(size)

  end_fill()

clear()
setheading(0)

for i in range(20):
    drawrectangle()

clear()

for i in range(20):
  drawcircle()

clear()

for i in range(20):
  drawstar()

1 Ответ

1 голос
/ 01 марта 2020

Вы передаете значения RGB от 0 до 255. По умолчанию цветовой режим в черепахе составляет от 0 до 1,0. Поэтому вам нужно сначала установить цветовой режим на 255, прежде чем пытаться установить такие значения RGB. или вам нужно установить значения rgb от 0 до 1,0.

turtle.color говорит, что

    """Return color string corresponding to args.

    Argument may be a string or a tuple of three
    numbers corresponding to actual colormode,
    i.e. in the range 0<=n<=colormode.

    If the argument doesn't represent a color,
    an error is raised.
    """

цветовой режим может быть либо 1,0, либо 255. Таким образом, по умолчанию цветовой режим равен 1,0, поэтому цвет имеет этот код

   if self._colormode == 1.0:
        r, g, b = [round(255.0*x) for x in (r, g, b)]
    if not ((0 <= r <= 255) and (0 <= g <= 255) and (0 <= b <= 255)):
        raise TurtleGraphicsError("bad color sequence: %s" % str(color))

Допустим, вы передаете 100, 100, 100 в качестве RGB, но цветовой режим в настоящее время установлен на 1,0. тогда цвет умножит все ваши RGB на 255.0. Таким образом, ваш rgb станет 25500, 25500, 25500. Затем цвет будет проверять, что каждый RGB находится между 0 и 255 включительно, однако, поскольку цвет умножил все rgbs на 255, так как цветовой режим равен 1.0, все ваши rgbs теперь превышают 255, поэтому цвет дает плохой исключение цветовой последовательности.

Таким образом, либо установите цветовой режим на 255, либо передайте значения rgb в диапазоне от 0 до 1

255 RGB

from turtle import *
from random import *

colormode(255)
def randomcolour():
    red = randint(0, 255)
    green = randint(0, 255)
    blue = randint(0, 255)
    color(red, green, blue )

с плавающей точкой rgb

from turtle import *
from random import *

def randomcolour():
    red = uniform(0, 1)
    green = uniform(0, 1)
    blue = uniform(0, 1)
    color(red, green, blue )

Что касается работы с брелком, но не с другими, возможно, брелок устанавливает для вас цветовой режим 255

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...