Альтернатива Python команде GOTO?
-
10-10-2019 - |
Вопрос
У меня есть программа Python, которая является Essentailly, состоящей из графики черепах, и в основном спрашивает пользователя, сколько квадратов на рисование, а затем после каждого квадрата добавляет 1 к счетчику, используя:
counter=1
<drawing code here>
counter +=1
А затем после этого я хотел сделать чек, чтобы увидеть, равно ли количество квадратов равно сумме, на которую напечатал пользователь, и если это так, то я хотел перейти к нижней части сценария, где я бы сказал что-то вроде сделано!!. Анкет Но я не знаю, как заставить его перейти к определенной части сценария, так как команда GOTO, к которой я привык в партии, не поддерживается в Python (я знаю, goto = код спагетти)
Я обнаружил, что легкий обходной путь - это просто скачать модуль, который кто -то изготовил, который позволяет импортировать команду 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)
Если у вас есть ответ или альтернатива этой проблеме, это было бы очень оценено!
Решение
Это помогает?
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()
Не думайте с точки зрения одного длинного списка инструкций. Вместо этого подумайте о том, чтобы разбить вашу проблему на более мелкие действия, такие как «рисование мяча», и напишите каждое из этих действий в качестве процедуры; Затем подумайте о том, как объединить эти процедуры вместе, чтобы достичь своей цели. Написание того же кода неоднократно является признаком того, что вы делаете это неправильно.
Другие советы
Не проверяйте количество квадратов, а затем перейдите к концу, просто заправьте вместо этого соответствующее количество раз, каждый раз рисует квадрат.
Некоторые намеки:
>>> def square():
print "+--+"
print "| |"
print "| |"
print "+--+"
print
>>> range(5)
[0, 1, 2, 3, 4]
>>> for x in range(5):
print x
square()
0
+--+
| |
| |
+--+
1
+--+
| |
snip
Разбейте свой код на функции, а затем используйте return
Всякий раз, когда вы хотите пропустить оставшийся код функции.
Обновление: я не обязательно оправдываю несколько точек выхода для функции, как явно предполагалось комментатор; Этот ответ в контексте вопроса. Мое мнение по вопросу о многочисленных веществах совместно с тот Тима Петерса:
Что ж, Single-Exit лучше всего, потому что он всегда облегчает приборы и часто облегчает рассуждения (до тех пор, пока альтернатива не представит так много глупого логического флагов, которые отслеживают их, хуже, чем болезнь).