首页 > 解决方案 > 我的海龟代码有什么问题?不能理解

问题描述

我在做一个关于像素艺术的学校项目,想创造一个风景。怎么了?

""" 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。

没有错误,但是乌龟屏幕是完全空白的。

我实际上已经尝试删除pen.hideturtle()pen.speed('fastest')但它仍然无法正常工作。

谢谢你的帮助!

标签: pythonturtle-graphicspython-3.8python-turtle

解决方案


您的代码充满了错误:

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()

在代码中的两个位置查找该错误。这个逻辑:

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:循环。

以下是我对您的代码的修改以解决上述问题,但我没有声称它有任何有用的功能:

"""
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()

推荐阅读