我有第一個函數move(x,y,u,v),用於在棋盤遊戲中將棋子從座標(x,y)移動到(u,v)。Python:爲什麼在while循環中調用的函數會返回與單獨調用不同的東西?
some_Class():
def move(self, x, y, u, v):
self.x = x
self.y = y
self.u = u
self.v = v
if (conditions for possible move...):
return(some_function(self.x, self.y, self.u, self.v)) ## applies the move
else:
return("Move impossible. Try again.")
當移動是可能的,該函數將移動電路板上的片和當移動是不可能的,它返回一個字符串,表示「移動不可能」。
我有很多的測試要做,所以簡化了我的生活我做了一個功能Seconde系列:
def play()
a = input()
b = []
for i in a:
b.append(i)
return(move(b[0], b[1], b[2], b[3]))
,我把它放在一個無限循環,這樣我就可以不斷嘗試移動後的舉動。
while True:
play()
整件事正常工作,棋子按照遊戲規則感動,一切都很好,只是當移動是不可能的我不明白「移動不可能」的消息。
如果我自己調用play()(在while循環之外,例如在shell中),並嘗試一個不可能的動作,我確實收到了這條消息。
我很確定這是非常基本的東西,但我無法找到答案的任何地方,我需要這些消息,因爲我用它們來定位代碼中的錯誤。
如果不清楚,我會添加一個示例。假設從(0,0)移動到(1,1)是不可能的。
案例1,播放(),而不循環:
>>>play()
0011
'Move impossible. Try again.'
案例2中,打()在一個循環內:
while True:
play()
0011
0011
...
此舉不播放(片停留在其位置),但我沒有收到消息。這是爲什麼?
編輯:問題解決了。
print(play())
沒有工作,但我不得不這樣做是
return(print("Impossible move"))
,而不是
return("Impossible move")
謝謝大家的幫助:)
請提供[MCVE]。 – TigerhawkT3
但是在你的代碼中,我沒有看到返回「」不可能「的部分? –
當條件不滿足時,功能移動返回「移動不可能」。我會爲這個添加一個例子 – Peyolikepeyote