Как я могу вызвать функцию настроек черепахи в функцию для перемещения черепахи, а затем вызвать функцию в основную?

#python #function #python-turtle

#питон #функция #питон-черепаха

Вопрос:

Я знаю, что мой вопрос сбивает с толку, поэтому я проясню ситуацию здесь, а затем опубликую код ниже. То, что я пытаюсь сделать, как показано ниже, — это использовать функцию tonysetup, в которой она приведет специально оформленную черепаху в назначенную область. Поэтому я вызываю функцию tonysetup в функцию tonyspirograph, и я вызываю функцию torysetup в функцию torystarburst. Я дам вам еще один идентичный код, который делает все это в основном, моя проблема в том, что я должен вызывать функции в другие функции.

 import turtle def tonysetup():  tony = turtle.Turtle()  tony.shape("turtle")  tony.pensize(1.05)  tony.speed(20) def torysetup():  tory = turtle.Turtle  tory.shape("turtle")  tory.pensize(1.05)  tory.speed(20)  tory.penup()  tory.backward(75)  tory.left(90)  tory.forward(25)  tory.right(90)  tory.pendown() def tonyspirograph():  tonysetup()  tony.speed(100)  for i in range(12):  for color in ("red", "white", "blue"):  tony.color(color)  tony.circle(62.5)  tony.circle(87.5)  tony.left(10)  tony.hideturtle() def torystarburst():  for i in range(24):  for color in ("red", "white", "blue"):  tory.color(color)  tory.forward(150)  tory.right(145)  tory.hideturtle() def main():  tonyspirograph()  torystarburst()  print("Star Spangled Spirograph: by *** *******")  print("Thank you veterans!") main()  

Прямо сейчас, когда я запускаю этот код, он говорит следующее «Ошибка имени: имя «тони» не определено в строке 26″

Я сделал следующий код ко Дню ветерана, и на этом основан предыдущий код. Это все в основном, в отличие от вызова функций, подобных тем, которые мне нужны.

 import turtle def main():  tony = turtle.Turtle()  tony.shape("turtle")  tony.pensize(1.05)  tony.speed(20)  tory = turtle.Turtle()  tory.shape("turtle")  tory.pensize(1.05)  tory.speed(20)  for i in range(12):  for color in ("red", "white", "blue"):  tony.color(color)  tony.circle(62.5)  tony.circle(87.5)  tony.left(10)  tony.hideturtle()  tory.penup()  tory.backward(75)  tory.left(90)  tory.forward(25)  tory.right(90)  tory.pendown()  for i in range(24):  for color in ("red", "white", "blue"):  tory.color(color)  tory.forward(150)  tory.right(145)  tory.hideturtle()  print("Star Spangled Spirograph: by **** *******")  print("Thank you veterans!") main()  

Ответ №1:

Вы определили тони в функции, поэтому в данный момент он распознается только в этой функции. Вам нужно передать его в tonyspirograph (), когда вы выполняете настройку. Это сработало для меня:

 import turtle def tonysetup():  tony = turtle.Turtle() #assign the turtle to the variable tony  tony.shape("turtle")  tony.pensize(1.05)  tony.speed(20)  return tony #return the turtle def torysetup():  tory = turtle.Turtle() #this was missing brackets  tory.shape("turtle")  tory.pensize(1.05)  tory.speed(20)  tory.penup()  tory.backward(75)  tory.left(90)  tory.forward(25)  tory.right(90)  tory.pendown()  return tory def tonyspirograph():  tony = tonysetup() # the setup returns the turtle tony  tony.speed(100)  for i in range(12):  for color in ("red", "white", "blue"):  tony.color(color)  tony.circle(62.5)  tony.circle(87.5)  tony.left(10)  tony.hideturtle() def torystarburst():  tory = torysetup() # you need to do the same thing  for i in range(24):  for color in ("red", "white", "blue"):  tory.color(color)  tory.forward(150)  tory.right(145)  tory.hideturtle() def main():  tonyspirograph()  torystarburst()  print("Star Spangled Spirograph: by *** *******")  print("Thank you veterans!") main()  

Что касается ваших разочарований, я понимаю, я сам здесь новичок. Но это раздражает, когда люди постоянно спрашивают, а не сами находят решения. Узнайте, как пошагово просматривать код, читать ошибки, обращаться к документации, Google и т. Д. Чем больше вы сможете отлаживать себя, тем быстрее вы научитесь и тем более компетентными станете. Затем в один прекрасный день, когда вы станете программистом оружия, вас тоже могут раздражать новички, задающие глупые вопросы.

Ответ №2:

Есть несколько простых ошибок, которые мешают вашему коду работать. Во-первых, это tonysetup() и torysetup() создать черепах, но не сделать этих черепах доступными за пределами этих функций. Это может быть сделано с помощью глобальных переменных или, предпочтительно, с помощью двух функций return , которые они создают, для вызывающего, который помещает их в переменную.

Следующая проблема заключается в том, что вы torystarburst() не можете вызвать свою torysetup() функцию. Вы понимаете это правильно с tonyspirograph() / tonysetup() , но не с другой парой функций.

Наконец, вы передаете неправильные значения методу turtle speed() , перечитайте документацию. Ниже приведена моя доработка вашего кода для решения вышеуказанных проблем и некоторых проблем со стилем:

 from turtle import Screen, Turtle  def tonysetup():  tony = Turtle()  tony.shape('turtle')  tony.pensize(1.05)  tony.speed('fastest')   return tony  def torysetup():  tory = tonysetup()   tory.penup()  tory.backward(75)  tory.left(90)  tory.forward(25)  tory.right(90)  tory.pendown()   return tory  def tonyspirograph():  tony = tonysetup()   for _ in range(12):  for color in ('red', 'white', 'blue'):  tony.color(color)  tony.circle(62.5)  tony.circle(87.5)  tony.left(10)   tony.hideturtle()  def torystarburst():  tory = torysetup()   for _ in range(24):  for color in ('red', 'white', 'blue'):  tory.color(color)  tory.forward(150)  tory.right(145)   tory.hideturtle()  def main():  tonyspirograph()  torystarburst()  print("Star Spangled Spirograph: by *** *******")  print("Thank you veterans!")  screen = Screen()  main()  screen.exitonclick()  

Я перешел torysetup() на звонок tonysetup() , так как все, что tonysetup() делает, — это то, что torysetup() было бы сделано изначально.