Каков эффект от передачи скаляра в turtle.color () в Skulpt? - PullRequest
0 голосов
/ 08 апреля 2019

Когда я пытаюсь запустить мой код на python ниже, как turtle.color интерпретирует ввод как число?

import turtle

for i in ['red', 'blue', 'green', 'pink', 8, 10]:
       turtle.color(i)
       turtle.forward(100)
       turtle.right(90)

Фактический:

Вывод, который я получаю, это квадрат со сторонами в указанном порядке. Когда он достигает turtle.color(8), одна из сторон перезаписывается черным, затем следующая сторона (turtle.color(10)).

Ожидаемое:

Код должен выдавать ошибку как turtle.color(8), не имеет смысла !!

Я на самом деле использую онлайн-компилятор turtle для проверки своего кода ( repl.it / languages ​​/ python_turtle ).

1 Ответ

2 голосов
/ 08 апреля 2019

В своем блоге repl.it упоминает, что в качестве веб-видео они используют skulpt .

Страница Skulpt Github показывает следующую функцию, которая предполагает, что «Черный» является значением по умолчанию. Это объясняет странное поведение, которое вы наблюдаете по сравнению с другими при отладке.

function createColor(color, g, b, a) {
    var i;

    if (g !== undefined) {
        color = [color, g, b, a];
    }

    if (color.constructor === Array && color.length) {
        for(i = 0; i < 3; i++) {
            color[i] = (typeof color[i] === "number") ?
                Math.max(0, Math.min(255, parseInt(color[i]))) :
                0;
        }
        if (typeof color[i] === "number") {
            color[3] = Math.max(0, Math.min(1, color[i]));
            color = "rgba(" + color.join(",") + ")";
        }
        else {
            color = "rgb(" + color.slice(0,3).join(",") + ")";
        }
    }
    else if (typeof color === "string" && !color.match(/\s*url\s*\(/i)) {
        color = color.replace(/\s+/g, "");
    }
    else {
        return "black";
    }

    return color;
}
...