【问题标题】:My python wolf-goat-cabbage script crashes python 2.6我的 python wolf-goat-cabbage 脚本崩溃了 python 2.6
【发布时间】: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


【解决方案1】:

如果错误是未解决的引用,我认为是因为这些:

one_travelers = set(traveler for traveler in node if node[traveler] == side_without_farmer)

# dangeroos animals
unsafe = set(['wolf', 'goat']).issubset(lone_travelers)

您声明了 one_travelers 并使用了 lone_travelers。

用这样的问题发布错误是一个好习惯。如果你使用像pycharm这样的好ide,你也可以避免这样的错误(我喜欢pycharm)

【讨论】:

  • 抱歉,这是我的错字。代码已编辑
  • 实际上它让我崩溃并出现错误:达到最大递归深度。我尝试从 pyCharm 运行它。我想同样的事情正在发生在你身上。您可以尝试通过将 sys.setrecursionlimit 修改为更高的值来更改限制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
相关资源
最近更新 更多