Pregunta

Soy muy nuevo en Python. Necesito dibujar esta forma para la universidad, pero me resulta muy difícil, así que estoy tratando de hacer un cuadrado antes de entrar en esa imagen.

De todos modos, aquí está mi pregunta: ¿Cómo puedo tener 8 filas? (Hay 8 cuadrados en 1 fila) No puedo seguir agregando def start_point1(): Esta no sería la forma correcta de hacerlo.

enter image description here

#!/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()
¿Fue útil?

Solución

En este tipo de problemas, debe preguntarse cuál es la operación "atómica" que, repetida una y otra vez, generará su solución completa. Ya encontraste tu "átomo" básico: dibujar un lado de un cuadrado:

t.forward(60)

Ahora, ¿cuál es el siguiente nivel de "atomicidad"? Bueno, repitiendo cuatro veces por lado, puedes obtener un cuadrado (como te enteraste correctamente)

for a in range(4):
    t.forward(60)
    t.left(90)

Ahora, en la misma línea, puede llegar a la conclusión de que si repite 8 veces lo anterior, obtiene una línea, y si repite 8 veces por línea obtendrá un tablero de verificación completo. Debería ser algo como:

for col in range(8):
    for row in range(8):
        # draw a square here

Ahora, ya te escribiste la función para dibujar un cuadrado, el único problema es que necesitarías dibujar cada uno de ellos en diferentes lugares. El punto clave que tienes para concentrarte aquí es: ¿Puede pensar en un método para calcular esta ubicación a partir de los valores de col y row?

Si te quedas atascado, publiqué una implementación de muestra aquí, Estoy seguro de que no necesitarás comprobar eso, pero si lo hace, aquí está la tarea adicional: en lugar de usar ese código como es, gire el círculo interno en una llamada a una función separada draw_square(row, col).

EDITAR: Para puntos extra y orgullo, una vez completado el ejercicio, Observe cómo la mayoría de las líneas en el tablero de verificación se vuelven a dibujar una y otra vez. Con muy poco esfuerzo, puede duplicar la eficiencia de su programa. ¿Puedes pensar cómo?

¡Hth!

Otros consejos

Considere agregar argumentos a start_point en lugar de crear nuevas versiones de la función. Por ejemplo:

def start_point(x,y):
    t.penup()
    t.setpos(x,y)
    t.pendown()

Con esto, puedes eliminar start_pos1() Y estás reutilizando código, lo cual es bueno.

En este sentido, considere agregar algo de flexibilidad a sus otras funciones también. Por ejemplo, ¿por qué no tener draw_turtlerow ¿Tome un número que le indique cuántos cuadrados dibujar en la fila? Luego podría hacer otro método que tome la cantidad de filas que desea: esta función luego llamaría draw_turtlerow y start_pos varias veces para dibujar toda la cuadrícula.

No estoy seguro de que esta sea la dirección correcta para tu tarea, pero espero que te indique en la dirección correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top