2010-12-14 3 views
0

나는 essentailly 거북 그래픽으로 구성되어 파이썬 프로그램을 가지고, 그것은 기본적으로 많은 사각형 그리는 방법을 사용자에게 요구하고, 다음 각 평방 후에는 사용하여 카운터에 1을 추가합니다goto 명령 대신 python을 사용 하시겠습니까?

counter=1 
<drawing code here> 
counter +=1 

그리고 나서 그 사각형의 수가 사용자가 입력 한 양과 같은지 확인하기 위해 검사를하고 싶었습니다. 그렇다면 스크립트의 맨 아래로 가보고 싶습니다. 같은 것을 완료했습니다!. 하지만 나는 스크립트에서 스크립트의 특정 부분으로 이동하는 방법을 모르지만 배치에서 익숙하지 않은 goto 명령이 파이썬 (i gott = 스파게티 코드)에서 지원되지 않습니다.

쉬운 해결 방법은 누군가가 만든 모듈을 다운로드하여 goto 명령을 파이썬으로 가져 와서 배치에서 사용하는 것처럼 사용할 수 있지만 원한다면 파이썬 솔루션을 원합니다!

내 현재 코드입니다 :이 문제에 대한 해답이나 대안이있는 경우

from turtle import * 
import time 
counter=1 
color("red", "blue") 
down() 

user=int(raw_input('how many balls do you want?')) 
counter +=1 
if user===counter: 

# solution goes here! 

else: 

for step in range(24): 
     right(105) 
     forward(100) 
     right(105) 
     forward(100) 
     right(105) 
     forward(100) 
     right(105) 
     forward(100) 

up() 
goto(120,0) 
down() 


counter +=1 
if user==counter: 

#solution goes here! 

else: 

for step in range(24): 
     right(105) 
     forward(100) 
     right(105) 
     forward(100) 
     right(105) 
     forward(100) 
     right(105) 
     forward(100) 

up() 
goto(0,-50) 
write("Done!") 

time.sleep(5) 

이 크게 감사하겠습니다!

+5

기능을 사용하지 않는 이유가 있습니까? – Falmarri

+0

goto (120,0)가 (x, y)에서 위치를 바꾼 것처럼 보입니다. 함수처럼 보이고 지정된 코드를 직접 제어하는 ​​프로그래밍 언어에서 찾은 goto가 아닙니다. 최소한 첫 번째 모습에서 볼 때 이것이 보이는 것입니다. – pyfunc

+2

어 ....'거북이 '모듈에서 얻은'goto'는 대본의 다른 곳으로 점프하는 것과 절대적으로 관련이 없습니다 ... 거북이의 위치를 ​​설정합니다. 어쨌든,이 작업을하는 방법은 ** 코드를 구조화하는 것입니다 **."goto"에 대해 들어 본 적이없는 척하면서 처음부터 실제 제어 구조가 작동하는 방법을 배웁니다. –

답변

3

이 도움이됩니까?

import turtle # don't pollute the namespace 
import time 

def getInt(msg): 
    return int(raw_input(msg)) 

def drawBall(): 
    turtle.down() 
    for i in range(96): 
     turtle.right(105) 
     turtle.forward(100) 
    turtle.up() 

def moveOver(): 
    turtle.goto(120,0) 

def Done(): 
    turtle.goto(0,-50) 
    turtle.write('Done!') 
    time.sleep(5) 

def main(): 
    turtle.color('red','blue') 
    for i in range(getInt('How many balls do you want?')): 
     drawBall() 
     moveOver() 
    Done() 

if __name__=="__main__": 
    main() 

하나의 긴 명령어 목록으로 생각하지 마십시오. 그 대신에 문제를 "공을 뽑는"같은 작은 행동으로 나누어 각각의 행동을 절차로 쓰는 것에 대해 생각해보십시오. 당신의 목표를 달성하기 위해 그 절차들에 함께 참여하는 방법에 대해 생각해보십시오. 동일한 코드를 반복적으로 쓰는 것은 잘못하고 있다는 신호입니다.

+0

ok이 코드에는 오류가 없지만 열리지 않습니다! .1 초 동안 화면에서 콘솔을 깜박이고 아무런 오류없이 닫힙니다 ... 어떤 아이디어입니까? – daniel11

+0

@ Daniel11 : 두 가지 방법으로 실행할 수 있습니다. 첫째, 잘라내어 대화식 세션에 붙여 넣으십시오. 두 번째로, myturtle.py로 저장 한 다음 'python -i myturtle.py'명령 줄에서 실행합니다 (-i는 스크립트가 끝날 때 인터프리터가 대화식 모드를 유지하도록 지시합니다). –

+0

기다려라, 위의 게시 된 프로그램은 변수를 정의한다. 내가 게시 한 것을해야한다고 말하고 나서 오른쪽 (90) 또는 앞으로 (110)와 같은 지침을 넣어야한다? 실제로 게시 한 스크립트가 아무 것도 표시하지 않기 때문에 ... – daniel11

2

사각형의 수를 확인한 다음 끝까지 이동하지 말고 적절한 횟수만큼 반복하여 매번 사각형을 그립니다.

0

몇 가지 힌트 :

>>> def square(): 
    print "+--+" 
    print "| |" 
    print "| |" 
    print "+--+" 
    print 


>>> range(5) 
[0, 1, 2, 3, 4] 
>>> for x in range(5): 
    print x 
    square() 


0 
+--+ 
| | 
| | 
+--+ 

1 
+--+ 
| | 

[싹둑]

0

코드를 함수로 분해 한 다음 함수의 나머지 코드를 건너 뛰고 자 할 때마다 return을 사용하십시오.

업데이트 : 코멘트 작성자가 분명히 가정 한 것처럼 함수의 여러 종료점을 반드시 용인하지는 않습니다. 이 대답은 질문의 문맥에 있습니다. 팀 피터스 (Tim Peters)의 that 여러-종료 공동 incides의 문제에 대한 내 의견 : 항상 계측 쉽게하며, 종종 대안은 이렇게 소개까지 (쉽게 추론 수 있기 때문에

음, 하나의 출구가 최고입니다 many 바보 플래그를 추적하면 질병보다 악화됩니다.)

+1

goto만큼 나쁘지는 않지만 이것은 종종 나쁜 프로그래밍 습관입니다. 항상 한 곳에서 종료 될 때 함수를 디버그하는 것이 훨씬 쉽습니다. –

+0

@Hugh : 질문은 분명합니다 : goto 명령 대신 Python을 사용하므로이 상황에서 유용하다고 생각합니다. 우리는 분명히 맥락에 동의하지 않는다. – tzot

+0

@ TZ ?: 내 당황 스럽지만, 나는 내 의견을 쓰자 마자 바로이 패턴을 사용하고 있음을 깨달았다. 확실히, 그것의 장소를 가지고 있으며, 아껴서 사용할 때 더 쉽게 읽을 수있는 기능을 만들 수 있습니다 -하지만 속담처럼 지능적으로 깨뜨릴 수있는 규칙을 알아야합니다 ;-) –

관련 문제