from graphics import GraphicsWindow
win=GraphicsWindow(400,400)
canvas=win.canvas()
canvas.setFill("black")
#first line
canvas.drawRect(10,10,10,10)
canvas.drawRect(30,10,10,10)
canvas.drawRect(50,10,10,10)
canvas.drawRect(70,10,10,10)
#second line
canvas.drawRect(20,20,10,10)
canvas.drawRect(40,20,10,10)
canvas.drawRect(60,20,10,10)
canvas.drawRect(80,20,10,10)
#third line
canvas.drawRect(10,30,10,10)
canvas.drawRect(30,30,10,10)
canvas.drawRect(50,30,10,10)
canvas.drawRect(70,30,10,10)
#fourth line
canvas.drawRect(20,40,10,10)
canvas.drawRect(40,40,10,10)
canvas.drawRect(60,40,10,10)
canvas.drawRect(80,40,10,10)
#fifth line
canvas.drawRect(10,50,10,10)
canvas.drawRect(30,50,10,10)
canvas.drawRect(50,50,10,10)
canvas.drawRect(70,50,10,10)
#sixth line
canvas.drawRect(20,60,10,10)
canvas.drawRect(40,60,10,10)
canvas.drawRect(60,60,10,10)
canvas.drawRect(80,60,10,10)
#seventh line
canvas.drawRect(10,70,10,10)
canvas.drawRect(30,70,10,10)
canvas.drawRect(50,70,10,10)
canvas.drawRect(70,70,10,10)
#eighth line
canvas.drawRect(20,80,10,10)
canvas.drawRect(40,80,10,10)
canvas.drawRect(60,80,10,10)
canvas.drawRect(80,80,10,10)
win.wait()
所以这将创建一个带有64个黑色方块的棋盘,但我觉得这是更多的代码然后是必要的。如何更改它,以便只通过增加y坐标(x,y,高度,宽度)并且没有这个疯狂的数量来打印第1,3,5,7行和第2,4,6,8行代码?
这样的东西?
canvas.drawRect(10,,10,10).formatrange(y,10,30,50,70)
canvas.drawRect(30,,10,10)
canvas.drawRect(50,,10,10)
canvas.drawRect(70,,10,10)
请记住,我的代码确实有效,我只是想让它看起来更好看,而不是那么混乱。
答案 0 :(得分:0)
使用简单的循环:
for y in range(1, 9):
for x in range(4):
base = 20 if y % 2 == 0 else 10
canvas.drawRect(base + (x * 20), y * 10, 10, 10)
此处y
的范围为1到8(包括1和8),将其乘以10可得到10,20,30,40等。对于每y
,x
范围从0到3包含,乘以20得到0,20,40和60.添加10或20可以得到10 - 70或20 - 80的范围。
使用itertools.product()
可以消除一个循环:
from itertools import product
for y, x in product(range(1, 9), range(4)):
base = 20 if y % 2 == 0 else 10
canvas.drawRect(base + (x * 20), y * 10, 10, 10)
快速演示只打印使用的坐标:
>>> from itertools import product
>>> for y, x in product(range(1, 9), range(4)):
... base = 20 if y % 2 == 0 else 10
... print (base + (x * 20), y * 10)
...
(10, 10)
(30, 10)
(50, 10)
(70, 10)
(20, 20)
(40, 20)
(60, 20)
(80, 20)
(10, 30)
(30, 30)
(50, 30)
(70, 30)
(20, 40)
(40, 40)
(60, 40)
(80, 40)
(10, 50)
(30, 50)
(50, 50)
(70, 50)
(20, 60)
(40, 60)
(60, 60)
(80, 60)
(10, 70)
(30, 70)
(50, 70)
(70, 70)
(20, 80)
(40, 80)
(60, 80)
(80, 80)
答案 1 :(得分:0)
但我觉得这是更多的代码然后必要
你当然对它有正确的感觉;)
for j in range(10, 90, 10):
for j in range(10, 90, 20):
if j % 2 == 1:
for i in 10, 30, 50, 70:
canvas.drawRect(i, j, 10, 10)
else:
for i in 20, 40, 60, 80:
canvas.drawRect(i, j, 10, 10)
或者如果你在第二个循环中移动if
:
for j in range(10, 90, 10):
for i in 10, 30, 50, 70:
if j % 2 == 1:
canvas.drawRect(i + 10, j, 10, 10)
else:
canvas.drawRect(i, j, 10, 10)
或者有点不同但更短:
for j in range(10, 90, 10):
start = 10 if j % 2 == 1 else 20
for i in range(start, 90, 20):
canvas.drawRect(i, j, 10, 10)