我目前正在完成大学作业。我们在第一学期一直在使用John Zelle的graphics.py
模块。需要重构此功能的帮助
任务是构造两种不同的图案,然后将它们放置在特定设计中,根据窗口是否为500 x 500, 700 x 700 or 900 x 900
像素自动调整。
我已经完成了任务,但是,我的代码的一大部分效率很低,很长,因此这并不理想。
下面是长且效率低下的代码:
def DrawPattern(width,size,win,colour):
if size == 5:
for x in range(0,width,100):
drawCircleExpanse(win,x,400,colour)
for j in range(100,400,100):
drawCircleExpanse(win,j,300,colour)
drawCircleExpanse(win,200,200,colour)
for j in range(100,400,100):
drawCircleExpanse(win,j,100,colour)
for x in range(0,width,100):
drawCircleExpanse(win,x,0,colour)
if size == 7:
for x in range(0,width,100):
drawCircleExpanse(win,x,width-100,colour)
for j in range(100,width-100,100):
drawCircleExpanse(win,j,width-200,colour)
for i in range(200,width-200,100):
drawCircleExpanse(win,i,width-300,colour)
drawCircleExpanse(win,300,300,colour)
for j in range(100,width-100,100):
drawCircleExpanse(win,j,100,colour)
for x in range(0,width,100):
drawCircleExpanse(win,x,0,colour)
for i in range(200,width-200,100):
drawCircleExpanse(win,i,width-500,colour)
if size == 9:
for x in range(0,width,100):
drawCircleExpanse(win,x,width-100,colour)
for j in range(100,width-100,100):
drawCircleExpanse(win,j,width-200,colour)
for i in range(200,width-200,100):
drawCircleExpanse(win,i,width-300,colour)
for y in range(300,width-300,100):
drawCircleExpanse(win,y,width-400,colour)
drawCircleExpanse(win,400,400,colour)
for j in range(100,width-100,100):
drawCircleExpanse(win,j,100,colour)
for x in range(0,width,100):
drawCircleExpanse(win,x,0,colour)
for i in range(200,width-200,100):
drawCircleExpanse(win,i,width-700,colour)
for y in range(300,width-300,100):
drawCircleExpanse(win,y,width-600,colour)
的size
变量取用户的输入;例如5, 7 or 9
。这转换为500 x 500, 700 x 700 or 900 x 900
。与colour
类似,它只会将颜色更改为用户选择的颜色之一。
此代码,将产生以下的图案,与所述尺寸5
其转换为500 x 500
:
的drawCircleExpanse
功能,它构造图案本身,包含以下代码:
def drawCircleExpanse(win,x,y,colour):
rad = 50
for c in range(10):
circle = Circle(Point(50+x,(50+(c * 10)/2)+y), rad)
circle.setOutline(colour)
circle.draw(win)
rad -= 5
如果有人能够帮助缩短我的大量代码块,我将不胜感激。
我不确定这种类型的问题是关于这里的主题。我以前从来没有问过这个SE,但是也许codereview SE是问这样一个问题的好地方?在发布之前,我会仔细检查那里的主题指南,但感觉这可能更适合那里。 – Lexi