#python #python-turtle
#python #python-turtle
Вопрос:
Я пытаюсь нарисовать контрольную доску, используя библиотеку Turtle, и сталкиваюсь с ошибкой, когда окно доски не открывается. Он работал в начале моего сеанса около 30 минут назад, но я кое-что изменил и хочу знать, почему это изменилось.
Вот мой код:
##This program draws a checkboard using the turtle library
import turtle
#below initiates the turtle pen and screen
penMain = turtle.Turtle()
turtleMain = turtle.Screen()
def turtleBoard():
for x in range(4):
penMain.forward(30)
penMain.left(90)
penMain.forward(30)
turtleMain.setup(600, 600)
penMain.speed(50)
for a in range(8):
penMain.up()
penMain.setpos(0, 30 * a)
penMain.down()
for x in range(8):
if (a x)% 2 == 0:
squareColor = 'black'
else:
squareColor = 'white'
penMain.fillcolor(squareColor)
penMain.begin_fill()
turtleBoard()
penMain.end_fill()
Я считаю, что этот код работает, кроме моей единственной ошибки! Заранее благодарим всех за помощь!
Комментарии:
1. Большая часть вашего кода находится в функции
turtleBoard()
, которую вы никогда не вызываете. Если бы вы вызвали его вручную, он зависал бы навсегда, поскольку он содержит рекурсивный вызов самого себя ближе к концу. Я думаю, что эти последние четыре строки вообще не должны иметь отступов.2. это исправило первую проблему, но теперь она просто рисует один черный квадрат и завершает работу
3. Единственная часть
turtleBoard()
, которая действительно что-то рисует, — это первые три строки. Остальное просто перемещает перо, не делая никаких пометок.4. хм, хорошо, я понимаю теорию этого. Однако он работал раньше, поэтому я не понимаю, что я сделал
Ответ №1:
Я не могу сказать, какие изменения вы внесли, чтобы получить свой текущий код, но этот код, похоже, работает:
##This program draws a checkboard using the turtle library
import turtle
#below initiates the turtle pen and screen
penMain = turtle.Turtle()
turtleMain = turtle.Screen()
def turtleBoard():
penMain.forward(30)
turtleMain.setup(600, 600)
penMain.speed(50)
for a in range(8):
for x in range(8):
penMain.up()
penMain.setpos(30 * x, 30 * a)
penMain.down()
penMain.begin_fill()
for xx in range(4):
penMain.forward(30)
penMain.left(90)
if a%2 == x%2:
squareColor = 'black'
else:
squareColor = 'white'
penMain.fillcolor(squareColor)
penMain.end_fill()
turtleBoard()
turtle.done()
Ответ №2:
Теперь, когда мы увидели, что ваш код можно заставить работать, давайте рассмотрим штамповку вместо рисования, чтобы сделать его более простым и быстрым:
from turtle import Screen, Turtle
SQUARES_PER_EDGE = 8
SQUARE_SIZE = 30 # in pixels
OFFSET = SQUARE_SIZE * (SQUARES_PER_EDGE / 2) - SQUARE_SIZE/2 # center the board
CURSOR_SIZE = 20
def turtleBoard():
turtle.shape('square')
turtle.shapesize(SQUARE_SIZE / CURSOR_SIZE)
turtle.penup()
for y in range(SQUARES_PER_EDGE):
for x in range(SQUARES_PER_EDGE):
turtle.goto(x * SQUARE_SIZE - OFFSET, y * SQUARE_SIZE - OFFSET)
turtle.fillcolor('black' if y % 2 == x % 2 else 'white')
turtle.stamp()
screen = Screen()
screen.setup(600, 600)
turtle = Turtle()
turtle.speed('fastest') # because I have no patience
turtleBoard()
screen.exitonclick()
Ответ №3:
Я выровнял отступ нижних 4 строк с последним оператором ‘else’, и это сработало. Спасибо, ребята!