1
所以我從redblob遊戲(http://www.redblobgames.com/)這個好人那得到了這段代碼,我在轉換他的Py3.0代碼時遇到了一些困難到Py2.7。將代碼從Py3.0轉換爲2.7Py Super()和打印聲明
代碼可以在這裏找到。這是相當大的,所以我得到,如果你不想看看它:(http://www.redblobgames.com/pathfinding/a-star/implementation.py)
如果你可以請建議一些改變,我可以做到這一點,將不勝感激。目前我發現了3個錯誤,其中2個是我不瞭解的語法。
語法1
def from_id_width(id, *, width):
的誤差是 「*」,
語法2
print("%%-%ds" % width % draw_tile(graph, (x, y), style, width), end="")
誤差結束= 「」
類型錯誤
class GridWithWeights(SquareGrid):
def __init__(self, width, height):
super().__init__(width, height)
self.weights = {}
super()
至少需要1個參數(0給出)
但是,當我在super()
把GridWithWeights
:
TypeError: must be type, not classobj
另請注意,根據我的經驗,如果您在Python 2和Python 3之間進行轉換,最狡猾的變化是整數除法3/2 = 1(Python 2)vs 3/2 = 1.5(Python 3)。如果你想要在兩個版本中進行整數除法,最好使用3 // 2。 – Matthias
@Matthias'from __future__ import division'? – Carpetsmoker
@Carpetsmoker是的,你可以導入Python 3的行爲。但是我發現它更容易(例如,在交互式shell中編寫一些命令)以使用另一個不必每次都要導入的運算符。此外,導入只會改變Python 2中的行爲(在Python 3中這是默認設置),所以在你想要兼容Python 2和Python 3的代碼時,這看起來很奇怪(在我看來)。 – Matthias