2013-09-23 2 views
-3

Итак, эта программа позволяет мне настраивать фигуру палки. Я довольно новичок в python, и это мой первый большой проект за пределами школьной информатики. Поскольку координаты для рук тела заканчиваются в разных местах, мне нужны координаты из bodyfunc, короткие, средние и длинные. Эта программа работает, но по какой-то причине она не получает значение и передает ему функцию моего хвоста/аксессуара. Можете ли вы посмотреть мою программу и помогите мне!Как передать переменную между функцией

import turtle 


#Head 
def headfunc(headtype, headcolor, headpensize): 
    head=turtle.Turtle() 
    head.color(headcolor) 
    head.pensize(headpensize) 
    if headtype=="square": 
     wn = turtle.Screen() 
     head.penup() 
     head.left(90) 
     head.forward(200) 
     head.pendown() 
     head.left(90) 
     head.forward(50) 
     head.right(90) 
     head.forward(100) 
     head.right(90) 
     head.forward(100) 
     head.right(90) 
     head.forward(100) 
     head.right(90) 
     head.forward(50) 

    elif headtype=="round": 
     wn = turtle.Screen() 
     head.penup() 
     head.left(90) 
     head.forward(200) 
     head.right(90) 
     head.pendown() 
     head.circle(50) 

    elif headtype=="diamond": 
     wn = turtle.Screen() 
     head.penup() 
     head.goto(0,200) 
     head.pendown() 
     head.goto(35,300) 
     head.goto(0,400) 
     head.goto(-35,300) 
     head.goto(0,200) 

    else: 
     print("Not valid") 
# Body 
def bodyfunc(bodytype,bodycolor, bodypensize, endbody, endarm_x, endarm_y): 
    body=turtle.Turtle() 
    body.color(bodycolor) 
    body.pensize(bodypensize) 
    if bodytype=="short": 
     bodylength = 200 
     wn = turtle.Screen() 
     body.penup() 
     body.goto(0,200) 
     body.pendown() 
     body.goto(0,200-bodylength) #Body Length 
     body.goto(0,200-3*bodylength/8)      #Body(Reposition) 
     body.goto(bodylength/2,200-bodylength/4) #Arm Length (Right) 
     body.goto(0,200-3*bodylength/8)      #Body (Reposition) 
     body.goto(-bodylength/2,200-bodylength/4) #Arm Length (Left) 
     body.goto(0,200-3*bodylength/8)      #Body (Reposition) 
     body.goto(0,200-bodylength)      #Body (Reposition) 
     body.goto(bodylength/4, 200-3*bodylength/2) #Leg Length (Right) 
     body.goto(0,200-bodylength)      #Body (Reposition) 
     body.goto(-bodylength/4,200-3*bodylength/2)#Leg Length(Left) 
     endbody = 200-bodylength 
     endarm_x = bodylength/2 
     endarm_y = 200-bodylength/4 
     return endbody, endarm_x, endarm_y 

    elif bodytype=="medium": 
     bodylength = 300 
     wn = turtle.Screen() 
     body.penup() 
     body.goto(0,200) 
     body.pendown() 
     body.goto(0,200-bodylength) #Body Length 
     body.goto(0,200-3*bodylength/8)      #Body(Reposition) 
     body.goto(bodylength/2,200-bodylength/4) #Arm Length (Right) 
     body.goto(0,200-3*bodylength/8)      #Body (Reposition) 
     body.goto(-bodylength/2,200-bodylength/4) #Arm Length (Left) 
     body.goto(0,200-3*bodylength/8)      #Body (Reposition) 
     body.goto(0,200-bodylength)      #Body (Reposition) 
     body.goto(bodylength/4,200-3*bodylength/2) #Leg Length (Right) 
     body.goto(0,200-bodylength)      #Body (Reposition) 
     body.goto(-bodylength/4,200-3*bodylength/2)#Leg Length(Left) 
     endbody = 200-bodylength 
     endarm_x = bodylength/2 
     endarm_y = 200-bodylength/4 
     return endbody, endarm_x, endarm_y 

    elif bodytype=="long": 
     bodylength = 400 
     wn = turtle.Screen() 
     body.penup() 
     body.goto(0,200) 
     body.pendown() 
     body.goto(0,200-bodylength) #Body Length 
     body.goto(0,200-3*bodylength/8)      #Body(Reposition) 
     body.goto(bodylength/2,200-bodylength/4) #Arm Length (Right) 
     body.goto(0,200-3*bodylength/8)      #Body (Reposition) 
     body.goto(-bodylength/2,200-bodylength/4) #Arm Length (Left) 
     body.goto(0,200-3*bodylength/8)      #Body (Reposition) 
     body.goto(0,200-bodylength)      #Body (Reposition) 
     body.goto(bodylength/4,200-3*bodylength/2) #Leg Length (Right) 
     body.goto(0,200-bodylength)      #Body (Reposition) 
     body.goto(-bodylength/4,200-3*bodylength/2)#Leg Length(Left) 
     endbody = 200-bodylength 
     endarm_x = bodylength/2 
     endarm_y = 200-bodylength/4 
     return endbody 

    else: 
     print("Not valid") 
