Python 3.x Python3.6-我需要一些想法来优化这段代码并使其更干净
这就是我现在拥有的。简单地说,它的目的是作为一个更大的程序的一部分,将psuedocode转换成一个游戏板Python 3.x Python3.6-我需要一些想法来优化这段代码并使其更干净,python-3.x,optimization,Python 3.x,Optimization,这就是我现在拥有的。简单地说,它的目的是作为一个更大的程序的一部分,将psuedocode转换成一个游戏板 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 th
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尚未声明
我已经考虑了一段时间,但什么也没想到。我只是需要一些想法,谢谢 这里的关键是删除重复项
第一层\u代码[tilesMade][0:3]
。你可以在这里做一个局部变量,因此可以将其重构到一个级别,并在循环体中执行if
s
:。。。矩形(点(xCoordinate+j,yCoordinate+…
东西)。这些行中唯一真正改变的是第一个列表项(0表示“BLC”,1表示“BRC”,等等)和从坐标中添加/减去的东西。而不是在(…和矩形(点…)中重复j的)
对于每个块,只需修改随后使用的局部变量即可
def unrelated():
字母=第一层代码[TileSmarte][0:3]=“BLC”
偏移量=[]
如果字母==“BLC”
偏移量=[0,1/3,2/3,0,0,1/3,-1,…]
elif letters=“BRC”
偏移量=[1,2/3,1/3,1,…]
对于范围(2)中的i:
对于[offset[0],offset[1],offset[2]]中的j:
矩形(点(x+偏移[3])…绘制()
其中,偏移量
是您在点
数学和for j
循环中添加/乘以的数字
您可以利用1-j
=1+(-1)*j
和1+j
=1+(1)*j
基本上总是进行加法,只需使用1或-1作为“j乘数”
但是,这很快就会变得难以跟踪,因此您可能希望使用命名项字典来保持偏移量值清晰
offsets = { 'topleft': 1, .... }
...
offsets = {'BLC': { 'topleft': 1, ... }, 'BRC': }
这将使您避免使用ifs
,而只需执行字典查找。使用此方法,您的方法大约需要3行代码加上表示“控制”数据所需的任何内容(偏移量
)希望我给您留下了很多思考的余地,希望这是有帮助的和明确的。这确实是一个很好的回应。非常感谢您,我现在正在努力实现这一点。