这是我在这里的第一篇文章。我是Python和编程的新手,所以我不确定我哪里出错了。这是我在项目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
答案 0 :(得分:4)
变量x2
等在循环内部不会更改,因此它们将始终保持其初始值。如果您希望在num
更改时重新计算其值,则需要将该代码移动到循环中。
此外,您在此处使用比较运算符链接。表达式
x2 != x3 != x4 != x5 != x6
相当于
x2 != x3 and x3 != x4 and x4 != x5 and x5 != x6
这可能不是你想要的。
答案 1 :(得分:2)
while
循环永远不会中断,因为x2,x3,x4,x5,x6
都处于相同的值。循环中只有num
个变化。
此外,x2 != x3 != x4 != x5 != x6
看起来很可疑。要检查所有数字是否不同,请尝试:
len(set([x2,x3,x4,x5,x6])) != 5
set
仅获取唯一值,len
计算此“set”的大小。更好的是把它们放在一个列表中,比如R
,这就变成了:
len(set(R)) != 5
当您的列表中包含超过5
个元素时非常方便!
答案 2 :(得分:1)
您没有修改while循环中的任何xi
参数,因此比较永远不会改变。