2017-01-20 3 views
0

Я пишу программу, которая требует, чтобы одна черепаха переходила на другую. Однако простой:Перемещение одной черепахи в другую

turtle.goto(other_turtle.pos()) 

где черепахи и other_turtle два уже определены черепахи

Это не работает, потому что он говорит, что other_turtle.pos() способ и вычитание между методом и поплавками не определен. Итак, я продолжал пытаться изменить other_turtle.pos() на float(other_turtle.pos()). Затем это заблуждение, говоря, что вы не можете плавать метод.

Мой вопрос: возможно ли это сделать или из-за ограничений самой черепахи python?

код:

def turtle_clone(clone_nmb): 
    return [turtle.Turtle() for i in range(clone_nmb)] 

def straight_curve(turtle,number_of_arms,number_of_points,colors): 
    turtles = turtle_clone(2) 
    turtles[0].hideturtle() 
    turtles[1].hideturtle() 
    turtles[0].color(colors[0]) 
    turtles[1].color(colors[0]) 
    pos = 0 
    for i in range(number_of_arms): 
     turtles[0].setheading(pos) 
     turtles[0].forward(5) 
     turtles[1].setheading(pos+(360/number_of_arms)) 
     turtles[1].forward(5*number_of_points) 
     turtles[1].right(180) 
     for i in range(number_of_points): 
      turtles[0] 
      turtle.penup() 
      turtle.goto(turtles[0].xcor,turtles[0].ycor) 
      turtle.pendown() 
      turtle.goto(turtles[1].xcor,turtles[1].ycor) 
      turtles[0].forward(5) 
      turtles[1].forward(5) 
     pos += 360/number_of_arms 
     turtles[0].goto(0,0) 

Сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\Users\gularson\Documents\Garrett\Messing Around\turtle_functions.py", line 97, in <module> 
    straight_curve(turt,5,30,["white"]) 
    File "C:\Users\gularson\Documents\Garrett\Messing Around\turtle_functions.py", line 87, in straight_curve 
    turtle.goto(turtles[0].xcor,turtles[0].ycor) 
    File "C:\Users\gularson\Documents\Garrett\Python\lib\turtle.py", line 1776, in goto 
    self._goto(Vec2D(x, y)) 
    File "C:\Users\gularson\Documents\Garrett\Python\lib\turtle.py", line 3165, in _goto 
    diff = (end-start) 
    File "C:\Users\gularson\Documents\Garrett\Python\lib\turtle.py", line 262, in __sub__ 
    return Vec2D(self[0]-other[0], self[1]-other[1]) 
TypeError: unsupported operand type(s) for -: 'method' and 'float' 
+0

всегда ставится под вопрос FULL сообщение об ошибке (Traceback) - это может быть более полезным, чем ваше описание. – furas

+0

Вы уверены, что используете '()' в 'pos()'? Из вашего описания похоже, что вы используете 'turtle.goto (other_turtle.pos)' без '()'. Лучше показать полное сообщение об ошибке и код. – furas

ответ

0

Выражение:

turtle.goto(other_turtle.pos()) 

работает. Следующие работает без ошибок:

import turtle 

other_turtle = turtle.Turtle() 

turtle.goto(other_turtle.pos()) 

turtle.done() 

Но, конечно, это не очень интересно (перемещает черепаху в точке (0, 0) на вершине другой черепахи уже в точке (0, 0), но это законно.) Так что должно быть что-то еще, что вас подводит.

То, что вы на самом деле написал в своем коде:

turtle.goto(other_turtle.xcor, other_turtle.ycor) 

turtle.goto(turtles[0].xcor,turtles[0].ycor) 

который вызовет ошибку вы сообщили, как вы передаете методы xcor и вместо того, чтобы называть их. Это должно было быть:

turtle.goto(other_turtle.xcor(), other_turtle.ycor()) 

turtle.goto(turtles[0].xcor(), turtles[0].ycor()) 

или исходный код, который вы спросили о:

turtle.goto(other_turtle.pos()) 

turtle.goto(turtles[0].pos()) 

бы работало нормально.

+0

Я определил черепаху, которая движется с именем, данным вводом, но тот, который он перемещает, не имеет имени и определен в списке. –

+0

@GarrettGularson, теперь я обновил свой ответ, что есть достаточный контекст, чтобы увидеть ошибку в вашем коде. – cdlane

+0

Спасибо, что отлично работали –

Смежные вопросы