这就是我现在拥有的。简而言之,它的目的是一个更大的程序的一部分,采取伪造的代码并将其变成游戏板。
FIRST_LAYER_CODE = [] # This is where the psuedocode goes.
def irrelevant_name(tilesMade, xCoordinate, yCoordinate):
# There is some other stuff in this function, but it is not relevant to the question.
elif FIRST_LAYER_CODE[tilesMade][0:3] == "BLC":
for i in range(2):
for j in [0, (1/3), (2/3)]:
Rectangle(Point(xCoordinate + j, yCoordinate + j), Point(xCoordinate + j + (1/3) + (i * (1 - (j + (1/3)))), yCoordinate + 1 - (i * ((2/3) - j)))).draw(window)
elif FIRST_LAYER_CODE[tilesMade][0:3] == "BRC":
for i in range(2):
for j in [1, (2/3), (1/3)]:
Rectangle(Point(xCoordinate + j, yCoordinate + 1 - j), Point(xCoordinate + j - (1/3) - (i * (j - (1/3))), yCoordinate + 1 - (i * (j - (1/3))))).draw(window)
elif FIRST_LAYER_CODE[tilesMade][0:3] == "TLC":
for i in range(2):
for j in [0, (1/3), (2/3)]:
Rectangle(Point(xCoordinate + j, yCoordinate + 1 - j), Point(xCoordinate + j + (1/3) + (i * (1 - (j + (1/3)))), yCoordinate + (i * ((2/3) - j)))).draw(window)
elif FIRST_LAYER_CODE[tilesMade][0:3] == "TRC":
for i in range(2):
for j in [1, (2/3), (1/3)]:
Rectangle(Point(xCoordinate + j, yCoordinate + j), Point(xCoordinate + j - (1/3) - (i * (j - (1/3))), yCoordinate + (i * (j - (1/3))))).draw(window)
此代码按预期工作,但我总是看到人们拥有更时尚的代码,更重要的是更优化的代码。我可以做些什么来简化这段代码?我没有要求你给我任何代码!!!我只是想要优化这个代码,因为我是编程的新手! (大写不是一个卑鄙的手势,但我不希望有人说我只是要求代码。)
现在我知道我得到的第一个建议是for循环看起来是重复的,我应该创建一个具有for循环并生成矩形的新函数,但问题是使新矩形不同的部分对于每个循环,我不能通过诸如(1-j)之类的参数,因为j还没有被声明。
我一直在考虑这个问题,并且一无所获。我只需要想法,当然感谢你!
答案 0 :(得分:2)
此处的关键是删除重复项
您复制了FIRST_LAYER_CODE[tilesMade][0:3]
。你可以在这里制作一个局部变量
由于您总是希望for i in range(2)
,因此您需要重构一个级别并在循环体内执行if
。
接下来要重复的是for j in [0, (1/3), (2/3)]: ... Rectangle(Point(xCoordinate + j, yCoordinate + ...
内容。这些行中唯一真正改变的是第一个列表项(0表示#34; BLC和#34; 1表示" BRC"等)以及从坐标中添加/减去的内容。不要为每个块重复for j in (...
和Rectangle(Point..)
内容,只需修改之后使用的局部变量。
def irrelevant():
letters = FIRST_LAYER_CODE[tilesMade][0:3] == "BLC"
offsets = []
if letters == "BLC"
offsets = [0, 1/3, 2/3, 0,0, 1/3, -1, ...]
elif letters = "BRC"
offsets = [1, 2/3, 1/3, 1, ...]
for i in range(2):
for j in [offsets[0], offsets[1], offsets[2]]:
Rectangle(Point(x + offsets[3])...draw()
offsets
是您在Point
数学和for j
循环中使用的数字/加倍数。
你可以利用1 - j
= 1 + (-1)*j
和1 + j
= 1 + (1)*j
这一事实基本上总是做加法只需使用1或-1作为&#34 ; j乘数"。
但是,这很快就会很难跟踪,因此您可能希望使用命名项词典来保持偏移值清晰。
offsets = { 'topleft': 1, .... }
...
更进一步,您可以根据3个字母作为关键字来定义字典,并在那里存储偏移值。
offsets = {'BLC': { 'topleft': 1, ... }, 'BRC': }
这样可以避免使用ifs
而只是进行字典查找。有了这个,你的方法将是大约3行加上你需要代表你的"控制"数据(offsets
)。
希望我给你足够的思考,并希望这有用而且清晰。