Экран не открывается при рисовании контрольной доски с использованием Turtle

#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’, и это сработало. Спасибо, ребята!