Google foobar编码挑战中的Odd RuntimeError

时间:2015-05-19 04:02:03

标签: python python-2.7

这是我的第二个挑战 - 它被称为“guard_game”。

挑战在于创建一个函数,递归地将数字的数字相加,直到您有一个数字,并返回该数字。

我的解决方案如下,它在我的机器上运行正常:

answers = {}

def answer(x):
     return answers[x] if answers.setdefault(x,sum(int(_) for _ in str(x))) in xrange(1,10) else answer(answers[x])

if __name__ == '__main__':
    print answer(1235)
    print answer(13)

但是,Google foobar控制台在第4行提供了RuntimeError。我尝试通过将逻辑拆分为单独的块来追踪问题(很难做到printstr(x)控制台屏幕),它似乎是由这个位引起的:long

可能相关:Google foobar约束提到代码是在Python 2.7.6沙箱中运行的。我学会了使用100%Python 3,所以我有可能做错了。约束还表示输入将是int(与现代Python中的if (viewHolder.url == null || url.equals(viewHolder.url)){ viewHolder.url = url; // load image } 相同),介于1和2147483647之间。

有谁知道问题可能是什么?

1 个答案:

答案 0 :(得分:3)

我注意到的一件事(这发生在另一个叫做字符串清理的挑战中),过多的递归调用在Google Foobar中运行不佳。它只需要太长时间,然后永远不会返回任何东西。我优化了我的代码并减少了很多递归调用,然后就可以了。