Python альтернатива команде goto? - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть программа на Python, которая в основном состоит из графики черепах, и она в основном спрашивает пользователя, сколько квадратов нарисовать, а затем после каждого квадрата добавляет 1 к счетчику, используя:

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

И после этого я захотел проверить, равно ли количество квадратов тому количеству, которое набрал пользователь, и если да, то я хотел бы перейти к нижней части сценария, гдезаставь это сказать что-то вроде готово !! .но я не знаю, как заставить его перейти к определенной части скрипта, так как команда goto, к которой я привык в пакетном режиме, не поддерживается в python (я знаю, goto = код спагетти)

Iнашел легкий обходной путь - просто скачать созданный кем-то модуль, который позволит вам импортировать команду goto в python и использовать ее так же, как вы это делаете в пакетном режиме, но я хотел бы иметь собственное решение для python, если оно есть!

мой текущийкод:

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) 

Если у вас есть ответ или альтернатива этой проблеме, это будет с благодарностью!

Ответы [ 4 ]

3 голосов
/ 14 декабря 2010

Помогает ли это?

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()

Не думайте с точки зрения единого длинного списка инструкций. Вместо этого подумайте о том, чтобы разбить проблему на более мелкие действия, такие как «рисование мяча», и запишите каждое из этих действий как процедуру; затем подумайте о том, как объединить эти процедуры для достижения вашей цели. Повторное написание одного и того же кода является признаком того, что вы делаете это неправильно.

2 голосов
/ 14 декабря 2010

Не проверяйте количество квадратов, а затем переходите к концу, просто зацикливайте соответствующее количество раз, каждый раз рисуя квадрат.

0 голосов
/ 15 декабря 2010

Разбейте ваш код на функции, затем используйте return всякий раз, когда вы хотите пропустить оставшийся код функции.

ОБНОВЛЕНИЕ: я не обязательно оправдываю множественные точки выхода для функции, как очевидно предположил комментатор; этот ответ находится в контексте вопроса. Мое мнение по поводу множественных выходов совпадает с , что Тима Питерса:

Хорошо, единый выход лучше, потому что он всегда облегчает измерительные приборы и часто облегчает рассуждение (до тех пор, пока альтернатива не глупые булевы флаги, которые отслеживают их хуже, чем болезнь).

0 голосов
/ 14 декабря 2010

некоторые подсказки:

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


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


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

1
+--+
|  |

[надрез]

...