【发布时间】:2014-10-29 10:26:10
【问题描述】:
我正在尝试创建一个解决白菜山羊的脚本。每当我运行我的代码 python 崩溃。我的代码有什么问题导致它不起作用?我正在尝试获取它以便代码运行,然后打印出解决问题的每个步骤。
搜索.py
class Nodes:
def succ(self, n):
raise Exception, "Successor undefined"
def start(self):
raise Exception, "Start undefined"
def goal(self, n):
raise Exception, "Goal undefined"
wolf_cabbage_goat.py
import search # get the interface
def other_side(left_right):
if left_right == 'left': return 'right'
elif left_right == 'right': return 'left'
def safe(node):
# the side without the farmer needs check,
# the other is safe
side_without_farmer = other_side(node['farmer'])
lone_travelers = set(traveler for traveler in node if node[traveler] == side_without_farmer)
# dangeroos animals
unsafe = set(['wolf', 'goat']).issubset(lone_travelers) or\
set(['goat', 'cabbage']).issubset(lone_travelers)
return not unsafe
class Wolf_Cabbage_Goat(search.Nodes):
def start(self):
# farmer, wolf, cabbage, goat on one side
return { 'farmer': 'left',
'wolf': 'left',
'goat': 'left',
'cabbage': 'left' }
def goal(self, node):
# true if all moved to right
return set(node[i] for i in node) == set(['right'])
def succ(self, node):
for traveler in node.keys() + ['']:
# for all possible travelers, including none
if traveler == 'farmer':
continue
# ignore, we'll deal separately with him
new_node = node.copy()
# create a safety copy
# if somebody wants to travel, and the farmer is on the
# same side, do it
if traveler and new_node[traveler] == new_node['farmer']:
new_node[traveler] = other_side(new_node[traveler])
# the farmer always travels
new_node['farmer'] = other_side(new_node['farmer'])
# after a trip, the new state is ok if no one gets eaten
if safe(new_node):
yield new_node
depth_first_search.py
def depth_first_search(problem, node):
if problem.goal(node): return [node]
# base case
for n_succ in problem.succ(node):
sol = depth_first_search(problem, n_succ)
if sol:
# first path is returned
return [node] + sol
wcg_run.py
import wolf_cabbage_goat
from depth_first_search import *
wcg = wolf_cabbage_goat.Wolf_Cabbage_Goat()
print depth_first_search(wcg, wcg.start())
【问题讨论】:
-
请显示错误信息。
-
@laike9m 没有弹出错误代码。只有一个窗口显示“pythonw.exe 已停止工作”并让我选择关闭程序
-
它在其他版本的 python 上也有效吗?为什么用 2.6?
-
@Vincent Beltman 作为我们课程的一部分,我们使用 2.6 进行作业。因此,如果我在 2.6 中学习会更好
标签: python crash python-2.6 depth-first-search