#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.