Ошибка типа: leftMove() отсутствует 1 требуемый позиционный аргумент: ‘lts’, и ошибка типа: rightMove() отсутствует 1 требуемый позиционный аргумент: ‘rts’

#python

#питон

Вопрос:

В этой программе у меня есть двенадцать черепах в моем коде (шесть с левой стороны, шесть с правой стороны). Я создал две функции, которые могут заставить пользователя перемещать одну из левой черепахи и одну из правой черепахи с помощью назначенного нажатия клавиши для левой черепахи и правой черепахи. Когда я попытался переместить свою первую черепаху с левой стороны, я получаю это сообщение об ошибке: «TypeError: leftMove () отсутствует 1 требуемый позиционный аргумент: ‘lts'», когда я пытаюсь переместить первую черепаху слева. Я также получаю это сообщение об ошибке при попытке переместить первую черепаху справа, говоря «TypeError: rightMove () отсутствует 1 требуемый позиционный аргумент: ‘rts'», когда я также пытаюсь переместить первую черепаху справа. Как я могу решить это сообщение об ошибке, чтобы пользователь мог управлять движением как первых левых, так и правых черепах?

Вот мой код:

 import turtle as trtl

leftTurtles = [] #Stores the turtle from leftTurtleShapes    
rightTurtles = [] #Stores the turtle from rightTurtleShapes

leftTurtleShapes = ["triangle", "circle", "arrow", "square", "turtle", "classic"] 
rightTurtleShapes = ["classic", "square", "circle", "triangle", "arrow", "turtle"]
leftTurtleColors = ["gold", "silver", "dodgerblue", "greenyellow", "peru", "crimson"] #Color aligns with leftTurtleShapes
rightTurtleColors = ["dodgerblue", "peru", "gold", "crimson", "greenyellow", "silver"] #Color aligns with rightTurtleShapes

for d in leftTurtleShapes: #Makes the turtle of leftTurtleShapes and the color of leftTurtleColors to be aligned with leftTurtleShapes and be stored in leftTurtles
    lts = trtl.Turtle(shape=d)
    leftTurtles.append(lts)
    lts.penup()
    leftColor = leftTurtleColors.pop()
    lts.fillcolor(leftColor)
    lts.goto(-350, 0) #Moves the leftTurtle to the left side of the window
    lts.setheading(0)

for s in rightTurtleShapes: #Makes the turtle of rightTurtleShapes and the color of rightTurtleColors to be aligned with rightTurtleShapes and be stored in rightTurtles
    rts = trtl.Turtle(shape=s)
    rightTurtles.append(rts)
    rts.penup()
    rightColor = rightTurtleColors.pop()
    rts.fillcolor(rightColor)
    rts.goto(350, 0) #Moves the rightTurtle to the right side of the window
    rts.setheading(180)

def rightMove(rts): #User can control the movement of one of the right turtles
    rts.setheading(180)
    rts.forward(1)

def leftMove(lts): #User can control the movement of one of the left turtles
    lts.setheading(0)
    lts.forward(1)

rightMove(rightTurtles[0]) #User controls the first right turtle
leftMove(leftTurtles[0]) #User controls the first left turtle

wn = trtl.Screen()
wn.onkeypress(leftMove, "d") #User uses the letter "d" to control the movement of the left turtle
wn.onkeypress(rightMove, "e") #User uses the letter "e" to control the movement of the right turtle
wn.listen()
wn.mainloop()
 

Ответ №1:

В документе функция не может принимать никаких аргументов.

Таким образом, вы можете переписать как:

 def rightMove(): #User can control the movement of one of the right turtles
    rts = ... # set your turtle here
    rts.setheading(180)
    rts.forward(1)

def leftMove(): #User can control the movement of one of the left turtles
    lts = ... # set your turtle here
    lts.setheading(0)
    lts.forward(1)
 

Комментарии:

1. Но вот в чем дело: нужно ли мне перемещать оператор цикла for в две мои функции для настройки моей черепахи? Потому что, когда я настраиваю свою черепаху как rts = trtl. Turtle() и очистил мои аргументы, он не будет запускаться. Кроме того, для моего кода не имеет смысла не принимать никаких аргументов, потому что это не будет указывать программе, как и что пользователь собирается перемещать обе черепахи. Как это поможет пользователю переместить первую левую черепаху и первую правую черепаху?

2. Вы можете создать класс-оболочку для turtle и реализовать его собственный onpresskey.