我有這個函數來檢查我們在通過座標系旅行時面對的方式,通過查看元組中的值如何增加或減少與路點列表中的下一個值相比較。看代碼,它感覺複雜和笨拙:我如何縮短這個if語句?
a.facing = self.direction(a.travel_list[0], a.travel_list[1])
def direction(self, start, end):
s_width = start[0]
s_height = start[1]
e_width = end[0]
e_height = end[1]
# check directions
if s_height < e_height:
if s_width < e_width:
return 'right'
elif s_width > e_width:
return 'up'
else:
return 'up_right'
elif s_height > e_height:
if s_width < e_width:
return 'down'
elif s_width > e_width:
return 'left'
else:
return 'down_left'
elif s_height == e_height and s_width < e_width:
return 'down_right'
else:
return 'up_left'
返回值被調整爲順時針旋轉一步。我的問題是,我們如何更改代碼以使功能更短,更高效?
編輯:請注意,只能在指定的8個方向上進行移動。
「開始」和「結束」能夠平等嗎?你似乎沒有正確處理這種情況。另外,我認爲'elif s_height == e_height和s_width
jimhark
@jimhark我只在移動時調用這個函數,所以不需要改變面向方向。 –
我剛剛注意到(通過測試)你製作的字符串,這個,非直觀的。 @ AshRj的生成結果對我來說更有意義,但也許我不完全理解您的要求(或者可能是定義)。那麼你能解釋爲什麼'如果s_height
jimhark