2012-04-11 48 views
1

这是我的第一篇文章在这里。我对Python和编程一般都很陌生,所以我不确定我出错的地方。这是一个解决方案,我想到了项目欧拉问题#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 
+1

请不要删除问题 - 它可能对其他人有用!它也使下面的所有答案无效。 – Hooked 2012-04-11 16:07:58

+0

是的,我意识到,我试图删除它后哈哈。感谢您恢复它Sven =) 对不起,我是新来的。 – 2012-04-11 16:13:19

回答

4

变量x2等在循环内部没有改变,所以它们将始终保持它们的初始值。如果您希望在num更改时重新计算其值,则需要将该代码移至循环中。

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

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

相当于

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

这可能不是你想要的。

+0

ands不是问题,但第一部分是。谢谢 – 2012-04-11 16:03:49

+0

@JenCamara:条件也是错的,相信我。 – 2012-04-11 16:05:58

+0

那么它为什么会起作用? – 2012-04-11 16:08:57

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元素非常方便!

+0

OP实际上需要'不是x2 == x3 == x4 == x5 == x6'。 – 2012-04-11 16:07:02

+0

是的,不把我的变量放在while循环中是问题。我的支票确实按预期工作。我不确定你描述的方法会做我想做的事情。谢谢回答。 – 2012-04-11 16:07:29

1

您不修改while循环中的任何xi参数,因此比较从不改变。