2013-04-28 3 views
0

Найдя решение моего предыдущего вопроса, я столкнулся в течение нескольких часов с новой проблемой с моими функциями Черепахи. Я новичок в Python и черепахе, поэтому я не уверен в синтаксисе, который необходим для того, где положить команды (то есть до или после определения функции), чтобы они были реализованы в модуле черепах, так как я пытаюсь имитировать случайный гонка черепахи, но она просто продолжает придумывать пустой экран черепахи с черной черепахой в центре. Что я делаю, что мешает командам работать? До сих пор Thisis, что у меня есть, но я хотел бы, по крайней мере знаю, что я получаю первую часть правильно, прежде чем я пытаюсь дальше идти с остальными:Функция черепахи не реализована

import turtle 
import random 

t = turtle.Turtle('turtle') 
v = turtle.Turtle('turtle') 
s = turtle.Screen() 
s.exitonclick() 

def setup(turtle1, turtle2, s): 
    t = turtle1 
    v = turtle2 
    s.setworldcoordinates(0,0,50,50) 
    t.setposition(1,25) 
    t.up() 
    v.setposition(1,25) 
    v.up() 
    t.color('red') 
    v.color('red') 
    s = turtle.Screen() 
    s.exitonclick() 


def newHeading(turtle, angleOfTipsiness): 
    t.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 
    v.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 

мне нужно начинающему картинку, чтобы выглядеть следующим образом: http://www.cs.ucsb.edu/~buoni/cs8/labs/lab02/start.JPG

Спасибо!

ответ

0

Вы не на самом деле , вызывающий либо setup, либо newHeading. В конце кода, вы должны иметь блок верхнего уровня вида:

# ... 

def newHeading(turtle, angleOfTipsiness): 
    t.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 
    v.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 

# after the end of the function definitions, add this: 

if __name__ == '__main__': 
    # example calls, replace with ones that make sense for what 
    # you're trying to do: 
    setup(t, v, s) 
    newHeading(t, 10) 

Несколько замечаний по коду:

  • Ваша setup функция должна использовать параметры turtle1 и turtle2, не назначать их новым локальным переменным t и v. (Если параметры функции слишком длинны, чтобы вводить их снова и снова, просто дайте им более короткие имена.) Аналогично, newHeading не использует параметр turtle.

  • t и v путают имена для локальных переменных, поскольку у вас уже есть глобальные переменные с одинаковыми именами.

  • Глобальным переменным следует указывать длинные и описательные имена. Короткие имена должны быть зарезервированы для локальных переменных, которые используются чаще и в более ограниченном контексте.

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

+0

Хорошо, я понимаю, что вы говорите о том, чтобы называть их разными переменными, я изменил это, но для добавления оператора if я не знаю, что бы это было, поскольку я не пытаюсь заставить его двигаться с помощью этой функции , Я просто настраиваю его так, чтобы он был на месте. Как это было бы на месте, если бы это не было под определением. И так, чтобы цвет был также очевидным. –

+0

@MoniqueWilliams Очевидно, что функции полезны только тогда, когда они вызываются, и вы не вызываете функции 'setup' и' newHeading'. Дополнительный код, который я предложил, должен быть помещен в самую нижнюю часть вашего модуля (не внутри функции) и делает именно то, что вы хотите: выполните код в функциях так, как это было бы, если бы оно не находилось под определением. Если вы хотите, чтобы что-то другое произошло, попробуйте как можно более четко объяснить желаемый результат. – user4815162342

+0

И 'ы.exitonclick() 'должен идти как последняя инструкция –

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