【发布时间】:2014-04-28 16:48:06
【问题描述】:
编辑:
随附的代码有一些错误,这些错误与标题中的问题无关。答案很简单,所以我删除了不相关的代码,以便标题中提出的问题和答案对于那些搜索此类内容的人来说更清楚。感谢所有花时间阅读代码并给我一些反馈的人!
原始问题,删节:
当我的 Python 脚本尝试访问由'__name__ ==' 键入的dict 条目'"__main__":' 时,我似乎遇到了麻烦。我的问题与将这些字符串用作变量有关,还是我的脚本更有可能在其他地方失败? (SPOILER:我的算法错了。)
【问题讨论】:
-
回答您的实际问题:是的,它是一个可散列的(字符串)对象,因此它可以是一个键。您的“错误”是
KeyboardInterrupt- 究竟是什么问题? -
问题在于,只要 2-gram "_name_ ==" 出现,它就会挂起(似乎无限期地)。我已经复制了无数次了。我将每个可能出现的单词的默认概率设置为 1.0,所以我认为算法应该很快找到可接受的单词。
-
我突然想到我没有考虑多余的引号,正如我们在
\__name__ == "\__main__"Investigating now 中看到的那样。 -
如果不具体分析为什么它似乎总是针对某个字符串失败,我可以告诉您,您的随机选择算法存在可能导致无限循环的固有缺陷。与其在做出无效选择时再次尝试,不如重写它以使无效选择不在可能的选择中。
-
我的意思是,在您调用
random.sample(ngram_to_kwords和gibbs_sample_data)的两种情况下,都存在选择先前失败的项目的可能性,从而允许它连续循环而没有成功。您需要以某种方式从选择池中删除失败的尝试,直到循环结束。
标签: python python-3.x dictionary hidden-markov-models