0
我正在編寫一個程序來解決經典的河流謎題,我有點困惑於此。基本上我有一個功能getmoves
,它給了我一個包含有效遊戲狀態列表的列表。該函數通過執行所有可能的移動並將有效的移動添加到輸出來計算有效的遊戲狀態。我的list.append發生了什麼問題?
問題是我每次追加到output
整個output
的變化。
def getmoves(gamestate):
"""
Returns a list of all possible moves
"""
boatshore=None
moveablemen=[]
moveableobjects=[]
output = []
gs = gamestate
for item in gs:
if item['name'] == 'boat':
boatshore = item['shore']
for item in gs:
if (item['shore'] == boatshore and item['name'].find('man')!=-1):
moveablemen.append(item)
for item in gs:
if (item['shore'] == boatshore and item['name'] != 'boat'):
moveableobjects.append(item)
for man in moveablemen:
for obj in moveableobjects:
if (man != obj and man['value']>=obj['value']):
possiblemove = move(man['name'], obj['name'],gs)
if shorenetworth(possiblemove) == True:
output.append(possiblemove)
pp.pprint(output)
return output
輸出是這個追加後的操作:
[ [ { 'name': 'manA', 'shore': -1, 'value': 3},
{ 'name': 'manB', 'shore': 1, 'value': 5},
{ 'name': 'manC', 'shore': 1, 'value': 8},
{ 'name': 'coinA', 'shore': -1, 'value': 3},
{ 'name': 'coinB', 'shore': 1, 'value': 5},
{ 'name': 'coinC', 'shore': 1, 'value': 8},
{ 'name': 'boat', 'shore': -1}]]
輸出是這最後:
[ [ { 'name': 'manA', 'shore': -1, 'value': 3},
{ 'name': 'manB', 'shore': 1, 'value': 5},
{ 'name': 'manC', 'shore': -1, 'value': 8},
{ 'name': 'coinA', 'shore': -1, 'value': 3},
{ 'name': 'coinB', 'shore': 1, 'value': 5},
{ 'name': 'coinC', 'shore': -1, 'value': 8},
{ 'name': 'boat', 'shore': -1}],
[ { 'name': 'manA', 'shore': -1, 'value': 3},
{ 'name': 'manB', 'shore': 1, 'value': 5},
{ 'name': 'manC', 'shore': -1, 'value': 8},
{ 'name': 'coinA', 'shore': -1, 'value': 3},
{ 'name': 'coinB', 'shore': 1, 'value': 5},
{ 'name': 'coinC', 'shore': -1, 'value': 8},
{ 'name': 'boat', 'shore': -1}],
[ { 'name': 'manA', 'shore': -1, 'value': 3},
{ 'name': 'manB', 'shore': 1, 'value': 5},
{ 'name': 'manC', 'shore': -1, 'value': 8},
{ 'name': 'coinA', 'shore': -1, 'value': 3},
{ 'name': 'coinB', 'shore': 1, 'value': 5},
{ 'name': 'coinC', 'shore': -1, 'value': 8},
{ 'name': 'boat', 'shore': -1}],
[ { 'name': 'manA', 'shore': -1, 'value': 3},
{ 'name': 'manB', 'shore': 1, 'value': 5},
{ 'name': 'manC', 'shore': -1, 'value': 8},
{ 'name': 'coinA', 'shore': -1, 'value': 3},
{ 'name': 'coinB', 'shore': 1, 'value': 5},
{ 'name': 'coinC', 'shore': -1, 'value': 8},
{ 'name': 'boat', 'shore': -1}],
[ { 'name': 'manA', 'shore': -1, 'value': 3},
{ 'name': 'manB', 'shore': 1, 'value': 5},
{ 'name': 'manC', 'shore': -1, 'value': 8},
{ 'name': 'coinA', 'shore': -1, 'value': 3},
{ 'name': 'coinB', 'shore': 1, 'value': 5},
{ 'name': 'coinC', 'shore': -1, 'value': 8},
{ 'name': 'boat', 'shore': -1}]]
我敢肯定,我可能犯了一個愚蠢的錯誤的地方,但我不知道如有任何幫助,將不勝感激。
編輯:
def move(man, name, gsinput):
"""
move two items
"""
for item in gsinput:
if (item['name'] == name or item['name'] == man or item['name'] == 'boat'):
item['shore'] *= -1
return gsinput
這是值被附加到output
功能。
'move'做什麼? –
給出兩個'name's和gamestate,將包含名字的字典的'shore'的值乘以'-1'。 – chronologos
最好將該功能的代碼添加到您的問題中。畢竟,這是函數的返回值。 –