# Tail 
def tailfunc(tail, endbody): 
    if tail=="yes": 
     wn = turtle.Screen() 
     tail=turtle.Turtle() 
     tail.penup() 
     print(endbody) 
     tail.goto(0,endbody) 
     tail.pendown() 
     tail.color("brown") 
     tail.right(65) 
     tail.circle(60,200) 
     tail.shape("triangle") 

    elif tail=="no": 
     quiterty=1 

    else: 
     print("Not valid") 

def accessories1func(accessories1, endarm_x, endarm_y): 
    a=turtle.Turtle() 
    if accessories1=="sword": 
     wn = turtle.Screen() 
     a.goto(endarm_x, endarm_y) 
     a.forward(100) 
     wn.mainloop() 


def main(): 
    headtype=input("Enter head(square,round,diamond)") 
    headcolor=input("Head Color?:Red,white,black,gray,brown,gold,purple,blue,cyan") 
    headpensize=input("Head pensize? 1-5") 
    bodytype=input("Enter body(short,medium,long") 
    bodycolor=input("Body Color?:Red,white,black,gray,brown,gold,purple,blue,cyan") 
    bodypensize=input("Head pensize? 1-5") 
    tail=input("Tail: Yes or no") 
    accessories1=input("sword,staff,gun,bow") 

    endbody = 0 
    endarm_x = 0 
    endarm_y = 0 

    headfunc(headtype,headcolor, headpensize) 
    bodyfunc(bodytype,bodycolor, bodypensize, endbody, endarm_x, endarm_y) 
    tailfunc(tail,endbody) 
    accessories1func(accessories1, endarm_x, endarm_y) 

main() 
+5

Не могли бы вы немного уменьшить это? Здесь слишком много кода. – tacaswell

+0

Не публикуйте всю программу и просто просите «помочь». Скажите нам * точно, что случилось, и опубликуйте только код, необходимый для демонстрации проблемы. – Blorgbeard

+0

Немного запоздалый прием к SO. Вы получите лучшую помощь здесь, если вы сделаете это _easy_, чтобы помочь вам. Пожалуйста, прочитайте http://stackoverflow.com/help и http://sscce.org/ – tacaswell

ответ

1

Вы не фиксируете возвращаемые значения. Вам нужно сделать что-то вроде:

endbody, endarm_x, endarm_y = bodyfunc(bodytype,bodycolor, bodypensize, endbody, endarm_x, endarm_y) 

, но это выглядит как ваш тип возвращаемого bodyfunc не согласуется с тем, это может дать вам другие проблемы.

1

Я думаю, вам будет лучше всего служить, создав класс.

class stickfigure(object): 
    def __init__(self): 
    self.headtype=input("Enter head(square,round,diamond)") 
    self.headcolor=input("Head Color?:Red,white,black,gray,brown,gold,purple,blue,cyan") 
    # you get the idea. 

Таким образом, значения, которые вы хотите сохранить, являются членами каждой фигуры, которую вы создаете.

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