Что не так с моим кодом черепахи? Не может понять - PullRequest
0 голосов
/ 14 июля 2020

Я делал школьный проект о пиксельном искусстве и хотел создать пейзаж. Что не так?

""" Landscape Drawer.py
    Draws landscape on a turtle screen"""

import turtle as t
import random as r

pen = t.Pen()
pen.hideturtle()
pen.speed('fastest')

pixelno = 90000

def controls():
    if pen.xcor() == 150 or pen.xcor() == 150 or pen.ycor() == 150 or pen.ycor() == 150:
        pen.right(90)
        pen.forward(1)
        pen.right(90)
        
def allcode():
    while True:
        t.colormode(255)
        controls()
        if pen.ycor() < -75:
            rX = r.randint(0, 150)
            gX = r.randint(0, 255)
            bX = r.randint(0, 150)
            pen.pencolor(rX, gX, bX)
            pen.pendown()
            pen.penup()
            pen.forward(1)
        elif pen.ycor() > -150 or pen.ycor < 150:
            cloud = r.randint(1, 7)
            if cloud == 7:
                pen.pencolor(255, 255, 255)
                t.pendown()
            rY = r.randint(0, 150)
            gY = r.randint(0, 150)
            bY = r.randint(0, 255)
            pen.pencolor(rY, gY, bY)
            pen.pendown()
            pen.penup()
            pen.forward(1)
        else:
            print('Your landscape, look nice? ')
            
            
pen.penup()
pen.goto(-300, -300)
allcode()
pen.exitonclick() 

PS Я использую Python 3.8.2.

Ошибок нет, но экран черепахи полностью пустой.

I на самом деле пытались удалить pen.hideturtle() и pen.speed('fastest'), но это все равно не сработает.

Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 14 июля 2020

Ваш код пронизан ошибками:

pen.pencolor(255, 255, 255)
t.pendown()

Здесь вы разговариваете с двумя разными черепахами, pen и по умолчанию черепахой, которая вы не прикасались ни раньше, ни когда-либо снова. Что здесь происходит:

pen.xcor() == 150 or pen.xcor() == 150

отсутствует ли знак минус? То же самое для pen.ycor(). Эти операторы расположены в неправильном порядке:

pen.pendown()
pen.penup()
pen.forward(1)

Чтобы сделать отметку на нужном экране:

pen.pendown()
pen.forward(1)
pen.penup()

Найдите эту ошибку в двух местах вашего кода. Этот лог c:

if cloud == 7:
    pen.pencolor(255, 255, 255)

полностью отменяется следующим:

rY = r.randint(0, 150)
gY = r.randint(0, 150)
bY = r.randint(0, 255)
pen.pencolor(rY, gY, bY)

Вам не хватает предложения else. В этом предложении else:

else:
    print('Your landscape, look nice? ')

вам, вероятно, также понадобится оператор break, иначе вы никогда не выйдете из своей бесконечности while True: l oop.

Ниже это моя переработка вашего кода, чтобы исправить вышеуказанное, но я не утверждаю, что он делает что-то полезное:

"""
Landscape Drawer.py
Draws landscape on a turtle screen
"""

from turtle import Screen, Pen
from random import randint

def controls():
    if pen.xcor() == -150 or pen.xcor() == 150 or pen.ycor() == -150 or pen.ycor() == 150:
        pen.right(90)
        pen.forward(1)
        pen.right(90)

def allcode():
    while True:
        controls()

        if pen.ycor() < -75:
            r = randint(0, 150)
            g = randint(0, 255)
            b = randint(0, 150)
            pen.pencolor(r, g, b)

            pen.pendown()
            pen.forward(1)
            pen.penup()
        elif pen.ycor() > -150 or pen.ycor() < 150:
            cloud = randint(1, 7)

            if cloud == 7:
                pen.pencolor(255, 255, 255)
            else:
                r = randint(0, 150)
                g = randint(0, 150)
                b = randint(0, 255)
                pen.pencolor(r, g, b)

            pen.pendown()
            pen.forward(1)
            pen.penup()
        else:
            print('Your landscape, look nice? ')
            break

screen = Screen()
screen.colormode(255)

pen = Pen()
pen.hideturtle()
pen.speed('fastest')

pen.penup()
pen.goto(-300, -300)

allcode()

screen.exitonclick()
...