【发布时间】:2020-01-03 18:09:22
【问题描述】:
我有这个功能(见下文),它看起来像是重复了四次。四个代码 sn-ps 非常相似,只是在一些数学运算符上有所不同。是否可以使此代码更短?我找不到方法,但我希望能够只调用一个函数(在函数中),在代码 sn-ps 中交换“-”、“+”和“”符号,以便我不必重复它们?
代码
def diag_grannar(storlek,troll_position): #funktion som kollar efter diagonala grannar
ny_rad = troll_position[0]
ny_kol = troll_position[1]
diag_grannar = []
# while-loopen letar efter diagonala grannar snett vänster ovanifrån troll_position
while True:
ny_rad -= 1
ny_kol -= 1
if ny_rad >= 1 and ny_kol >= 1:
diag_grannar.append([ny_rad,ny_kol])
else:
ny_rad = troll_position[0]
ny_kol = troll_position[1]
break
# while-loopen letar efter diagonala grannar snett vänster nedanifrån troll_position
while True:
ny_rad += 1
ny_kol -= 1
if ny_rad <= storlek and ny_kol >= 1:
diag_grannar.append([ny_rad,ny_kol])
else:
ny_rad = troll_position[0]
ny_kol = troll_position[1]
break
# while-loopen letar efter diagonala grannar snett höger nedanifrån troll_position
while True:
ny_rad += 1
ny_kol += 1
if ny_rad <= storlek and ny_kol <= storlek:
diag_grannar.append([ny_rad,ny_kol])
else:
ny_rad = troll_position[0]
ny_kol = troll_position[1]
break
# while-loopen letar efter diagonala grannar snett höger ovanifrån troll_position
while True:
ny_rad -= 1
ny_kol += 1
if ny_rad >= 1 and ny_kol <= storlek:
diag_grannar.append([ny_rad,ny_kol])
else:
ny_rad = troll_position[0]
ny_kol = troll_position[1]
break
return diag_grannar
为了清楚起见,我指的代码 sn-ps 是这些:
while True:
ny_rad -= 1
ny_kol += 1
if ny_rad >= 1 and ny_kol <= storlek:
diag_grannar.append([ny_rad,ny_kol])
else:
ny_rad = troll_position[0]
ny_kol = troll_position[1]
break
最好的问候;
【问题讨论】:
标签: python function code-duplication