#python #turtle-graphics #skulpt
#python #черепаха-графика #skulpt
Вопрос:
Когда я пытаюсь запустить свой приведенный ниже код 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. Вы пробовали просмотреть
turtle.color
исходный код и посмотреть, что он делает?2. Это выдает ошибку для меня. Вы уверены, что это именно тот код, который вы используете?
3. да, это именно тот код, который я запускаю.
4. Ваш код вызывает
TypeError: object of type 'int' has no len()
исключение при его запуске.5. Большое спасибо Дэниелу за разъяснение..
Ответ №1:
Из их блога, 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 amp;amp; 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" amp;amp; !color.match(/s*urls*(/i)) {
color = color.replace(/s /g, "");
}
else {
return "black";
}
return color;
}
Комментарии:
1. turtle.color(«10») / turtle.color («Привет») — выдает вывод черного цвета
2. Спасибо за тестирование Richin. Похоже, это ваш ответ. 8 и 10 передаются в виде строк и, следовательно, печатаются черным цветом.
3. спасибо, Дэниел .. тем не менее, я только что попробовал запустить приведенный ниже код без цикла for, и он снова дает мне черный импорт turtle turtle.color(10) turtle. вперед (100) turtle.right(90)
4. Вы используете самую последнюю версию Turtle? (Странно, что turtle.color (10) не выдает ошибку для вас, как для других в разделе комментариев.)
5. Держу пари, что repl.it использует некоторую скрытую магию для уменьшения ошибок в целях обучения. Я бы предложил попробовать вне repl.it , поскольку результаты, вероятно, будут отличаться. (Я только что проверил на repl.it этот turtle.color (10) на самом деле печатает черным цветом.)