2014-01-30 3 views
-1

코드 조각을 새로 추가했는데 지금 프로그램을 실행하면 거북이 그래픽 충돌이 발생합니다. 내가 유휴 상태에서 런타임 오류가 발생하지 않기 때문에 무엇을 수정해야할지 모르겠다.런타임 중에 거북이가 비정상적으로 충돌합니다.

gotoFire() 함수를 구현할 때 충돌이 발생하기 시작했다. 이 프로그램의 운영에 결정적이기 때문에 제거 할 수는 없습니다!

import turtle 
import math 
NUMBER_OF_LICENSES=10 

def goodbyeMessage(): 
    print("Thank you for using the program!") 

def getInfo(): 
    fire_Direction=math.radians(float(input("Please input the angle in degrees of the fire quickly!"))) 
    fire_Distance=float(input("Please input the distance of the fire ~VERY~ quickly (input a number between 1 and 5)")) 
    return fire_Direction,fire_Distance 


def announceDirections(horizontolDirection,verticalDirection): 

    sideOfFireHouseToLeaveFrom=[] 

    if horizontolDirection < 0: 
     print("The fire is %d streets to the west of the firehouse!" %horizontolDirection) 
     sideOfFireHouseToLeaveFrom += 'west' 
    elif horizontolDirection > 0: 
     print("The fire is %d streets to the east of the firehouse!" %horizontolDirection) 
     sideOfFireHouseToLeaveFrom += 'east' 
    else: 
     sideOfFireHouseToLeaveFrom += 'void' 

    if verticalDirection < 0: 
     print("The fire is %d streets to the south of the firehouse!" %verticalDirection) 
     sideOfFireHouseToLeaveFrom += 'south' 
    elif verticalDirection > 0: 
     print("The fire is %d streets to the north of the firehouse!" %verticalDirection) 
     sideOfFireHouseToLeaveFrom += 'north' 
    else: 
     pass 

    if verticalDirection == 0 and horizontolDirection == 0: 
     print("The firehouse is on fire!") 
     sideOfFireHouseToLeaveFrom += 'void' + 'void' 

    return sideOfFireHouseToLeaveFrom 

def gotoFire(horizontolDirection,verticalDirection,sideOfFireHouseToLeaveFrom): 



    if sideOfFireHouseToLeaveFrom[0] == "east": 
     turtle.forward(300) 
     turtle.right(90) 


    elif sideOfFireHouseToLeaveFrom[0] == "west": 
     turtle.forward(200) 
     turtle.right(90) 

    else: 
     pass 

    if sideOfFireHouseToLeaveFrom[1] == "north": 
     turtle.forward(200) 

    elif sideOfFireHouseToLeaveFrom[1] == "south": 
     turtle.forward(300) 

    else: 
     pass 





def giveDirection(fire_Direction,fire_Distance): 
    horizontolDirection = int(abs(round(fire_Distance * (math.cos(fire_Direction))))) 
    verticalDirection = int(abs(round(fire_Distance * (math.sin(fire_Direction))))) 
    sideOfFireHouseToLeaveFrom = announceDirections(horizontolDirection,verticalDirection) 

    gotoFire(horizontolDirection,verticalDirection,sideOfFireHouseToLeaveFrom) 



    return horizontolDirection, verticalDirection 



def reportFire(): 

    fire_Direction,fire_Distance=getInfo() 
    horizontolDirection,verticalDirection = giveDirection(fire_Direction,fire_Distance) 



def drawHorizontal(): 
    turtle.speed(0) 
    turtle.penup() 
    turtle.forward(-300) 
    turtle.left(90) 
    turtle.forward(300) 
    turtle.right(90) 
    turtle.pendown() 
    for i in range(5): 
     turtle.forward(500) 
     turtle.forward(-500) 
     turtle.right(90) 
     turtle.forward(100) 
     turtle.left(90) 

    turtle.forward(500) 
    turtle.left(90) 
    turtle.forward(500) 
    turtle.left(90) 
    turtle.forward(500) 
    turtle.left(180) 

def drawVertical(): 
    for i in range(5): 
      turtle.forward(100) 
      turtle.right(90) 
      turtle.forward(500) 
      turtle.forward(-500) 
      turtle.left(90) 
    turtle.forward(-500) #Back to upper left corner which will be main drawing control point 

def drawFireStation(): 
    #From main drawing control point 
    turtle.penup() 
    #225 instead of 250 so firestation circle is centered in middle of grid 
    turtle.forward(225) 
    turtle.right(90) 
    turtle.forward(250) 
    turtle.pendown() 
    turtle.circle(25) 
    turtle.penup() 
    turtle.forward(-250) 
    turtle.left(90) 
    turtle.forward(-225) 
def drawGrid(): 
    turtle.showturtle() 
    turtle.speed(0) 
    drawHorizontal() 
    drawVertical() 
    drawFireStation() 



def main(): 
    drawGrid() 
    for i in range(NUMBER_OF_LICENSES): 
     reportFire() 
    goodbyeMessage() 

if __name__ == "__main__": 
    main() 
+0

당신이 전체 오류 메시지를 게시 할 수 대신 등 sideOfFireHouseToLeaveFrom.append('west')를 사용 하는가? – jayelm

답변

0

당신은 gotoFire

등의 sideOfFireHouseToLeaveFrom 인수에 문자의 목록을 전달하는 :

['v', 'o', 'i', 'd', 'n', 'o', 'r', 't', 'h'] 

이 정확하지 않는 것. 나는 당신의 프로그램이 충돌하고 있다고 생각하지 않는다. if 조건이 모두 False

이기 때문에 아무 것도하지 않고 있습니다. 잘못된 데이터는 announceDirections에서 온 것 같습니다. 문자열을 목록에 추가하려고하기 때문에.

>>> sideOfFireHouseToLeaveFrom=[] 
>>> sideOfFireHouseToLeaveFrom += 'west' 
>>> sideOfFireHouseToLeaveFrom 
['w', 'e', 's', 't'] 

당신은 아마

>>> sideOfFireHouseToLeaveFrom=[] 
>>> sideOfFireHouseToLeaveFrom.append('west') 
>>> sideOfFireHouseToLeaveFrom 
['west'] 
+0

그게 전부 였어. 다시 한 번 감사드립니다. Gnibbler! – user3187485

관련 문제