首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据用户输入绘制圆

根据用户输入绘制圆
EN

Stack Overflow用户
提问于 2019-04-30 05:07:16
回答 2查看 822关注 0票数 0

我正在为一个学校项目编写Python代码。该程序是根据用户的输入绘制多个圆,(2-6个圆)。我已经这样做了,但现在需要根据用户输入绘制多行圆圈。例如,如果用户选择了3个圆,我需要绘制3个圆乘以3个圆。

代码语言:javascript
运行
复制
#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
EN

回答 2

Stack Overflow用户

发布于 2019-04-30 05:27:27

别让我们做你的功课。告诉我们问题,告诉我们你尝试过什么,然后问一个问题。例如,“我如何让乌龟画出三排圆圈?”

用另一个for循环包围已有的for循环。每次运行外部循环时,内部循环都会运行以创建一行,然后在下一次迭代之前将海龟向下移动。

代码语言:javascript
运行
复制
#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()
票数 0
EN

Stack Overflow用户

发布于 2019-04-30 06:17:08

我提供了@JacksonH的替代解决方案,原因有两个:第一,如果你正在使用Python3(你应该这样做),那么你不需要从tkinter中抓取simpledialog,而是使用Python3海龟的numinput() (和textinput());第二,美学目标应该是让海龟尽可能少地移动来实现你的结果,即使这需要更多、更智能的代码。观察此解决方案与其他解决方案绘制图景的方式的差异:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55910819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档