Рисование кругов на основе пользовательского ввода - PullRequest
0 голосов
/ 30 апреля 2019

Я пишу код Python для школьного проекта. Программа должна нарисовать несколько кругов на основе пользовательского ввода (2-6 кругов). Я сделал это, но теперь нужно нарисовать несколько рядов кругов на основе пользовательского ввода. Например, если пользователь выбирает 3 круга, мне нужно нарисовать 3 круга по 3 круга.

#import tkinter and turtle
import tkinter as tk
from turtle import *
#ask for user input using tkinter
from tkinter import simpledialog
application_window = tk.Tk()
answer = simpledialog.askinteger('Request', 'number of circles(2-6)?', 
parent=application_window, minvalue=2, maxvalue=6)
#set position of turtle and define turtle
t = Turtle()
t.penup()
t.setpos(-200,-200)
t.pendown()
#draw appropriate number of circles using loop
i = 2
for i in range (answer):
   circle(30)
   penup()
   forward(60)
   pendown()
   i = +1

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Я предлагаю альтернативное решение по сравнению с @JacksonH по двум причинам: во-первых, если вы используете Python 3 (а вы должны быть), тогда вам не нужно захватывать simpledialog из tkinter, вместо этого используйте черепаху Python 3 numinput()textinput());во-вторых, эстетическая цель должна состоять в том, чтобы черепаха двигалась как можно меньше для достижения вашего результата, даже если для этого требуется больше, более умный код.Обратите внимание на разницу в том, как это решение рисует картину в отличие от других:

from turtle import Screen, Turtle

# Ask for user input

DEFAULT_COUNT = 3

screen = Screen()
answer = screen.numinput('Request', 'number of circles(2-6)?', default=DEFAULT_COUNT, minval=2, maxval=6)

if answer is None:
    answer = DEFAULT_COUNT
else:
    answer = int(answer)  # int for range()

# define turtle and set position of turtle
turtle = Turtle()
turtle.speed('fast')  # because I have little patience
turtle.penup()
turtle.setpos(-200, -200)

direction = 1

# draw appropriate number of circles using nested loops
for row in range(answer - 1, -1, -1):  # loop backward to use last iteration as a flag

    for column in range(answer - 1, -1, -1):
        turtle.pendown()
        turtle.circle(30 * direction)
        turtle.penup()
        if column:
            turtle.forward(60)  # not done final time

    if row:  # every time but the last
        turtle.left(90 * direction)  # turn +/-90 degrees
        turtle.forward(60)  # forward the length of one diameter
        turtle.left(90 * direction)  # turn +/-90 degrees

        direction *= -1  # reverse our sense of direction

turtle.hideturtle()
screen.exitonclick()
0 голосов
/ 30 апреля 2019

Не заставляйте нас делать свою домашнюю работу.Скажите нам проблему, скажите, что вы пробовали, затем задайте вопрос.Например, «Как заставить черепаху нарисовать три ряда окружностей?»

Окружите петлю for, которая у вас уже есть, с помощью другой петли for.Каждый раз, когда запускается внешний цикл, внутренний цикл запускается для создания одной строки, а затем перемещает черепаху вниз перед следующей итерацией.

#import tkinter and turtle
import tkinter as tk
from turtle import *
#ask for user input using tkinter
from tkinter import simpledialog
application_window = tk.Tk()
answer = simpledialog.askinteger('Request', 'number of circles(2-6)?', 
parent=application_window, minvalue=2, maxvalue=6)
#set position of turtle and define turtle
t = Turtle()
t.penup()
t.setpos(-200,-200)
t.pendown()

#draw appropriate number of circles using loop
for row in range(answer):
    for col in range(answer):
        circle(30)
        penup()
        forward(60) # must be undone after loop
        pendown()

    penup()
    backward(60) # undo the backward on line 20
    backward(60 * col) # go backwards the length of the diameter times the number of circles
    right(90) # turn right 90 degrees
    forward(60) # forward the length of one diameter
    left(90) # turn back left 90 degrees
    pendown()
...