1

这是我在此的头一篇博文。我是 Python 和一般编程的新手,所以我不确定我哪里出错了。这是我在 Project Euler 上针对问题 #52 提出的解决方案(我知道这也可能不是最好的方法)。我对这段代码的问题是 while 语句在得到正确答案时不会中断。只有当我以正确答案开始 num 时,它才会抓住它并给我答案:142857,但是当我用其他任何东西初始化它时,它会继续计数超过 142857。奇怪的是我使用了相同的确切方法来回答另一个欧拉问题,那个工作得很好。谁能告诉我为什么会在这里发生?谢谢!

def digits(number):
    return [int(x) for x in str(number)]

def same_digits():
    num = 1
    x2 = sorted(digits(num*2))
    x3 = sorted(digits(num*3))
    x4 = sorted(digits(num*4))
    x5 = sorted(digits(num*5))
    x6 = sorted(digits(num*6))

    while x2 != x3 != x4 != x5 != x6:
        num += 1
    print num
4

3 回答 3

4

变量x2等在循环内不会更改,因此它们将始终保持其初始值。如果您希望在num更改时重新计算它们的值,则需要将该代码移动到循环中。

此外,您在此处使用比较运算符链接。表达方式

x2 != x3 != x4 != x5 != x6

相当于

x2 != x3 and x3 != x4 and x4 != x5 and x5 != x6

这可能不是你想要的。

于 2012-04-11T15:59:20.127 回答
2

while循环永远不会中断,因为它们的x2,x3,x4,x5,x6值都相同。只有num循环中的变化。

此外,x2 != x3 != x4 != x5 != x6看起来很腥。要检查所有数字是否不同,请尝试:

len(set([x2,x3,x4,x5,x6])) != 5

仅采用set唯一值并len计算此“集合”的大小。最好把它们放在一个列表中,比如说R,这变成:

len(set(R)) != 5

当您的列表包含多个5元素时非常方便!

于 2012-04-11T15:59:06.713 回答
1

您没有修改xiwhile 循环中的任何参数,因此比较永远不会改变。

于 2012-04-11T15:59:14.363 回答