#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()
было бы сделано изначально.