2012-04-11 66 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參數,因此比較從不改變。