python alternativa al comando goto?
-
10-10-2019 - |
Domanda
Ho un programma Python che è essentailly compone di grafica della tartaruga, ed è fondamentalmente chiedendo all'utente come molte piazze a disegnare, e poi, dopo ogni quadrato, si aggiunge 1 a un contatore utilizzando:
counter=1
<drawing code here>
counter +=1
E poi, dopo che ho voluto fare un controllo per vedere se il numero di caselle è pari all'importo che l'utente ha digitato in, e se lo è, allora ho voluto andare a fondo dello script dove avrei farle dire qualcosa del tipo fatto !! . ma non so come farlo andare in una certa parte dello script del comando goto che io sono abituato a in batch non è supportato in Python (lo so, goto = spaghetti di codice)
ho trovato una soluzione semplice è solo per scaricare un modulo che qualcuno ha fatto che consente di importare il comando goto in python e utilizzarlo proprio come si farebbe in lotti ma vorrei una soluzione pitone nativa eventuale!
il mio codice corrente è:
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)
Se si dispone di una risposta o alternativa a questo problema sarebbe molto apprezzato!
Soluzione
Fa questo aiuto?
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()
Non pensare in termini di un unico lungo elenco di istruzioni. Pensate invece di rompere il vostro problema a parte in azioni più piccole, come ad esempio "disegnando una palla", e scrivere ognuno di tali azioni come una procedura; poi pensare a come unire tali procedure insieme per raggiungere il tuo obiettivo. Scrivendo lo stesso codice più volte è un segno che si sta facendo male.
Altri suggerimenti
Non controllare il numero di caselle e poi andare alla fine, proprio ciclo il numero appropriato di volte, invece, disegnando un quadrato ogni volta.
alcuni suggerimenti:
>>> 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]
abbattere il vostro codice in funzioni, quindi utilizzare return
ogni volta che si desidera saltare il codice rimanente di una funzione.
UPDATE: Non necessariamente condoniamo più punti di uscita per una funzione, come commentatore ovviamente assunto; questa risposta è nel contesto della questione. Il mio parere sulla questione di molteplici uscite-co-ad incidere con che di Tim Peters:
Bene, single-uscita è meglio perché rende sempre più facile e strumentazione spesso rende più facile ragionare (fino agli introduce tante alternative goofy booleani bandiere che tenere traccia di quelli è peggio della malattia).