SingPath和Python帮助! - “创建问题集模式”中的无限循环错误

时间:2012-11-16 17:43:43

标签: python python-3.x

SingPath是一个交互式问题集网站,可跟踪您在多种编程语言中的进展。不幸的是它有一些错误。最大的是错误:

  

您的代码需要很长时间才能返回。您的解决方案可能会陷入无限循环。请再试一次。

运行问题集代码时,

多次出现。现在,在回答问题集问题时,您需要做的就是纠正错误,只需重新运行代码即可。

然而,在问题创建者中,它会产生巨大的问题。基本上你可以运行代码,直到它在创建者中工作,这不是测试的问题。问题源于提交problem/solution,因为提交按钮重新运行代码。这意味着您需要获得两个连续的正确答案,这些答案几乎不可能得到(我现在已经尝试了一个小时)。 创建问题需要在问题集中继续的事实在错误的创建者身上被破坏了。

所以(最后)这是我的问题,如何在创建者中运行以下代码而不会出现此错误?

代码:

import string
import random

# Takes a blank string then replaces it with 3 random letters/numbers.

def string3(s1):    
    s2 = ''
    def randstring (size = 3, chars = string.ascii_lowercase + string.digits):
       a = ''.join(random.choice(chars) for x in range(size))
       return a

    ''' If the string brought in isnot equal to the string generated keep
        rerunning the random string generator '''

    while s1 != s2:    
        s2 = randstring()

    return 'True'

示例函数调用:

>>> string3('abc')
'True'
>>> string3('a2d')
'True'
>>> string3('234')
'True'

代码的作用:

无限猴子定理指出

  

如果有足够的时间,随意输入的假想猴子,作为其输出的一部分,几乎肯定会产生所有莎士比亚戏剧。

创建一个函数string3,它将随机生成3个字符的字符串,直到这些字符等于从函数接收的字符串。提示:搜索随机字符串生成器以供参考。字符串中的所有字符都是小写的。

我是一名初学者程序员,如果有一些意见,我希望能够理解更复杂的解决方案,尽管我会感激任何帮助/建议!

另外,我已经通知了SingPath的支持人员,但是我想尽可能多地练习今天!如果不可能在客户端修复bug我完全理解!祝你好运!

重要编辑

我忘了提到无论代码中的循环如何都会发生这个错误。虽然我的程序非常强烈,随着字符的不断随机分配我知道这不是问题(它可能是一个问题但不是问题XD)。如果您不相信我尝试在此处创建问题:http://singpath.appspot.com/

即使是简单的函数声明和返回如:

def add_one(n):
       return n+1

可能导致循环错误!如果我可以做任何事情(异常声明?)请告诉我!

3 个答案:

答案 0 :(得分:2)

您的代码可能很慢,但无论您做什么,都会看到错误。我刚刚登录并开始沿着Python路径前进,并且在计算密集度不高的情况下得到了同样的错误:

oops=317

该网站似乎正在发生的事情是它受到过多流量的抨击。 (回到那一天,我会说它们是斜线,但我想说它们是堆栈溢出的更正确。;)

答案 1 :(得分:0)

这不是错误或错误,而是设计决定。你正在做的是非常计算密集(见下面的解释),网站可能有一个有限的硬件预算。如果他们允许每个学生尽可能多地运行有限的无限代码,那么企业就会很快陷入瘫痪。所以他们决定你的代码应该被杀死。

有27 ^ n个可能的n字符单词由(英语)拉丁字母表的27个小写字符组成。这是很多要尝试的事情,即使n只有3个。而且,你随机生成字符串,所以不可避免地会有一些重复,你可能不得不生成超过27 ^ n个字符串来找到一个你在找。

这是一个重要的教训 - 很容易白色的东西需要一年才能完成。

答案 2 :(得分:0)

从最初的问题(作为答案发布):

  

经过多次尝试让程序运行然后提交我终于幸运并提交了我的问题“Sir Monkey Shakespeare”。我知道的一个问题的蹩脚名称,但它终于完成了工作。如果您遇到相同的错误,请尝试删除任何私有测试,因为它几乎每次都会提供正确答案,因为无需再次运行代码。