Come posso disegnare un mucchio di piazze?
-
25-10-2019 - |
Domanda
Sono molto nuovo a Python. Ho bisogno di disegnare questo forma per il college, ma lo trovo davvero difficile in modo che io sto cercando di fare piazza prima di andare in quell'immagine.
In ogni caso ecco la mia domanda: Come posso avere 8 righe? (Ci sono 8 quadrati in 1 fila) Non posso continuare ad aggiungere def start_point1():
Questo non sarebbe il modo corretto di farlo.
#!/usr/bin/python
import turtle as t
import time
def start_point():
t.penup()
t.setpos(-200,-240)
t.pendown()
def start_point1():
t.penup()
t.setpos(-200,-180)
t.pendown()
def draw_turtle():
for a in range(4):
t.forward(60)
t.left(90)
def draw_turtlerow():
for a in range(8):
draw_turtle()
t.forward(60)
def main():
start_point()
draw_turtlerow()
start_point1()
draw_turtlerow()
Soluzione
In questo tipo di problemi, si dovrebbe chiedere che cosa è l'operazione "atomica" che - ripete più e più volte - genererà la soluzione completa. È già trovato il tuo "atom" di base: disegnando un lato di un quadrato:
t.forward(60)
Ora, qual è il prossimo livello di "atomicità"? Beh, ripetendo quattro volte laterali, è possibile ottenere un quadrato (come l'avete trovato correttamente da soli)
for a in range(4):
t.forward(60)
t.left(90)
Ora sulla stessa linea, si potrebbe giungere alla conclusione che se si ripete 8 volte quanto sopra, si ottiene una linea, e se si ripete 8 volte una linea si otterrà una scheda di controllo completo. Dovrebbe essere qualcosa di simile:
for col in range(8):
for row in range(8):
# draw a square here
Ora, è già da soli scritto la funzione per disegnare un quadrato, l'unico problema è che si avrebbe bisogno di richiamare ciascuno di loro in luoghi diversi. Il punto chiave è necessario concentrarsi qui è: si può pensare a un metodo per calcolare questa posizione a partire dai valori di col
e row
Se ti trovi in ??difficoltà, ho postato un esempio di implementazione qui , Sono sicuro che non sarà necessario verificare che , ma se lo fai, ecco l'assegnazione in più:. invece di utilizzare quel codice così com'è, ruotare il cerchio interno in una chiamata a una funzione separata draw_square(row, col)
Modifica per guadagnare punti extra e l'orgoglio, una volta completato l'esercizio, osservare come la maggior parte delle linee nella scheda di controllo vengono ridisegnati più e più volte . Con poco sforzo si può raddoppiare l'efficienza del vostro programma. Riuscite a pensare a come?
HTH!
Altri suggerimenti
Si consideri l'aggiunta di argomenti per start_point
invece di creare nuove versioni
la funzione. Per esempio:
def start_point(x,y):
t.penup()
t.setpos(x,y)
t.pendown()
Con questo, è possibile eliminare start_pos1()
e si sono riutilizzo del codice, che è buono.
Lungo queste linee, considerare l'aggiunta di una certa flessibilità per le vostre altre funzioni pure. Per esempio, perché non hanno draw_turtlerow
prendere un numero che dice che quanti quadrati disegnare in prima fila? Poi si potrebbe fare un altro metodo che accetta il numero di righe che si desidera - questa funzione sarebbe quindi chiamare draw_turtlerow
e start_pos
più volte per richiamare l'intera griglia.
Non sono sicuro che questa è la direzione giusta per voi assegnazione, ma spero che si punta nella direzione giusta.