Использование модуля Turtle в Python для перемещения уменьшающейся черепахи вверх по экрану окна

Я должен определить функцию movingTurtle, которая использует модуль черепахи Python, устанавливает черепаху в фактическую форму черепахи и перемещает эту черепаху вверх от нижней части экрана к вершине, уменьшаясь по мере продвижения. Вот код, который у меня сейчас есть:

def movingTurtle(mTurtle, window):
    '''
    Create turtle that is the shape of an actual
    turtle, then have it move from the bottom of screen
    to the top, getting smaller as it moves along its path
    '''
    width = window.window_width()
    height = window.window_height()

    bottom = -height/2
    top = height/2
   
    mTurtle.shape("turtle")
    mTurtle.penup()
    mTurtle.setposition(0, bottom)
    x = int(height/10)
    y = int(height/10)
    z = int(height/10)
    for i in range(bottom, top):
        mTurtle.setposition(0, i)
        #x -= .1
        #y -= .1
        #z -= .1
        #mTurtle.shapesize(x, y, z)

def main():
    # set window size
    width = int(input('Enter the width of the screen: '))
    height = int(input('Enter the height of the screen: '))
    turtle.setup(width,height)
    print('='*50)
    #========================================================
    # get reference to turtle window
    window = turtle.Screen()
    # set window title bar
    window.title('Lab20 - Turtle Object')
    #========================================================    
    # Moving turtle
    mTurtle = turtle.Turtle()
    # function call
    try:
        movingTurtle(mTurtle,window)
    except:
        print('movingTurtle is not either defined or there is a',
              'problem with the function')
    #========================================================

main()

(Причина использования части main () в том, что у меня есть несколько других функций - это для проекта)

Даже с закомментированными нижними четырьмя строками я даже не могу заставить черепаху двигаться сверху вниз. Сначала у меня было:

for i in range(-height, height):
     mTurtle.setposition(0, i)
     etc.

Но я понял, что это привело к тому, что черепаха начала двигаться дальше, чем фактический размер окна, мне нужно было сократить этот размер вдвое. Но когда у меня был этот код, черепаха двигалась по крайней мере снизу вверх. Я попытался вставить for i in range(-height/2, height/2), и тогда моя черепаха вообще перестала появляться.

Итак, затем я попытался сохранить эти значения в переменных bottom и top, думая, что, может быть, по какой-то причине я не могу поместить их в параметры диапазона? По какой-то причине это не работает, и я не уверен, почему.

Раньше, когда моя черепаха двигалась снизу вверх, последние 4 строки сжимали ее, но она становилась настолько маленькой, что исчезала к тому времени, когда достигала середины экрана. Я думаю, это произошло потому, что у меня не было высоты, разделенной на два.


person Bethany Fannin    schedule 11.11.2020    source источник
comment
верх, низ = высота // 2, -высота // 2   -  person Jason Yang    schedule 11.11.2020


Ответы (1)


Что касается движения черепахи, я считаю, что комментарий @JasonYang точно соответствует (+1), хотя и не имеет объяснения. Черепахи блуждают по плоскости с плавающей запятой, но range() хочет int значений. Мы используем целочисленное деление \\, чтобы преобразовать значения с плавающей запятой черепахи в то, что хочет range():

import sys
from turtle import Screen, Turtle

def movingTurtle(mTurtle, window):
    height = window.window_height()

    top, bottom = height // 2, -height // 2  # use // for range() below, turtle doesn't care

    mTurtle.shape('turtle')
    mTurtle.setheading(90)  # turtle faces direction of motion
    mTurtle.penup()
    mTurtle.sety(bottom)

    for y in range(bottom + 1, top):
        mTurtle.sety(y)

def main():
    width = int(input("Enter the width of the screen: "))
    height = int(input("Enter the height of the screen: "))

    screen = Screen()
    screen.setup(width, height)
    screen.title("Lab20 - Turtle Object")

    try:
        movingTurtle(Turtle(), screen)
    except:
        print("movingTurtle is not either defined or there is a problem with the function", file=sys.stderr)

    screen.exitonclick()

main()
person cdlane    schedule 11.11.2020